gpt4 book ai didi

sqlite - 在Firedac Sqlite数据库连接上插入后如何制作事件?

转载 作者:行者123 更新时间:2023-12-03 18:01:52 28 4
gpt4 key购买 nike

我想了解我的数据库连接。每次数据库中的任何表都有更新时,我想在代码中使用一个函数(如果可能的话,最好使用已执行查询中的参数)。

我正在使用FireDac组件; TFDConnection,TFDPhysSQLiteiteDriverLink,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;

关于sqlite - 在Firedac Sqlite数据库连接上插入后如何制作事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57326993/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com