Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];

Вниз

Можно ли отловить событие добавления записи в таблицу БД 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
15-1145569380
Германн
2006-04-21 01:43
2006.05.21
Версия Indy в Делфи2006


10-1119521233
r9000
2005-06-23 14:07
2006.05.21
Не понятно как перейти в конец документа word?


15-1146029761
ArtemESC
2006-04-26 09:36
2006.05.21
per se


4-1141014465
FunkyByte
2006-02-27 07:27
2006.05.21
Программная коректировка размеров окна при изменении его размеров


15-1145869848
Marser
2006-04-24 13:10
2006.05.21
Кириллические векторные шрифты (.CHR)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский