现在我在another forum中看到了这个问题,但它没有得到可接受的答案。
假设我有两个表,Groups表和Elements表。表没有定义的关系。 Elements表有一个IdGroup字段,该字段引用Groups表的IdGroup(PK)字段。
我通过ADO记录集使用以下查询将表值填充到datagrid:
SELECT Elements.*, Groups.GroupName
FROM Elements
INNER JOIN Groups ON Elements.IdGroup = Groups.IdGroup
从该网格我想按删除以删除元素。这是我的问题。当我使用DAO时,DAO Delete()函数仅删除Elements组中的记录。这是预期的行为。
当我更改为ADO时,Delete()函数删除了两个表中的记录,元素记录和元素所属的组!
有没有办法在ADO中重现DAO行为而无需在表中定义关系?
注意:我知道有其他选择(执行DELETE查询可以完成这项工作)。只是告诉我一种在ADO中执行此操作的方法,或者说它无法完成。
答案 0 :(得分:1)
将您的查询重写为:
示例:
SELECT Elements.*,
(
SELECT Groups.GroupName
FROM Groups
WHERE Elements.IdGroup = Groups.IdGroup
)
FROM Elements
WHERE EXISTS (
SELECT *
FROM Groups
WHERE Elements.IdGroup = Groups.IdGroup
);
我使用SQL Server 2008对此进行了测试,其中ADO记录集设置为Microsoft OLEDB数据网格控件(MSDATGRD.OCX)的DataSource属性,然后通过网格删除该行(我假设您正在做类似的事情)和确实只从表元素中删除了行(即组中的行保持未删除状态)。
请注意,修改后的查询在获取行时可能会对性能产生负面影响。