0

我有一个 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

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

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

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

4

2 回答 2

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. 可更新的视图。它将像“虚拟表”一样工作。创建一个连接这些表的视图并在插入/更新/删除触发器之前编写。在 Delphi 中将其用作常规表:从视图中选择/插入视图/更新视图并从视图中删除。无论如何,我想你在很多地方都需要这些表链接在一起。

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

于 2012-09-11T14:59:42.827 回答
0

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

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

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

于 2012-09-11T15:00:22.780 回答