各位大虾,你们好,在一般的添加代码是
with AdoQuery do
begin
      close;
      sql.Clear;
      sql.Add('insert into sshjb(sshj_bh,sshj_mc,sshj_fdts)');
      sql.Add('values(:bh,:mc,:fdts)');
      parambyname('bh').AsString:=edit11.Text;
      parambyname('mc').AsString:=edit12.Text;
      parambyname('fdts').AsString:=edit13.Text;
      execsql;
end;但是如果用commit....rollback呢
应该这样控制呢
小弟不胜感激

解决方案 »

  1.   

    if con1.InTransaction then
        con1.CommitTrans;
      con1.BeginTrans;
      try
    .....
    .....
        con1.CommitTrans;
      finally
        con1.RollbackTrans;
      end;
      

  2.   

    BeginTrans
    try
      ...
      CommitTrans
    except
      ...
      RollbackTrans
    end;
      

  3.   

    ADOConnection.BeginTrans
    ...
    ...
      

  4.   

    各位大虾,你们好
    上面的代码在两层的情况下可以通过代码如下
    if data.ADOConnection1.InTransaction then
     data.ADOConnection1.CommitTrans;
     data.ADOConnection1.BeginTrans;
     try
      with data.ADOQuery1 do
        begin
        close;
        sql.Clear;
        sql.Add('execute pro_insert :@id,:@sch,:@dep,:@class');
        Parameters.ParamByName('@id').Value:=edit_id.Text;
        parameters.ParamByName('@sch').Value:=edit_sch.Text;
        parameters.ParamByName('@dep').Value:=edit_dep.Text;
        parameters.ParamByName('@class').Value:=edit_class.Text;
        execsql;
        sql.Clear;
        sql.Text:='exec pro_sel';
        open;
        end;
     finally
     data.ADOConnection1.RollbackTrans;
     end;
    但是。如果是三层呢,可户端用的控件是 DCOMConnection1,ClientDataSet1,把上面 的代码应该如何改进呢
      

  5.   

    事务处理procedure TForm1.Button1Click(Sender: TObject);
    begin
    ADOConnection1.begintrans;  //事务开始
    try
    adoquery2.Close;
    adoquery2.SQL.Clear;
    adoquery2.SQL.Add('insert biao2(b1,b2,b3) values(''5'',''5'',5)');
    adoquery2.ExecSQL;adoquery2.Close;
    adoquery2.SQL.Clear;
    adoquery2.SQL.Add('insert biao1(b1,b3) values(''5'',5)');
    adoquery2.ExecSQL;
    ADOConnection1.committrans;   //事务提交
    MessageBox(handle,'chegn','提示信息框',MB_OK);
    except
    MessageBox(handle,'提示信息框','提示信息框',MB_OK);
    ADOConnection1.rollbacktrans;      //事务回滚
    end;