![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Изменения в сетевой БД [Paradox]
MAxiMum © (2002-03-13 15:23:00)Как узнать при работе с сетевой БД Paradox об обновлении записи (ей) в таблице(ах)?
Proggy (2002-03-21 21:58:00) [1]Я делал через DbiRegisterCallBack; так вот моя функция не вызывалась до тех пор, пока я не делал какое либо обращение к BDE (например, перемещение по записям и т.п.)
McSimm (2002-03-14 13:49:00) [2]>MAxiMum © (14.03.02 13:19)
>Так почему эта просьба не работает?
Если две программы подключены к одному и тому же BDE - он должен вызывать их callback при наступлении события.
Если же одна программа подключена к одному BDE, а другая к другому (на другом компьютере), то события в одном BDE и события в другом рассылаются только тем программам, которые к ним подключены.
> Но, я думаю, что TBDECallback работает по тому же принципу.
TBDECallback это просто wrapper (обертка) DbiRegisterCallBack. Существует для удобства программиста.
deleon (2002-03-14 13:44:00) [3][sniknik]- проверь почту, у меня к тебе есть вопросы :)
sniknik (2002-03-14 13:40:00) [4]Отключать обработку таймера при переходе таблицы в State.dsEdit, dsInsert. ?
MAxiMum (2002-03-14 13:19:00) [5]McSimm © Так почему эта просьба не работает?
sniknik © Спасибо, конечно, но через таймер с большой БД не повозишься. Пользователь так и не сможет нисего ввести, постоянный ревреш всё сожрёт.
Кстати, так же есть функция DbiRegisterCallBack в модуле BDE. С ней я не пробовал. Но, я думаю, что TBDECallback работает по тому же принципу.
McSimm (2002-03-14 12:33:00) [6]>sniknik © (14.03.02 12:25)
>..почему .. D.Desktop не обновляет таблицы по Callback?
Наверное потому, что он не использует callback.
>может потому что я не генерю в своей программе TBDECallback.Create?
Регистрации BDECallback означает просьбу программы к BDE информировать программу об интересующих ее событиях в BDE.
А никак не информирование BDE о событиях в программе
sniknik (2002-03-14 12:25:00) [7]Тогда почему у меня на одной локальной машине (все к одному BDE подключены) D.Desktop не обновляет таблицы по Callback? может потому что я не генерю в своей программе TBDECallback.Create? Или в нем обработчика события от CallBack нет? Надо проверить вставить...
McSimm (2002-03-14 11:54:00) [8]>это тебе другие программы должны это событие генерировать
Это генерирует BDE, через который работают все программы.
Думаю проблема в том, что у MAxiMum © разные программы работают через разные BDE - каждая на своей машине. И Callback каждый BDE раздает только для "своих".
sniknik (2002-03-14 00:04:00) [9]Не так уж он и крут Бэтмен, то есть Database Desktop - явно делает рефреш таблице по событию. Можно две проги рядом поставить и хоть наизменяйся D.Desktop не пошевелится пока фокус не получит или над ним какое окно сдвинуть, и т.д. т.е. он отлавливает все события где надо перерисовку таблици делать и по ним ее обновляет.
можеш так же сделать
постывь таймер
Timer.Interval=100
а в обработку таймера запиши
if Table1.Active then Table1.Refresh;
еще круче получится все изменения моментально отразятся в твоем гриде даже если никакого события не произойдет (и мышкой над ней не надо дергать как в D.Desktop).
Кстати припоминаю в Foxpro есть такая вещ как интервал для обновления сетевых таблиц.
А пример из чата у меня тоже не работает. Если подумать то правильно не работает ведь это тебе другие программы должны это событие генерировать. А этого ты от них не дождешся.
MAxiMum (2002-03-13 20:11:00) [10]Поступило предложение в чате, что через TBDECallBack можно попробовать но у меня не работает.
functionTMain.MCallBack(CBInfo: Pointer): CBRType;
begin
<DataModule>.<Table>.Close;
<DataModule>.<Table>.Open;
showmessage("Обновление");
end;
procedureTMain.ToolButton13Click(Sender: TObject);
begin
FBDE := TBDECallback.Create(<DataModule>, <DataModule>.<Table>.Handle, cbTABLECHANGED, nil, 0, MCallBack, True);
end;
MAxiMum (2002-03-13 19:22:00) [11]И что. Как следить через FileNotification? Неэффективно. Псмотри, как обновляет Database Desktop всё круто: запускаешь Database Desktop, любую прогу. Смотришь ту таблицу, которую изменяет прога. Изменения видны моментально.
sniknik (2002-03-13 16:16:00) [12]следить за файлами в сетевой директории PARADOX.LCK PDOXUSRS.LCK они создаются при обращении к таблицам. ?