Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.11;
Скачать: CL | DM;

Вниз

Изменения в сетевой БД   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
1-32740
skovorodka
2002-03-29 14:29
2002.04.11
Как сделать неправильной формы кнопку >:) не надо называть меня л


1-32828
LiNkS
2002-03-28 18:39
2002.04.11
GIF в Delphi


1-32752
michael_B
2002-03-30 17:48
2002.04.11
Как отображать текст в TPanel или TLabel в несколько строк


3-32701
sad
2002-03-21 18:07
2002.04.11
QuickReport и одинаковые линии


1-32745
DimaP
2002-03-29 23:45
2002.04.11
Form