Здравствуйте, mrhru, Вы писали:
M>Здравствуйте, solon, Вы писали:
S>>//опрашиваю по таймеру-есть ли новые записи с частотой 250 мсек.
S>>procedure TForm1.Timer1Timer(Sender: TObject);
S>>begin
S>>//Посмотрим обновленные данные
S>> //IBTable1.Close; // может работать и
S>>// IBTable1.Open; // без переоткрытия
S>> IBTable1.Refresh;
S>> IbTable1.Last;
S>>//..нужна последняя запись
S>>end;
S>>Это всё работает, но загружает процессор почти на 100 процентов
S>>да и плюс сетку тоже нагружает на тот случай когда запрашиваем
S>>есть ли новые записи, а их пока нет.
S>> МОЖЕТ ВСЕТАКИ НА САМОМ ИНТЕРБАЙСЕ ЕСТЬ ОПЦИЯ НАСТРАИВАЕМАЯ,
S>>КОТОРАЯ ПОСЫЛАЕТ ОБНОВЛЕННЫЕ ДАННЫЕ ПОДСОЕДИНЕННЫМ КЛИЕНТАМ
S>>(ОТКРЫТЫМ ТАБЛИЦАМ)???
M>Опрашивать о новых записях можно и менее ресурсоёмко.
M>Например, снабжаем каждую запись уникальным ID (который почти наверняка уже есть
), создаваемым в триггере на вставку с помощью отдельного генератора.
M>А затем по таймеру получаем значение этого генератора и сравниваем с запомненым. При изменении — refresh.
M>Для получения значения генератора лучше всего использовать TIBSQL и запрос:
M>SELECT GEN_ID( MY_GENERATOR, 0) AS ID FROM RDB$DATABASE;
M>Далее, если записи в таблицу могут только вставляться, то вместо полного обновления IBTable1.Refresh (тяжёлая процедура), дешевле просто получать новые записи (по тому же ID) и отображать их (уже вручную).
M>Другой способ получения уведомлений — компонент TIBEvent. С его помощью регистрируем на сервере события, в которых заинтересованы.
M>На самом сервере в триггерах при наступлении события выполняем POST_EVENT <строка>. TIBEvent получает его и делаем refresh.
M>При этом не надо постоянно опрашивать сервер, но сама работа с events — требует аккуратности.
1.Правильно ли я Вас понял, что для второго случая с TIBEvent,
что когда вcтавляются новые записи с помощью триггера, последней строкой в триггере
должно быть POST_EVENT <строка>. Тоесть как увязывается воедино:
выполнение запроса на вставку новой записи на сервере
и посылка события POST_EVENT <строка> вставки новой записи с сервера?
2. Я не могу понять как работает в Делфях пример IBXEvents:
открываю базу events.gdb,генерирую событие MyEvent, но две последние
кнопки не работают: Event Registation и Event Received ???
Тоесть в листбокс ничего не вижу???