插入 Firedac Sqlite 数据库连接后如何创建事件?
How to make an event after insert on Firedac Sqlite database connection?
我想在我的数据库连接上挂钩。每次对数据库中的任何 table 进行更新时,我都想在我的代码中使用一个函数(如果可能的话,最好使用已执行查询中的参数)。
我正在使用 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);
当我 运行 这样做时,数据库中填满了整数,但没有触发任何事件。
TSQLiteDatabase.onUpdate(第 9.1 章)给了我所需要的。
sqlDb: TSQLiteDatabase;
sqlDb := TSQLiteDatabase(FDConnection1.CliObj);
sqlDb.OnUpdate := DoUpdate;
procedure TDataModule1.DoUpdate(ADB: TSQLiteDatabase; AOper: Integer; const ADatabase, ATable: String; ARowid: int64);
begin
//http://www.sqlite.org/c3ref/c_alter_table.html
if AOper = {SQLITE_INSERT}18 then
sleep(1);
end;
我想在我的数据库连接上挂钩。每次对数据库中的任何 table 进行更新时,我都想在我的代码中使用一个函数(如果可能的话,最好使用已执行查询中的参数)。
我正在使用 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);
当我 运行 这样做时,数据库中填满了整数,但没有触发任何事件。
TSQLiteDatabase.onUpdate(第 9.1 章)给了我所需要的。
sqlDb: TSQLiteDatabase;
sqlDb := TSQLiteDatabase(FDConnection1.CliObj);
sqlDb.OnUpdate := DoUpdate;
procedure TDataModule1.DoUpdate(ADB: TSQLiteDatabase; AOper: Integer; const ADatabase, ATable: String; ARowid: int64);
begin
//http://www.sqlite.org/c3ref/c_alter_table.html
if AOper = {SQLITE_INSERT}18 then
sleep(1);
end;