Delphi-TUpdateObject与OnUpdateRecord的联接SQL语句 [英] Delphi - TUpdateObject versus OnUpdateRecord for a join SQL statement

查看:126
本文介绍了Delphi-TUpdateObject与OnUpdateRecord的联接SQL语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个pFibdataset(其工作方式类似于BDEDataset),在其中我需要进行以下联接选择

I have a pFibdataset(which is working similar to BDEDataset) in which I need to make the following join selection

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

左连接表table_2上,字段名称,名称_1和名称_2已链接进行一些数据感知的编辑。现在,我想要修改(更新,删除,插入操作)表中的名称,名称_1和名称_2字段。基于 wiki Using_Multiple_Update_Objects_Index 我可以使用UpdateObjects,也可以使用 OnUpdateRecord 事件。

Fields name, name_1 and name_2 are linked to some data-aware edits. Now, I want after I'm modifying(update,delete,insert operations) the name,name_1 and name_2 fields to be updated in the tables. Based on the wiki Using_Multiple_Update_Objects_Index I can use UpdateObjects, or OnUpdateRecord event.

问题是我不知道该如何实现。我在查询中选择了联接,如何定义和使用name_1和name_2字段。有人可以为此提供示例吗?

The problem is that I don't understand how this need to be implemented. I have the join select on the query, how I need to define and work with name_1 and name_2 fields. Can someone provide me an example for this?

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

I know how to use subqueries in order to accomplish this. I need to see how can I can make it by using UpdateObjects or OnUpdateRecord.

推荐答案

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

TpFibUpdateObject works like a trigger on client side. To make it work, set the following properties:

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

BUT,而不是使用很多UpdateObject组件和这种纠结的方法,我建议使用两种替代方法(更好地阅读):

BUT, instead using a lot of UpdateObject components and such tangled approach, I recommend two alternative (read better) ways:


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

  1. Updatable view. It will work like a "virtual table". Create a view that joins these theee tables and write Before Insert/Update/Delete triggers. In Delphi use it as a regular table: select from view / insert into view / update view and delete from view. Anyway I suppose you need in many places these tables linked toghether.

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

Use EXECUTE BLOCK statements in your TpFIBDataSet SQLs. Insert / Update / Delete in a batch all tables.

这篇关于Delphi-TUpdateObject与OnUpdateRecord的联接SQL语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆