【发布时间】:2019-08-02 12:59:14
【问题描述】:
我想在我的数据库连接上挂上一个钩子。每次数据库中的任何表有更新时,我都想在我的代码中使用一个函数(如果可能的话,最好使用已执行查询的参数)。
我正在使用 FireDac 组件; TFDConnection、TFDPhysSQLiteDriverLink、TFDQuery 和 TFDEventAlerter。
初始化代码:
FDEventAlerter1.Names.Clear;
FDEventAlerter1.Names.Add('intEv');
FDEventAlerter1.Options.Synchronize := true;
FDEventAlerter1.Options.Kind := 'Events';
FDEventAlerter1.OnAlert := FDEventAlerter1Alert;
FDEventAlerter1.Active := true;
OnAlert 中的代码
procedure TDataModule1.FDEventAlerter1Alert(ASender: TFDCustomEventAlerter;
const AEventName: string; const AArgument: Variant);
begin
ShowMessage('test');
end;
来自 CreateTable 查询的代码:
CREATE TABLE IF NOT EXISTS int(
ValuesInt INTEGER NOT NULL,
ValuesIntTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
DROP TRIGGER IF EXISTS intEv;
CREATE TRIGGER IF NOT EXISTS intEv
AFTER INSERT ON int
BEGIN
SELECT POST_EVENT('trigger');
END;
每 10 秒执行一次的插入查询代码:
INSERT INTO int(valuesint) VALUES (:int);
当我运行它时,数据库被整数填充,但没有触发任何事件。
【问题讨论】:
-
参见Tracing and Monitoring (FireDAC) 和 TFDMoniCustomClientLink 组件的 OnOutput 事件。
-
除了@Brian 的链接,你还可以看看docwiki.embarcadero.com/RADStudio/XE8/en/…。
标签: sqlite delphi firemonkey firedac