mssql 2k数据库
在数据模板中有一TDatabase控件  APPDB,连数据库,建别名就是APPDB在某个函数中我一般是这么用:
procedure xxxx;
var qrysev,tmpqry:Tquery;
begin
qrysev := TQuery.create(nil);
tmpqry := TQuery.create(nil):
try  try
    with qrysev do
    begin
      databasename := 'appdb';
      sql.add('select * from xxx');
      open;
    end;
    while not qrysev.eof do
      with tmpqrysev do
      begin
        ////根据qrysev的值做事情
      end; 
    end;
  except
    ////......
  end;finally
  qrysev.free;
  tmpqry.free; 
end;但是这没有涉及到事务,我应该怎么做????

解决方案 »

  1.   

    Database1.StartTransaction;
     try 
        while not qrysev.eof do
          with tmpqrysev do
          begin
            ////根据qrysev的值做事情
          end; 
         Database1.Commit;
      except
       Database1.Rollback;
      end;
      

  2.   

    前面的要加個 TDatabase
    才能得到事務的控制
      

  3.   

    AConnectionDB1.BeginTrans;
    AConnectionDB1.CommitTrans;
    AConnectionDB1.RollbackTrans;
      

  4.   

    aiirii(ari-爱的眼睛) 
    確定樓主是在問怎麼執行事務的處理嗎?
      

  5.   

    谢谢各位的帮助,其实上面的方法我还是知道的,但是大家遇到这样的问题吗?
    我曾经在一次回滚的时候发生了错误,说什么  用户 没有用 StartTransaction 方法大家注意了吗,我的这个例子有两个TQuery控件,如果这两个不是属于同一个数据库
    还可以这么用吗?
      

  6.   

    可能我表达的不够清楚,就是这样一个事例:
      收费点每天收费,到晚上关机的时候将收费的数据备份到一张表  aaa.db
    aaa.db表的结构是:《用户号,交费时间,交费金额,更新标志》
      然后将aaa.db的数据更新到 mssql 服务器,更新的操作很复杂,就做了一个存储过程  p_edit 
      procedrue xxx
    var QrySev,tmpQry1,tmpQry2:TQuery;
    begin
      QrySev := TQuery.create(nil);
      tmpQry1 := TQuery.create(nil);
      tmpQry2 := TQuery.create(nil);
      try
        RunSQL(QrySev,LocDBPath,'select * from aaa.db');
        while not QrySev.eof do
          try
            Database1.StartTransaction;  //开始事物
            RunSQL(tmpQry1,LocDBPath,'......');//更新到本地表
            RunSQL(tmpQry2,SevDBPath,'......');//更新到服务器
    //问题就是上面的数据库不是同一个,一个是本地表,一个MSSQL服务器,Database1该是
    //那一个呢 ,是本地的还是MSSQL服务器的
            Database1.commit;            //提交事物 
          except
            Database1.Rollback;          //回滚事务
          end;
        end;
      finally
        QrySev.free;
        tmpQry1.free;
        tmpQry2.free;
      end;
    end;procedure RunSQL(qry:tquery,dbstr,sql:string) 是一个过程,
    就是让 qry 运行一个SQL语句,数据库是DBSTR;
      

  7.   

    在会滚前用类似intransaction的属性判断一下,在事务中再回滚