我有三个表objects,(主键object_ID) flags (主键flag_ID)和object_flags ( objects和flags之间的交叉表,包含一些额外的信息)。
我有一个返回所有标志的查询,如果给定对象有某个标志,则返回一个1或0:
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);在应用程序(用Delphi编写)中,所有行都加载在一个组件中。用户可以通过单击表中的复选框,修改数据来分配标志。
假设一行被编辑。根据object_has_flag的值,必须执行以下操作:
如果objects_flags.
。
这似乎不能在一个查询https://stackoverflow.com/questions/7927114/conditional-replace-or-delete-in-one-query中完成。
我使用MyDAC的TMyQuery作为数据集。我编写了单独的代码,执行必要的查询以保存对一行的更改,但如何将其与dataset相结合呢?我应该使用什么事件处理程序,以及如何告诉TMyQuery它应该刷新而不是post?
编辑:显然,还不完全清楚是什么问题。不能使用标准的UpdateSQL、DeleteSQL和InsertSQL,因为有时在编辑行(不删除或插入行)之后,必须执行INSERT或DELETE。
发布于 2012-02-18 14:25:25
似乎最简单的方法是使用BeforePost事件,并使用几个字段的OldValue和NewValue属性确定要做什么。
发布于 2011-12-15 12:46:16
简单的回答是,套用你的答案here:
每个TCustomDADataSet (如TMyQuery)后代都能够使用SQLInsert、SQLUpdate和SQLDelete属性设置update SQL语句。
TMyUpdateSQL也是自定义更新操作的一个很有希望的组件。
https://stackoverflow.com/questions/8455878
复制相似问题