在FiRedac SQLite数据库连接上插入后,如何进行事件



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

我正在使用FireDac组件;tfdConnection,tfdphyssqlitedriverlink,tfdquery和tfdeventalerter。

init:

的代码
  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;

最新更新