Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Изменения в сетевой БД [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 они создаются при обращении к таблицам. ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо