有一表中有字段 id  ,然后有个flag的标记 值为0或者1,当查出某个ID对应的值后点击确认按钮就,修改这个flag的值为1,可以同时查出多条数据,
原来我用了一条语句去修该 条件语句如下
where id in ('xxx','xxxx','xxx')
;但是要求要用循环修改 ,也就是每个值 就执行一次修改语句,并且前面要加事务语句,没写过事务,哪位高手能给个例子么,最好是能对例子进行讲解一下,小弟唯有以100%的结贴率来回报大家。

解决方案 »

  1.   

    以采用ADO为例
      ADOConnection.BeginTrans;
      try
        ADOConnection.Execute('update ...');
        ADOConnection.CommitTrans;
      except
        ADOConnection.RollbackTrans;
      end;
      

  2.   

    先查出flag='1' 的记录,然后 用 eof, first ,next  去修改
      

  3.   

    楼主要实际一起提交,如果出错,就一起回滚吗?这样子的话,我就不会了。如果不需要,而只是需要一条条update的话。。用下面的。adoquery1.sql.clear;
    adoquery1.sql.text:='select * from tablename';
    adoquery1.open;
    while not adoquery1.eof do
    begin
      adoquery2.sql.clear;
      adoquery2.sql.text := 'update tablename set col1=1 where col2=''' + adoquery1.fieldbyname('col1').asstring + '''';
      adoquery2.execute;
      adoquery1.next; 
    end这样子没有办法保证所有都update成功或所有都失败。
      

  4.   

    ADOConnection.BeginTrans;
    try
    //我用adoquery1绑定connection属性为adoconnection,使用adoquery操作,也能 回滚
    ADOConnection.CommitTrans;
    except
    ADOConnection.RollbackTrans;
    end;
      

  5.   

    感谢各位了 ,问题已解决,我用的是SocketConnection 
    方法
        try
          socketConnection1.appserver.transactionStart;
          XXXXXXXX
          XXXXXXXX  这里是要写的内容
           socketConnection1.appserver.transactionCommit;
       except
          on E:Exception do
          begin
            socketConnection1.appserver.transactionRollback;
          end;
       end;跟楼上一样