Страница 1 из 1

Валится IsValid

Добавлено: 09 сен 2008, 14:20
galover
Help! Вылетает галактика по рантайму

Код следующий:

Код: Выделить всё

interface Sample;
create view View1 as select * from KatSopr, SpSopr where ((someCondition...));

publiс procedure Foo;
{
   View1._loop KatSopr
   {
       if (IsValid(#View1.SpSopr)) // Здесь нужно проверить есть ли записи в таблице SpSopr -> получаю runtime error
       {
               
       }
   }
}
end.
Как лечить? Баг или так и должно быть? Спасибо!

Добавлено: 09 сен 2008, 15:01
evchic
if (IsValid(tnSpSopr))

Добавлено: 09 сен 2008, 15:48
galover
НЕТ! SpSopr может быть в нескольких view, нужно именно по конкретной view -> View1

Добавлено: 09 сен 2008, 17:16
evchic
if (IsValid(View1.tnSpSopr)) кажится так

Добавлено: 09 сен 2008, 17:20
galover
пробовал, падает

Добавлено: 10 сен 2008, 05:49
Алексей
а view1.getfirst spsopr ?

Добавлено: 10 сен 2008, 10:28
galover
Алексей
ну это ясное дело работает, вопрос в другом - почему IsValid отбрасывает копыта

Добавлено: 10 сен 2008, 11:23
Max_Fin
IsValid работает только с главной логической таблицей.
Используйте конструкцию

Код: Выделить всё

if View1.RecordExists SpSopr = tsOK
{
}
RecordExists проверит наличие записи в SpSopr, но позиционирования на SpSopr не произойдет

Добавлено: 10 сен 2008, 14:02
galover
Max_Fin
Спасибо, кажется то что нужно!

Добавлено: 10 сен 2008, 14:26
galover
Max_Fin
В догонку. Раз позиционирование не осуществляется, означает ли это что в таком коде

Код: Выделить всё

 View1._loop KatSopr
   {
       if (View1.RecordExists SpSopr = tsOK)
       {
           _var := SpSopr.NoDok; // Что здесь будет????? Валидное или невалидное значение      
       }
   } 
нужно еще позиционироваться и по SpSopr-у (делать тот же getFirst)? Или же позиционирование будет производится автоматически, так как идет проход по KatSopr и соответственно SpSopr будет меняться в зависимости от текущей записи KatSopr-а? Спасибо

Добавлено: 10 сен 2008, 19:28
edward_K
View1.isvalid(View1.tnspsopr) не пашет?
вообще в vip для 2 и далее вьюхи позиционирование кроме как getfirst не сделать ( или _loop делать по всей вьюхе), как и в формах для всех вьюх.

Добавлено: 11 сен 2008, 11:32
galover
edward_K
View1.isvalid(View1.tnspsopr) не пашет?
неа. Получаю
Test.vip(19)
Ошибка: Нет такой функции, поля или метода : View1.ISVALID (стр.6, поз.9 в
Test.vip)
if (View1.IsValid(View1.tnSpSopr))
^ [ Enter-продолжить ] :
вообще в vip для 2 и далее вьюхи
не понял о чем речь

Добавлено: 11 сен 2008, 12:00
edward_K
isvalid раньше в вашем случае никогда не пахало - только getfirst, но правда runtime я тоже не помню, так что в ТП :).