我使用绝对数据库作为我的数据库。由于绝对数据库不支持触发器,我必须编写自己的UPDATE触发器。我试过这种方式:
procedure TDataModule2.ABSQuery6AfterPost(DataSet: TDataSet);
begin
ABSQuery4.Close;
ABSQuery4.SQL.Clear;
ABSQuery4.SQL.Text :='UPDATE MYTABLE SET RECORDCHANGED=CURRENT_TIMESTAMP';
ABSQuery4.ExecSQL;
end;
但这样我就更新了整个表格。如何仅更新已更改的记录(行)?
编辑:这就是我的工作方式
procedure TDataModule2.ABSQuery6AfterPost(DataSet: TDataSet);
begin
with ABSQuery4 do begin
ABSQuery4.Close;
ABSQuery4.SQL.Clear;
ABSQuery4.SQL.Text :='UPDATE MYTABLE SET RECORDCHANGED=CURRENT_TIMESTAMP WHERE T_ID=:a1';
ABSQuery4.Params.ParamByName('a1').AsInteger := ABSQuery6.FieldByName('T_ID').AsInteger;
ABSQuery4.ExecSQL;
end;
end;
答案 0 :(得分:2)
这可以通过TDataSet.BeforePost
事件非常直接地解决(也可以查看来自docwiki的code sample)
procedure TDataModule2.ABSQuery6BeforePost(DataSet: TDataSet);
begin
DataSet['RECORDCHANGED'] := now;
end;
答案 1 :(得分:0)
您需要在查询中添加'其中'条款。 SQL变为
update mytable
set recordchanged = current_timestamp
where id = id_of_last_changed_record
最好通过参数传递上次更改记录的ID,制作代码
with ABSQuery4 do
begin
Close;
SQL.Clear;
SQL.Text :='UPDATE MYTABLE SET RECORDCHANGED=CURRENT_TIMESTAMP WHERE ID = :P1';
sql.params[0].asinteger:= id_of_last_changed_record;
ExecSQL;
end;