使用ADO删除已连接表中的行

时间:2008-09-18 18:03:04

标签: ado dao

现在我在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中执行此操作的方法,或者说它无法完成。

1 个答案:

答案 0 :(得分:1)

将您的查询重写为:

  • 将INNER JOIN替换为包含EXISTS;
  • 的WHERE子句
  • 在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数据网格控件(MSDATGRD.OCX)的DataSource属性,然后通过网格删除该行(我假设您正在做类似的事情)和确实只从表元素中删除了行(即组中的行保持未删除状态)。

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