关于dao:使用ADO删除联接表中的行

关于dao:使用ADO删除联接表中的行

Deleting rows in joined tables using ADO

现在,我在另一个论坛上看到了这个问题,但没有一个可接受的答案。

假设我有两个表,Groups表和Elements表。这些表没有定义的关系。 Elements表具有一个IdGroup字段,该字段引用Groups表的IdGroup(PK)字段。

我通过ADO记录集使用以下查询来将表值填充到datagrid中:

1
2
3
SELECT Elements.*, Groups.GroupName
FROM Elements
INNER JOIN Groups ON Elements.IdGroup = Groups.IdGroup

从该网格中,我想按Delete键以删除元素。这是我的问题。当我使用DAO时,DAO Delete()函数仅删除Elements组中的记录。这是预期的行为。

当我更改为ADO时,Delete()函数删除了两个表,元素记录和元素所属的组中的记录!

有什么方法可以在ADO中重现DAO行为,而不必在表中定义关系?

注意:我知道还有其他选择(执行DELETE查询可以完成此工作)。只是向我展示一种在ADO中执行此操作的方法,或者说它无法完成。


将查询重写为:

  • 用由EXISTS组成的WHERE子句替换INNER JOIN;
  • 在SELECT子句中使用子查询返回Groups.GroupName的值。

例:

1
2
3
4
5
6
7
8
9
10
11
12
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 Control(MSDATGRD.OCX)的DataSource属性,然后通过网格删除了行(我假设您正在做类似的事情),并且该行的确是 仅从表元素中删除(即,"组"中的行保持未删除状态)。

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


推荐阅读

    删除防火墙命令linux?

    删除防火墙命令linux?,系统,软件,服务,防火墙,公共,设备,管理,信息,命令,选

    linux引用命令并运行?

    linux引用命令并运行?,工具,代码,管理,环境,产品,项目,系统,软件,命令,脚本,

    linux命令删除用户组?

    linux命令删除用户组?,管理,密码,系统,用户组,用户,概念,命令,文件,管理员,

    linux删除重复项命令?

    linux删除重复项命令?,数据,系统,工具,电脑,项目,公式,百度,代码,名字,基础,

    linux硬链接删除命令?

    linux硬链接删除命令?,数据,系统,不了,时间,名称,链接,文件,档案,地方,设备,l

    linux交互删除命令?

    linux交互删除命令?,名称,不了,系统,文件夹,命令,通用,文件,目录,指令,方法,l

    linux输入后删除命令?

    linux输入后删除命令?,软件,名称,工具,系统,命令,信息,电脑,通用,不了,档案,l

    linux删除无用的命令?

    linux删除无用的命令?,系统,软件,数据,员工,命令,信息,宽松,对比,状态,公司,L

    删除文件linux命令行?

    删除文件linux命令行?,命令,文件,不了,档案,名称,系统,数据,目录,文件夹,终

    linux命令行删除网卡?

    linux命令行删除网卡?,地址,网络,系统,工具,信息,设备,名字,管理,服务,网卡,l

    linux命令引用文件名?

    linux命令引用文件名?,工作,系统,信息,命令,数据,文件,时间,灵活,名称,标准,l

    linux命令删除字符串?

    linux命令删除字符串?,软件,系统,代码,名称,通用,连续,字符,字符串,命令,空

    linux删除整个命令?

    linux删除整个命令?,命令,文件夹,不了,名称,通用,系统,数据,文件,目录,格式,l

    linux如何命令删除?

    linux如何命令删除?,档案,系统,命令,文件,目录,通用,文件夹,终端,选项,参数,l

    删除路由命令linux?

    删除路由命令linux?,系统,信息,网络,地址,管理,环境,路由,命令,工作,基础,WIN

    linux命令删除当前行?

    linux命令删除当前行?,系统,位置,命令,文件夹,文件,标的,数据,环境,通用,不

    linux删除jog命令?

    linux删除jog命令?,工具,软件,连续,机器人,位置,中心,工作,平稳,人员,自动化

    linux删除服务的命令?

    linux删除服务的命令?,服务,系统,软件,平台,名称,管理,环境,产品,命令,文件,

    linux删除rm命令?

    linux删除rm命令?,系统,命令,文件夹,不了,通用,名称,环境,文件,目录,下面,lin

    linux系统删除的命令?

    linux系统删除的命令?,软件,系统,名称,工具,不了,命令,文件夹,电脑,通用,信