F_dm.ADOConnection1.BeginTrans;  //启动事务
    with ADOQuery3 do   //将信息保存到进货主表
    begin
      Close;
      SQl.Clear;
      SQl.Add('select * from tb_warehouse_main where billcode='+''''+Trim(Edit2.Text)+'''');
      open;
      edit;
      FieldByName('units').AsString:=Trim(Edit3.Text);
      FieldByName('handle').AsString:=Trim(Edit4.Text);
       FieldByName('op').AsString:=Trim(Edit1.Text);
      FieldByName('summary').AsString:=Trim(Edit5.Text);
      FieldByName('fullpayment').AsFloat:=strtofloat(panel1.Caption);
      FieldByName('payment').AsFloat:=strtofloat(format('%10.4f',[strtofloat(Edit6.Text)]));
       UpdateRecord;
      post;
    end;
        With ADOQuery3 do
        begin
          Close;
          SQL.Clear;
          SQL.Add('delete from tb_warehouse_detailed where billcode ='+''''+Trim(Edit2.Text)+'''');
          ExecSQL;
        end;
   with ADOQuery3 do   //将信息保存到往来账明细表
    begin
      close;
      SQL.Clear;
      SQL.Add('select * from tb_currentaccount where billcode='+''''+Trim(Edit2.Text)+'''');
      Open;
       edit;
      FieldByName('units').AsString:=Trim(Edit3.Text);
       FieldByName('op').AsString:=Trim(Edit1.Text);
      FieldByName('reducegathering').AsFloat:=strtofloat(panel1.Caption);
      FieldByName('balance').AsFloat:=strtofloat(Edit6.Text)-strtofloat(panel1.Caption);
      post;
    end;   For grow:=1 to strdbrows do
    begin
      with adoquery3 do
      begin
        with stringgrid1 do
        begin
          Close;
          SQL.Clear;
          SQL.Add('select * from tb_stock where tradecode='+''''+Trim(Cells[1,grow])+'''');
          Open;
          edit;
          fieldbyname('qty').AsFloat:=fieldbyname('qty').AsFloat+strtofloat(Cells[11,grow]);
          fieldbyname('price').AsFloat:=strtofloat(format('%10.4f',[strtofloat(Cells[8,grow])]));
          UpdateRecord;
          post;
        end;
      end;
    end;    //保存往来单位表中的 累计应收 累计应付字段
    with Adoquery3 do
    begin
      Close;
      SQl.Clear;
      SQl.Add('select * from tb_units where fullname='+''''+Trim(Edit12.Text)+'''');
      open;
      Edit;
      FieldByName('payment').AsFloat:=strtofloat(format('%10.4f',[FieldByName('payment').AsFloat-strtofloat(panel1.Caption)+strtofloat(Edit6.Text)]));
      updaterecord;
      post;
    end;        with Adoquery3 do
    begin
      Close;
      SQl.Clear;
      SQl.Add('select * from tb_units where fullname='+''''+Trim(Edit3.Text)+'''');
      open;
      Edit;
      FieldByName('payment').AsFloat:=strtofloat(format('%10.4f',[FieldByName('payment').AsFloat+strtofloat(panel1.Caption)-strtofloat(Edit6.Text)]));
      updaterecord;
      post;
    end;     with Adoquery3 do   //将信息保存到进货明细表
    begin
      Close;
      SQl.Clear;
      SQl.Add('select * from tb_warehouse_detailed');
      open;
      For grow:=1 to strdbrows do   //strdbrows记录当前表单的记录个数
      begin
        insert;
        FieldByName('billdate').AsDateTime:=strtodate(formatdatetime('yyyy-mm-dd',datetimepicker1.Date));
        FieldByName('billcode').AsString:=Trim(Edit2.Text);
        FieldByName('op').AsString:=Trim(Edit1.Text);
        FieldByName('handle').AsString:=Trim(Edit4.Text);
        for gcol:=1 to 9 do
        begin
          Fields[gcol].AsVariant:=stringgrid1.Cells[gcol,grow];
        end;
        post;
      end;
    end;

  F_dm.ADOConnection1.CommitTrans;      //提交事务
    Application.MessageBox('修改入库单成功','提示',mb_ok);  except
    F_dm.ADOConnection1.RollbackTrans;      //回滚事务
    Application.MessageBox('保存不成功','提示',mb_ok);
  end;
  F_jhcx.Button1.Click;
end;
这是入库表修改的源代码,我启用了事务控制,奇怪的是程序有时执行正确有时出现错误!
我是这样修改入库单的主明细表报表,入库主表我是根据入库单号进行修改数量和金额和供应商(这段没问题)
入库明细表我是首先删除所有相对应的入库明细表,然后再插入刚修改的明细表,这个方法比较笨,不知道有没有更好的方法,删除入库明细表没有问题,问题出现在插入修改的明细表,有时可以,有时却不能插入,只把原明细表删了,然没有插入修改的明细表,上面经色代码好为插入代码,代码应该本身没有问题,但有时却不执行,请高手指点,哪错了呀!