飘香,好久不见了。
这个问题按理说不应该存在,是不是你的表有外键,设置了级联删除。
如果没有设置,问题仍存在,可能是ado本身对多个表联合查询的记录会记录每个表的主关键字,然后在删除时全部删除(只是猜测,没有证实)
如果真有这种灭绝天良,惨无人道的事情发生,不如结果集用只读方式打开,要删除时,使用adodb.connection对象的execute方法执行一条删除单个表的sql语句算了。
本来这种事情我以前是一定要搞清楚的,但现在比较忙,只好给你提供一种折衷的办法了。

解决方案 »

  1.   

    篮兄,好久不见!CoolSlob:怎么了!N_chow:你的问题我遇到过,后来没有解决,就干脆用SQL语句删除代替了,没有搞明白,而且那时用6.5,不可能游览兄说的级联删除.
      记得如果你的tblDet因为其他原因不能删除(比如有外键),它也不报错,也不删除tblDet的记录.
      

  2.   

    tblDet未設任何外鍵,也沒有任何級聯刪除。不行啊,不能用SQL語句來替代這個Recordset的操作啊!因為這個Recordset是Disconnected Recordset,它放在前端的一個Grid里面,允許用戶進行各種操作,像新增、刪除、修改等,然後再保存的時候,再把Recordset里的異動提交到資料庫中(即UpdateBatch).
      

  3.   

    估计是有级联删除,你看看两个表上的外键上是否有级连功能。
    要不就是有触发器,在主表上的删除触发器也可以实现这个功能。
    如果是VB 的 RECORDSET删除的我觉得不太可能,因为VB不能用RECORDSET同时删除两个表中的数据,换句反过来话说,就算它能删除它也不能设置哪个表先被删除,所以也就不能保证外键的参照完整性,所以它不能同时删除两个表中的数据。你还是看看后台库吧,别查看前台VB了。
      

  4.   

    2 hillhx(曾经的曾经):
      表上沒有任何級聯刪除,也沒有任何Trigger.你在自己的電腦上試一下就知道了。
      

  5.   

    通过设置recordset的动态属性Unique Table ,设置此属性应该可解决问题.
      

  6.   


    不好意思,
    因为上次回贴时恰逢周未,休息了两天~~~
    我记得使用ADO可以实现(不过,是用Delphi代码)
    我现在就去试试,如果成功了,我现贴出代码~~谢谢Yang_关心,因为最近心情不好,烦事连绵~
      

  7.   


    不好意思,
    因为上次回贴时恰逢周未,休息了两天~~~
    我记得使用ADO可以实现(不过,是用Delphi代码)
    我现在就去试试,如果成功了,我现贴出代码~~谢谢Yang_关心,因为最近心情不好,烦事连绵~
      

  8.   

    kao,
    说回复不能超过三次?
    哪有啊?
    胡说8道~~幸好我穿不马甲:-)
      

  9.   

    //咦~~~~~~~~~~~~~后面还有字呢??!
    //接上吧,这么虚伪的字,怎么能少呢?呵呵~~恕CoolSlob不才,不能将上面代码翻译成“多国语言”
    现抛砖望能引玉,嘻嘻^o^
      

  10.   

    //咦~~~~~~~~~~~~~后面还有字呢??!
    //接上吧,这么虚伪的字,怎么能少呢?呵呵~~恕CoolSlob不才,不能将上面代码翻译成“多国语言”
    现抛砖望能引玉,嘻嘻^o^
      

  11.   

    我把测试程序也上传了~1、设置Connection String
    2、Open DataSet
    3、Delete
    4、UpdateBatch
    5、看看结果:-)http://CoolSlob.ifood1.com/Download/Project1.exe
    //你有权怀疑该程序有木马:-)
      

  12.   

    通过设置recordset的动态属性Unique Table ,设置此属性可解决问题.
    recordset.properties("unique table").value="tblmain"
    此属性设为TBLMAIN,即删除TBLMAIN的记录,设为TBLDET,即删除TBLDET的记录.
      

  13.   

    TO
     cxmcxm(小陈) 
    , CoolSlob(严重郁闷中...) 
    :
      UNIQUE TABLE屬性只對DELETE動作有效,但若是對Recordset進行新增、修改動作時,它還是會動到tblDet。
      

  14.   

    我不知道你有没有真正试过,现将ADO的HELP帖上Unique Table、Unique Schema、Unique Catalog 属性 — 动态
          使用户能够直接控制在通过对多个基本表执行 JOIN 操所得到的 Recordset 中的特定基本表的修改。 Unique Table 指定一个允许进行更新、插入和删除的基本表的名称。
    Unique Schema 指定模式,即表的所有者的名称。
    Unique Catalog 指定目录,即包含表的数据库的名称。 
    设置和返回值设置或返回字符串值,该值是表、模式或目录的名称。说明所要的基本表通过其目录、模式和表名唯一标识。设置 Unique Table 属性后,可使用 Unique Schema 或 Unique Catalog 属性的值查找基本表。在设置 Unique Table 属性之前需要设置 Unique Schema 和 Unique Catalog 属性的其中一个属性或同时设置两个属性,但这不是必须的。Unique Table 的主键被用作整个 Recordset 的主键。该键可用于任何需要主键的方法。设置 Unique Table 后,AddNew、Delete、Resync、Update 和 UpdateBatch 方法只能影响到所命名的表。如果找不到唯一的基本表,将出现运行时错误。当把 CursorLocation 属性设置为 adUseClient 时,这些动态属性均被追加到 Recordset 对象的 Properties 集合中。