Delphi - 用于连接SQL语句的TUpdateObject与OnUpdateRecord

时间:2012-09-11 09:35:35

标签: delphi delphi-xe firebird

我有一个pFibdataset(类似于BDEDataset),我需要进行以下连接选择

select table.Name as name,
table1.Name as name_1,
table2.Name as name_2
from table 
left join table table_1 on table.id=table_1.id
left join table table_2 on table.id=table_2.id

字段名称,name_1和name_2链接到一些数据感知编辑。现在,我希望在修改(更新,删除,插入操作)名称,name_1和name_2字段后,在表格中进行更新。基于wiki Using_Multiple_Update_Objects_Index,我可以使用UpdateObjects或OnUpdateRecord事件。

问题在于我不明白这是如何实现的。我在查询上有连接选择,我需要如何定义和使用name_1和name_2字段。有人可以为我提供一个例子吗?

我知道如何使用子查询来完成此任务。我需要看看如何使用UpdateObjects或OnUpdateRecord来实现它。

2 个答案:

答案 0 :(得分:2)

TpFibUpdateObject就像客户端的触发器一样。要使其工作,请设置以下属性:

DataSet - dataset (master) to monitor
KindUpdate - Insert/Update/Delete - action to monitor
SQL - command to execute when action is fired, params are taken from DataSet
ExecuteOrder - AfterDefault/BeforeDefault - probably you need after / master

但是,相反使用了很多UpdateObject组件和这种纠结的方法,我推荐两种替代(更好的阅读)方法:

  1. 可更新视图。它将像“虚拟表”一样工作。创建一个连接这些theee表的视图,并在Insert / Update / Delete触发器之前编写。在Delphi中使用它作为常规表:从视图/插入到视图/更新视图中选择并从视图中删除。无论如何,我想你需要在很多地方把这些表联系起来。

  2. 在TpFIBDataSet SQL中使用EXECUTE BLOCK语句。批量插入/更新/删除所有表格。

答案 1 :(得分:0)

解决方案:OnUpdateRecord必须为连接表中的每个字段创建一个TUpdateObject。

 UpdateObjectvariable.DataSet := Dataset;
 fill the SQL text
 Apply.

设置完所有更新对象后,必须调用UpdateAction := uaApplied;