我的程序实现的是sql和access之间的数据导入导出,我想在程序发生异常时,之前对数据库的操作都无效,我觉得这好象是事务处理的问题,我用的一个adoconnection1连接sql,另一个adoconnection2连接access,不知道能不能实现,应该怎样实现,请指教,谢谢

解决方案 »

  1.   

    我认为,这个过程可以分为两步:
    1、读取数据:这个步骤不需要事务处理,因为读取数据 不对数据库造 成影响
    2、写入数据:这时为了保证数据的一致性,所以你要用事务处理了:大致的写法如下
    procedure TAccountDefForm.PostUpdate;
    begin
      if (SysQuery.State = dsEdit) or (SysQuery.State = dsInsert) then
        SysQuery.Post;
      if not DataModule1.ADOConnection1.InTransaction then
        DataModule1.ADOConnection1.BeginTrans;
      try
        SysQuery.UpdateBatch();
        LogQuery.UpdateBatch();
        DataModule1.ADOConnection1.CommitTrans;
        FlatButton1.Enabled:=False;
        FlatButton3.Enabled:=False;
      except
        on e:Exception do
        begin
          ShowMessage(e.Message);
          DataModule1.ADOConnection1.RollbackTrans;
        end;
      end;
    end;
      

  2.   

    WHILE 有表可读 DO
    BEGIN
      读表;
      开始事务;
      TRY
        写表;
        提交事务;
      EXCEPT
        回滚事务;
        RAISE;
      END;
    END;//ACCESS好像不支持事务吧.
      

  3.   

    谢谢zhoutian618(秦失其鹿,天下共逐,唯胜者得鹿而割之)我没理解错的话,你的方法是对美一个表都进行事务处理,对吧,我是想对所有表的操作(读,写,改)用一个事务,也就是说,我想在所有操作完了后进行提交或是卷回,若是卷回,前面对数据的操作都失败,数据还是恢复原样。不知道能不能实现?另外,用ado的话,access好象要支持事务。
      

  4.   

    ACCESS是支持事物处理的;
    将你的插入数据的过程单独独立出来成为一个过程或函数进行处理;