我有三个表objects
,(主键object_ID
)flags
(主键flag_ID
)和object_flags
({{1}之间的交叉表和objects
以及一些额外的信息)。
我有一个返回所有标志的查询,如果给定的对象有某个标志,则返回一个或零:
flags
在应用程序(用Delphi编写)中,所有行都加载到组件中。用户可以通过单击表中的复选框来分配标志,然后修改数据。
假设编辑了一行。根据object_has_flag的值,必须执行以下操作:
似乎无法在一个查询https://stackoverflow.com/questions/7927114/conditional-replace-or-delete-in-one-query中完成此操作。
我正在使用MyDAC的TMyQuery作为数据集。我编写了单独的代码来执行必要的查询以保存对行的更改,但是如何将其与数据集耦合?我应该使用什么事件处理程序,以及如何告诉TMyQuery它应该刷新而不是发布?
编辑:显然,问题是什么并不完全清楚。无法使用标准UpdateSQL,DeleteSQL和InsertSQL,因为有时在编辑一行(不删除它或插入一行)之后,必须执行SELECT
f.*,
of.*,
of.objectID IS NOT NULL AS object_has_flag,
FROM
flags f
LEFT JOIN object_flags of
ON (f.flag_ID = of.flag_ID) AND (of.object_ID = :objectID);
或INSERT
。
答案 0 :(得分:0)
简短的回答是,用你的答案here来解释:
每个 TCustomDADataSet (例如TMyQuery)后代都可以使用 SQLInsert , SQLUpdate 和 SQLDelete <来设置更新SQL语句/ em> properties。
TMyUpdateSQL 也是自定义更新操作的有前途的组件。
答案 1 :(得分:0)
似乎最简单的方法是使用BeforePost
事件,并使用多个字段的OldValue
和NewValue
属性确定要执行的操作。