使用ADO删除连接表中的行

使用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(我假设你正在做类似的事情),行确实只从表元素中删除(即组中的行保持未删除状态)。

请注意,修改后的查询在读取行时可能会对性能产生负面影响。