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

Вниз

Можно ли отловить событие добавления записи в таблицу БД Access?   Найти похожие ветки 

 
Рустем ©   (2006-03-27 15:32) [0]

Можно ли отловить событие добавления/изменения/удаления записи(ей) в таблицу БД Access и каким образом?
В моем случае данные из таблицы представляются на экране клиента в графическом виде. Так вот мне необходимо отловить выше указанное событие для перерисовки изображения. Есть ли у кого-нибудь хоть какие-либо соображения, кроме как использовать кнопку "Обновить"?


 
Sergey13 ©   (2006-03-27 15:36) [1]

Если записи обновляются вне работающего приложения - ИМХО никак не определишь. Только кнопка или таймер. Кнопка лучше всего (даже если можно отследить событие) - во веки веков. Аминь. 8-)


 
sniknik ©   (2006-03-27 15:41) [2]

событий нет, читай переодически системную
SELECT Id, DateUpdate, Name FROM MSysObjects
и сравнивай DateUpdate. только учти, оно не "живое реалтаймовское", будут задержки изза буферизации в ядре jet-а. (задержки даже в одном приложении при 2 конектах видны)


 
Рустем ©   (2006-03-27 15:46) [3]


> sniknik ©

Спасибо, попробую...


 
Рустем ©   (2006-03-27 17:15) [4]


> sniknik ©   (27.03.06 15:41) [2]
> событий нет, читай переодически системную
> SELECT Id, DateUpdate, Name FROM MSysObjects
> и сравнивай DateUpdate

Ну вот и появились проблемы: оказывается DateUpdate показывает дату создания/модификации таблицы, а не дату внесенных изменений в плане добавления/изменения/удаления записей. Так что этот вариант не подходит...


 
sniknik ©   (2006-03-27 17:27) [5]

> оказывается DateUpdate показывает дату создания/модификации таблицы ...
да, точно. ;(

можно еще время изменения файла (*.mdb) смотреть, но это будет изменение во всей базе, не деля по таблицам.


 
Ega23 ©   (2006-03-27 17:38) [6]

Триггер на каждую таблицу. Штоб писал в специальную таблицу про изменения.
Но это уже изврат, обновление данных на клиенте должно происходить сознательно.


 
sniknik ©   (2006-03-27 17:48) [7]

Ega23 ©   (27.03.06 17:38) [6]
нет триггеров... access...


 
Ega23 ©   (2006-03-27 17:50) [8]


> нет триггеров... access...


В access - нету?
Вах....


 
piople ©   (2006-03-28 06:20) [9]

Да на самом деле тригер бы облегчил задачу... да и вообще если сама процедура построение графика не долгая и не ресурсоемкая то почему бы просто например раз в 10 секунд не обновлять ее и все?

А так же на всяк случай, статейка:


> { **** UBPFD *********** by delphibase.endimus.com ****
> >> Обратная связь от MSSQL-сервера к клиенту
>
> На форуме постоянно возникает вопрос -
> "Как получить обновление данных, по событию, а не таймером",
>
> чтобы снять его раз и навсегда привожу код dll-ки, которая
> является Extended Stored Procedure с единственной функцией
> -
> отправкой UDP-broadcast сообщения.
>
> Зависимости: Windows, SysUtils, IdUDPClient
> Автор:       Delirium, VideoDVD@hotmail.com, ICQ:118395746,
>  Москва
> Copyright:   Delirium (Master BRAIN) 2003
> Дата:        24 октября 2003 г.
> ***************************************************** }


library Messager;

uses
 Windows,
 SysUtils,
 IdUDPClient;

function srv_rpcparams(srvproc: Pointer): integer; cdecl; external "opends60.dll"
name "srv_rpcparams";

function srv_paramdata(srvproc: Pointer; n: integer): integer; cdecl; external
"opends60.dll" name "srv_paramdata";

function srv_paramlen(srvproc: Pointer; n: integer): integer; cdecl; external
"opends60.dll" name "srv_paramlen";

procedure SendUDPMessage(Params: Pointer); stdcall; cdecl; export;
var
 id: TIdUDPClient;
 Msg: string;
 Host, Port: string;
begin
 try
   if srv_rpcparams(Params) < 2 then
     exit;
   Host := Copy(PChar(srv_paramdata(Params, 1)), 1, srv_paramlen(Params, 1));
   Port := Copy(Host, Pos(":", Host) + 1, Length(Host));
   Delete(Host, Pos(":", Host), Length(Host));
   Msg := Copy(PChar(srv_paramdata(Params, 2)), 1, srv_paramlen(Params, 2));
   id := TIdUDPClient.Create(nil);
   id.BroadcastEnabled := True;
   id.Host := Host;
   id.Port := StrToInt(Port);
   id.ReceiveTimeout := -1;
   id.Send(Msg);
   id.Free;
 except
 end;
end;

exports SendUDPMessage;

begin
end.

> Пример использования:
>
> Для регистрации на MSSQL скопировать dll в c:\Program Files\Microsoft
> SQL Server\80\Tools\Binn и исполнить скрипт sp_addextendedproc
> "SendUDPMessage", "Messager.dll" На клиенте рекомендую использовать
> компонент TIdUDPServer. Передача сообщений осуществляется
> так exec SendUDPMessage "255.255.255.255:8080", "Привет!
> " где 255.255.255.255 - broadcast маска, но можно написать
> и конкретный адрес (192.168.1.10), 8080 - выбранный для
> использования порт.



Страницы: 1 вся ветка

Текущий архив: 2006.05.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
8-1135068009
avlan
2005-12-20 11:40
2006.05.21
Вырезать кусок из видео


4-1140602600
voe
2006-02-22 13:03
2006.05.21
Нужна помощь с WinRAR`ом


2-1146654847
Perf2k2
2006-05-03 15:14
2006.05.21
Данные из базы в ComboBox - не получается


2-1146671776
Мурзилка
2006-05-03 19:56
2006.05.21
не работает программа на другом компе


6-1137789560
GuAV
2006-01-20 23:39
2006.05.21
Можно ли закрыть listen socket при работающих accepted ?