Mysql 为MyDAC定义自定义POST方法
我有三个表Mysql 为MyDAC定义自定义POST方法,mysql,delphi,mydac,Mysql,Delphi,Mydac,我有三个表objects,(主键object\u ID)flags(主键flag\u ID)和object\u 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.f
objects
,(主键object\u ID
)flags
(主键flag\u ID
)和object\u 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的值,必须执行以下操作:
- 如果object_has_flag为true且仍然为true,则应在objects_flags中的相关行上执行更新
- 如果对象_has_标志为false,但现在为true,则应执行插入
- 如果object_has_flag为true,但现在为false,则应删除该行
编辑:显然,问题出在哪里还不完全清楚。无法使用标准的UpdateSQL、DeleteSQL和InsertSQL,因为有时在编辑一行(不删除它或插入一行)后,必须执行
插入
或删除
。简而言之,您的答案是:
- 查阅“使用MyDAC数据集组件更新数据”(从MyDAC 5.80开始)的文档
TMyUpdateSQL对于自定义更新操作来说也是一个很有前途的组件。简而言之,您的答案是:
- 查阅“使用MyDAC数据集组件更新数据”(从MyDAC 5.80开始)的文档
TMyUpdateSQL也是一个很有前途的自定义更新操作组件。似乎最简单的方法是使用
BeforePost
事件,并使用多个字段的OldValue
和NewValue
属性确定必须执行的操作。似乎最简单的方法是使用BeforePost
事件,并确定使用多个字段的OldValue
和NewValue
属性必须执行的操作。在前一个问题中,您没有提到您使用的现成组件是否是MyDAC。是这样吗?@menjaraz(抱歉耽搁):这是你之前的问题,你没有提到你使用的现成组件是不是MyDAC。是这样吗?@menjaraz(很抱歉耽搁了):这是真的。但是,一些内置的健全性检查会带来麻烦。例如,在记录已经存在的情况下使用REPLACE时,服务器将返回2行受影响的数据。内置健全性检查将引发异常,因为只编辑了一行。True。但是,一些内置的健全性检查会带来麻烦。例如,在记录已经存在的情况下使用REPLACE时,服务器将返回2行受影响的数据。内置的健全性检查将引发异常,因为只编辑了一行。