对于这个例子可能用一个事务就可以了,但假如不是删除,而是对Qry2所在的库中的另一个表做一些更新操作,没有两个事务行吗???我原来也知道事务不能嵌套但总是认为是对于同一个库的,看来不是!!!现在也不知怎么搞的,在家里的机器上打开帖子,总出错,忽略错误,导致有些字不可见,怪事???

解决方案 »

  1.   

    to cszk4(),
    Qry1和Qry2不在同一个库中??to  aaa5028() ,
    不会吧!!
      

  2.   

    DataBase1.startTransaction;
      Try
          //Qry2->  Qry1
          ...
          //删除Qry2中的有关记录
          ....
      Excapt
          on  exception  do
                Begin
                      DataBase1.RollBack;
                      Exit;
                End;
      End;
      DataBase1.Commit;
      

  3.   

    to genphone_ru,
    但假如实际上,Qry2对应有两个表,MyTable1,MyTable2,所以Qry2->Qry1的操作实际上是将MyTable1,MyTable2的字段内容复制到Qry1,删除Qry2内容时实际上是先删Mytable1,再删Mytable2,但在删除Mytable2中记录时,恰好因为网络断线,导致删除失败,此时Mytable1中删除的内容实际上是不能恢复的,因为
    MyTable1,MyTable2在Database2中而不是在Database1中(Qry1在Database1中)!!!to hmily1688,
    只能用触发器了吗??
      

  4.   

    to  genphone_ru,
    问题是:实际上Qry2是两个表,MyTable1,MyTable2,在分别删除时,且在删除后一个表的记录时出错,将引起第一个表中的记录丢失,因为MyTable1,MyTable2和Qry1不在一个库中!!???to hmily1688,
    只能用触发器吗???
      

  5.   

    一个事务也可以啊,对多个库又怎样。不过你这个好像不行。你用的不是一个数据库连接吧。用 databasename.dbo.tablename 。来使用令一个数据库的表,用一个连接吧,就可以用一个事务了。
    不过谁说的事务不能嵌套的,你在Sqlserver里试一试,用@@trancount看看,事务计数可以大于1的。不过客户端我就没有这样干过了。
    begin tran 
    select @@Trancount
    begin tran 
    select @@Trancount
    commit tran 
    select @@Trancount
    commit tran 
    select @@Trancount
      

  6.   

    to  lyxinfo(),
    没有搞懂,怎么用一个连接??
      

  7.   

    呵呵,不要告诉我连一个服务器都不是,那就是分布式的事务了。如果是一个服务器,如果是用BDE,就用TDatabese,Ado就用TAdoConnection,写Sql的时候,比如你登陆数据库A,另一个数据库是B,需要B中的表就用B.dbo.表名;当然,你需要要有相应的权限。
      

  8.   

    哦,还有怎么用的啊,感谢lyxinfo(),那应该用Ms desktop Sql也没有问题吧!那要是两个库在不同服务器上,如何处理啊!???
      

  9.   

    desktop一样的。
    同时更新两个服务器,我也没有用过,那其实可以象你那样用两事务,应该不会因此出错的吧,等于是客户端来处理了,这样也许不太好。
    可以用分布式事务?我没有作过,呵呵,多顶顶!希望高手帮忙吧。