ADOConn.BeginTrans;
     Try         ADOQuery1.SQL.Clear;
         ADOQuery1.SQL.Add('insert into BillMaster(BillNo,inputdate,Chuan_ID,Kuan_ID,Bian_ID,MA_ID,T_Jian,userNo) Values(:a,:b,:c,:d,:e,:f,:g,:h)');
         ADOQuery1.Parameters.ParamByName('a').Value:=billNo;
         ADOQuery1.Parameters.ParamByName('b').Value:=DateTimePicker1.Date;
         ADOQuery1.Parameters.ParamByName('c').Value:=Trim(Edit1.Text);
         ADOQuery1.Parameters.ParamByName('d').Value:=Trim(Edit2.Text);
         ADOQuery1.Parameters.ParamByName('e').Value:=Trim(Edit3.Text);
         ADOQuery1.Parameters.ParamByName('f').Value:=Trim(Edit4.Text);
         ADOQuery1.Parameters.ParamByName('g').Value:=Trim(Edit5.Text);
         ADOQuery1.Parameters.ParamByName('h').Value:=FrmMain.UserNo;
         ADOQuery1.ExecSQL;         for i:=1 to Grid1.RowCount-1 do
         begin
              ADOQuery1.SQL.Clear;
              ADOQuery1.SQL.Add('insert into BillDetail(BillNo,CheJianID,GongHao,GongXi,Jian) Values(:a,:b,:c,:d,:e)');
              ADOQuery1.Parameters.ParamByName('a').Value:=billNo;
              ADOQuery1.Parameters.ParamByName('b').Value:=Grid1.Cells[1,i];
              ADOQuery1.Parameters.ParamByName('c').Value:=Grid1.Cells[2,i];
              ADOQuery1.Parameters.ParamByName('d').Value:=Grid1.Cells[0,i];
              ADOQuery1.Parameters.ParamByName('e').Value:=Grid1.Cells[3,i];
              ADOQuery1.ExecSQL;
         end;
         ADOConn.CommitTrans;
         Application.MessageBox('数据保存成功','提示',64);
     except
         ADOConn.RollbackTrans;
         Application.MessageBox('数据保存出错','提示',64);
     end;上述语句执行后提示对象已关闭无法执行,请问如何解决?

解决方案 »

  1.   

    把 ADOConn.BeginTrans; 与ADOConn.CommitTrans; 去掉试一试~~~
      

  2.   

    如果是这样, 你把for时面的adoquery换另一个来试一下吧~~~~~~事务应是一个连续的动作吧, 你在后的面循环是不是关闭了数据对象,再执行后面的操作, 在关闭的时候,事务是不是已确认了~~~~~~~~~~所以就出错呀~~~最好把后面的循环部分写到触发器里面作为一个整体的事务, 容易控制~~~