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