我有一个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来实现它。
答案 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组件和这种纠结的方法,我推荐两种替代(更好的阅读)方法:
可更新视图。它将像“虚拟表”一样工作。创建一个连接这些theee表的视图,并在Insert / Update / Delete触发器之前编写。在Delphi中使用它作为常规表:从视图/插入到视图/更新视图中选择并从视图中删除。无论如何,我想你需要在很多地方把这些表联系起来。
在TpFIBDataSet SQL中使用EXECUTE BLOCK语句。批量插入/更新/删除所有表格。
答案 1 :(得分:0)
解决方案:OnUpdateRecord必须为连接表中的每个字段创建一个TUpdateObject。
UpdateObjectvariable.DataSet := Dataset;
fill the SQL text
Apply.
设置完所有更新对象后,必须调用UpdateAction := uaApplied;
。