使用ADO删除连接表中的行
问题描述:
现在我已在another forum中看到此问题,但它没有可接受的答案。使用ADO删除连接表中的行
假设我有两个表,组表和元素表。这些表格没有定义的关系。 Elements表中有一个IdGroup字段,它指向组表的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 querys可以完成这项工作)。只是告诉我一种在ADO中做到这一点的方法,或者说它不能完成。
答
重写你查询到:
- 更换内与JOIN WHERE组成的EXISTS子句;
- 在SELECT子句中使用子查询返回Groups.GroupName的值。
例子:
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 Datagrid控件(MSDATGRD.OCX)的DataSource属性,然后通过删除行gird(我假设你正在做类似的事情),行确实只从表元素中删除(即组中的行保持未删除状态)。
请注意,修改后的查询在读取行时可能会对性能产生负面影响。