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

Почему не работает?

Добавлено: 24 авг 2005, 12:22
Sheinina
Может быть, кто-нибудь подскажет, что я пишу неправильно:

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

Interface Main_Int 'Формирование накладных по гонорарам' EscClose, Cyan;
view 
as select * from persons(readonly), lschet (readonly), catalogs (readonly), gonorar
where ((
    persons.nrec    /== lschet.tperson
and persons.nrec    /== gonorar.cpers
and lschet.cappoint /== catalogs.nrec
)) and catalogs.nrec <> cstyler
order o1 by catalogs.name, persons.tabnmb;

panel p1 table persons;
browse b1;
    persons.tabnmb   'Таб.№'     : [6],  protect;
    persons.fio      'Сотрудник' : [20], protect;
    catalogs.name    'Должность' : [10], protect;
end;
HandleEvent
  cmInit: {
      setorder(tiO1);
      if getfirst persons <> tsOK then {
         message('Отсутствуют данные по гонорарам');
         CloseInterface(cmCancel);
      }
  }             
  cmDefault:{
  ...
  }
  cmCancel: CloseInterface(cmCancel);
end;
end;
end.


cstyler - некая константа, описанная в файле проекта, Gonorar - добавленная в БД табличка.
При запуске аналогичного запроса из Support'а получаю нормальную табличку, а при запуске интерфейса сообщение об отсутствии данных... :oops:

Добавлено: 24 авг 2005, 14:25
edward_K
интересно
catalogs.nrec чему тут равен?
а не пробовали
styler объявить var c типом comp и присвоить ему значение?
в select то у вас уж точно не константа стоит.
хотя сам запрос будет крайне тормознутый.

Добавлено: 24 авг 2005, 14:52
Sheinina
Ну, поставила я в запрос вместо константы comp(....) - результат тот же. Нет, причина не в этом :cry:
Корифеи, нужна ваша помощь :!:

Добавлено: 24 авг 2005, 15:10
edward_K
1.попробуйте убрать порядок.
2.в любом случае getfirst по persons здесь смысла не имеет наверное
попробуйте просто getfirst
3.снимите ваше условие
4.попробуйте перестроить select
вообще надежней и быстрее снять условие
заполнить времянку(с нужной сортировкой) и работать уже с нею.

Добавлено: 25 авг 2005, 10:13
DarkAngel27
Попробуй убрать order... Очень часто это является причиной получения не полной информации в интерфейсе.

Добавлено: 25 авг 2005, 11:45
Sheinina
Если убираю, все работает. Но без order конкретно хреново и неудобно. Заполнила времянку и строю browse по ней. Не слишком мне это нравится, но работает...
У меня есть еще одна проблема: в вызываемом интерфейсе идет такой кусок:

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

HandleEvent 
...
cmCancel: {
   if Message('Отменить сделанные изменения?',YesNo) = cmYes then {
      ....
   }
}
...
Опция EscClose в заголовке интерфейса не стоит. Но вот никак не придумаю, что надо написать, чтобы остаться в интерфейсе, если на запрос ответят "Нет". Может, посоветуете что-нибудь?

Добавлено: 25 авг 2005, 11:54
edward_K
{
abort

}
можно еще в cmdone попробовать запихать.

Добавлено: 25 авг 2005, 12:09
Sheinina
Спасибо. Я как-то самого этого слова опасаюсь :wink: