Нет записей в таблице сразу после успешной вставки

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Kefiro
Сообщения: 4
Зарегистрирован: 09 сен 2011, 11:12

Нет записей в таблице сразу после успешной вставки

Сообщение Kefiro »

Приветствую!
Помогите, пожалуйста, с такой проблемой. В чём тут может быть дело?
Есть временная таблица. После вставки записи в эту таблицу пытаюсь получить первую запись, и getFirst возвращает ошибку.

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

   table struct Tables (
      cLsch : comp,
      Month : word,
      Year : word
   )
   ;
...
      Tables.cLsch := workingTable.cLschet;
      Tables.Month := workingTable.MesN;
      Tables.Year := workingTable.YearN;

      message((insert current Tables), cmOk);
      message ((getFirst Tables), cmOk);
В этом коде первый message показывает 0, а второй - 4. При чём происходит это не всегда, а только в определённых случаях. Выяснить, чем эти "определённые" случаи отличаются от других, мне не удаётся.

Вообще я этот пример несколько упростил. На самом деле у меня такой код:

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

      
    function collect(var workingTable: Type$LsTab; subject: comp; periodBeginning: date): integer;
   {
      clearBuffer(#Tables);
      Tables.cLsch := workingTable.cLschet;
      Tables.Month := workingTable.MesN;
      Tables.Year := workingTable.YearN;
       insert current Tables;
   }

   procedure proc;
   {
      delete all Tables;

      mCount := bDate;
      while (mCount <= eDate) {
         bindEvent(collect, WTLF.collectTable);
         WTLF.refreshTableListExt(0, cPodr, mCount, validator);
         unBindEvent(collect, WTLF.collectTable);
         mCount := add_months(mCount, 1);
      }

      _loop Tables {
           //....
      }
  }
WTLF - это штатный объект типа WorkingTableListFunctions, который в refreshTableListExt просматривает табеля по подразделению cPodr и для каждого табеля вызывает мою функцию collect. Для одних подразделений всё проходит верно, но по некоторым cPodr не работает _loop. Как я выяснил, из-за того, что в Tables нет записей. Смотрю отладчиком - все строки функции collect отрабатывают верно, insert возвращает 0. Поэтому я попробовал getFirst (как в первом примере) - он возвращает 4. С чем это может быть связано? Куда копать?
Последний раз редактировалось Kefiro 20 окт 2011, 15:51, всего редактировалось 1 раз.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Нет записей в таблице сразу после успешной вставки

Сообщение edward_K »

Обычно проблема с ограничениями на таблицу или с временем ее жизни.
Если вы в другом интерфейсе вызываете эту таблицу, то ее как миниум нужно объявлять в одном проекте или использовать mtChangeRefCount (что в вашем случае неприемлемо, поскольку используете объектный интерфейс). Кроме того после работы в другом интерфейсе с любой таблицей не лишне сделать rereadrecords. Лучше конечно в вашем случае обращаться ко временной таблице также функциями объектного интерфейса.
Kefiro
Сообщения: 4
Зарегистрирован: 09 сен 2011, 11:12

Re: Нет записей в таблице сразу после успешной вставки

Сообщение Kefiro »

В логическую таблицу Tables входит без ограничений.
А про её использование не всё понял. Речь о каком объектном интерфейсе? О WorkingTableListFunctions? Он только вызывает функцию моего интерфейса. А все операции с Tables проходят только в моём интерфейсе.
Ответить