function TfrmInput.find2:Currency;
begin
 find2:=0;
 with DMtongtao.ADOQrkdh  do
      begin
       close;
       sql.Clear;
       sql.Add('select * from rkdhb where rkdh='''+Trim(Eddh.text)+'''');
      try
       open;
       if  not IsEmpty then
         find2:=fieldbyname('Tmoney').AsCurrency;
      finally
      close;
    end;
   end;
end;function TfrmInput.find3:integer;
begin
 find3:=0;
 with DMtongtao.ADOQkc  do
      begin
       close;
       sql.Clear;
       sql.Add('select * from kczb where P_Code='''+CmbP_code.text+'''');
      try
       open;
       if  not IsEmpty then
         find3:=fieldbyname('P_Sl').AsInteger;
     finally
      close;
    end;
   end;
end;function TfrmInput.SaveAll:boolean;
var
 num:integer;
 dprice,Total,total1:Currency;
begin
  with DMtongtao do
  begin
   ADOCtongtao.BeginTrans;//事务提交
  try
    ADOQrkdj.SQL.Text:='select * from rkdjb where 1=0';
    ADOQrkdj.LockType:=ltBatchOptimistic;
    ADOQrkdj.CursorType:=ctKeyset;
    ADOQrkdj.Open;
    ADOQkc.SQL.Text:='select * from kczb where 1=0';
    ADOQkc.LockType:=ltBatchOptimistic;
    ADOQkc.CursorType:=ctKeyset;
    ADOQkc.Open;
   if find1=0 then
     begin
      ADOQcpm.SQL.Text:='select * from cpmk where 1=0';
      ADOQcpm.LockType:=ltBatchOptimistic;
      ADOQcpm.CursorType:=ctKeyset;
      ADOQcpm.Open;      ADOQcpm.Append;
      ADOQcpm.FieldByName('P_Code').AsString:=Trim(CmbP_code.text);
      ADOQcpm.FieldByName('P_Name').AsString:=Trim(EdP_name.text);
      ADOQcpm.FieldByName('P_Mode').AsString:=Trim(EdP_mode.text);
      ADOQcpm.FieldByName('P_Dw').AsString:=Trim(EdP_Unit.text);
      ADOQcpm.Post;
      ADOQcpm.UpdateBatch;
     end;    ADOQrkdj.Append;
    ADOQrkdj.FieldByName('rkdh').AsString:=trim(Eddh.text);
    ADOQrkdj.FieldByName('jhname').AsString:=trim(EdJhName.text);
    ADOQrkdj.FieldByName('P_Code').AsString:=trim(CmbP_code.text);
    ADOQrkdj.FieldByName('P_name').AsString:=trim(EdP_name.text);
    ADOQrkdj.FieldByName('P_mode').AsString:=trim(EdP_mode.text);
    ADOQrkdj.FieldByName('jhbm').AsString:=trim(Ed_bm.text);
    ADOQrkdj.FieldByName('P_sl').AsInteger:=strtoint(trim(EdP_SL.text));
    num:=strtoint(trim(EdP_SL.text));
    ADOQrkdj.FieldByName('P_price').AsCurrency:=strtocurr(trim(EdP_price.text));
    dprice:=strtocurr(trim(EdP_price.text));
    total:=num*dprice;
    ADOQrkdj.Post;   if find2=0 then //函数执行后查询被关闭
     begin
       ADOQrkdh.SQL.Text:='select * from rkdhb where 1=0';
       ADOQrkdh.LockType:=ltBatchOptimistic;
       ADOQrkdh.CursorType:=ctKeyset;
       ADOQrkdh.Open;       ADOQrkdh.Append;
       ADOQrkdh.FieldByName('rkdh').AsString:=Trim(Eddh.text);
       ADOQrkdh.FieldByName('jhname').AsString:=Trim(EdJhName.text);
       ADOQrkdh.FieldByName('jhbm').AsString:=trim(Ed_bm.text);
       ADOQrkdh.FieldByName('Tmoney').AsCurrency:=Total;
      end
   else
      begin
       ADOQrkdh.SQL.Text:='select * from rkdhb where rkdh='''+Trim(Eddh.text)+'''';
       ADOQrkdh.LockType:=ltBatchOptimistic;
       ADOQrkdh.CursorType:=ctKeyset;
       ADOQrkdh.Open;       ADOQrkdh.edit;
       ADOQrkdh.fieldbyname('Tmoney').AsCurrency:=find2+total;
这上面一句不能正确执行
    
     end;
    ADOQrkdh.Post;    if find3=0 then
      begin
       ADOQkc.SQL.Text:='select * from kczb where 1=0';
       ADOQkc.LockType:=ltBatchOptimistic;
       ADOQkc.CursorType:=ctKeyset;
       ADOQkc.Open;       ADOQkc.Append;
       ADOQkc.FieldByName('P_Code').AsString:=trim(CmbP_code.text);
       ADOQkc.FieldByName('P_name').AsString:=trim(EdP_name.text);
       ADOQkc.FieldByName('P_mode').AsString:=trim(EdP_mode.text);
       ADOQkc.FieldByName('P_sl').AsInteger:=strtoint(trim(EdP_SL.text));
       ADOQkc.FieldByName('P_price').AsCurrency:=strtofloat(trim(EdP_price.text));
       ADOQkc.FieldByName('P_Money').AsCurrency:=total;
     end
    else
      begin
       ADOQkc.SQL.Text:='select * from kczb where P_Code='''+CmbP_code.text+'''';
       ADOQkc.LockType:=ltBatchOptimistic;
       ADOQkc.CursorType:=ctKeyset;
       ADOQkc.Open;
       total1:=ADOQkc.FieldByName('P_Money').AsCurrency;       ADOQkc.Edit;       ADOQkc.FieldByName('p_sl').AsInteger:=find3+strtoint(trim(EdP_SL.text));
       ADOQkc.FieldByName('P_Money').AsCurrency:=total+total1;
      end;  这上面两句不能正确执行
    ADOQkc.Post;    ADOQkc.UpdateBatch;
    ADOQrkdh.UpdateBatch;
    ADOQrkdj.UpdateBatch;   ADOCtongtao.CommitTrans;
   result:=true;
 except
    ADOCtongtao.RollbackTrans;
    MessageDlg('保存数据失败!',mtError,[mbOK],0);
    Close;
    result:=false;
    end;
  end;
end;

解决方案 »

  1.   

    大概看了你的代码,一般是提交时出错?可能是数据集的open都在if ..else ..内部,故而有些条件不到的地方数据集没有打开,试着在提交时检测一下数据集的打开状态
    比如: if ADOQrkdj.Active then ADOQrkdj.UpdateBatch;
      

  2.   


           ADOQrkdh.fieldbyname('Tmoney').AsCurrency:=find2+total;
    这上面一句不能正确执行
        ADOQkc.FieldByName('p_sl').AsInteger:=find3+strtoint(trim(EdP_SL.text));
           ADOQkc.FieldByName('P_Money').AsCurrency:=total+total1;
          end;  这上面两句不能正确执行
        
    提示说找不到字段Tmoney,'p_sl','P_Money',但是不进入这几句代码的时候又没有这个问题,
      

  3.   

    find2,find3里有问题,设断点,f8跟踪一下吧.
      

  4.   

    楼主:
    find3里的adoqkc 已经有sql语句
    你在saveall的时候并没有clear 并重新open ,所以找不到那些字段!