第一段:
var
  sql:string;
  iCount:integer;
begin
IF aStatus =0 then
begin
  Label10.Caption :=Edit4.Text +Edit5.Text +Edit6.Text +Edit15.Text ;
  sql:='Exec SavePayPriceH '+inttostr(PID)+','''+Edit6.Text+''','''+Edit4.Text+''','''+Edit5.Text+''','''+Edit15.Text+''', '
      +''''+Label10.Caption+''',0,'''+Edit7.Text+''','''+Edit8.Text+''','''+Edit7.Text+''' ';
  DM.CDS_PayExc.Close ;
  DM.CDS_PayExc.CommandText :=sql;
  DM.CDS_PayExc.Open ;
  PID:=DM.CDS_PayExc.FieldByName('PID').AsInteger;  F_Main.StatusBar1.Panels[3].Text :='记录被保存!';
end
else
  F_Main.StatusBar1.Panels[3].Text :='此单据不可修改,保存失败!';
第二段:
var
 iCount:integer;
begin
  DM.CDS_PayproiceB.DisableControls;
  DM.CDS_PayproiceB.first;
  DM.CDS_PayproiceB.Edit ;
  DM.CDS_PayproiceBPID_.Value :=88;
  DM.CDS_PayproiceBAppUser_.Value :=UserName;
  DM.CDS_PayproiceB.Post ;
  DM.CDS_PayProiceB.Next;
  DM.CDS_PayproiceB.ApplyUpdates(0);
  DM.CDS_PayproiceB.EnableControls;按顺序,先执行第一段,再执行第二段,第一段的执行结果是自己想要的,达到目的,但是第二段就不执行,没有达到目的
如果先执行第二段,再执行第一段,两段结果都能存到数据库里 都能正常执行
但是事实上是一定先执行第一段,第二的PID要取第一段的结果,我都查了一上午都没查出结果,请高手帮我看看啊,谢谢啊!!

解决方案 »

  1.   

    第2段没有循环
    加上
    WHILE NOT dataset.EOF DO
    Begin
      //dosomething;
      next;
    end;
    试试
      

  2.   

    跟踪,在Delphi里,我还真不会呢
      

  3.   

    DM.CDS_PayproiceB.ApplyUpdates(-1); 试试
      

  4.   

    我好知道原因了,但是我没什么办法解决!!在这两段代码前有一段  sql:='Select   pid_,proceid_,payprice_,Pbom_,PrintMark_,StDate_,EndDate_,ReMark_,UpDateTime_,AppUser_  from MP_PayPriceB  Where 1 <>1 ';  DM.CDS_PayproiceB.Close;
      DM.CDS_PayproiceB.CommandText:=sql;
      DM.CDS_PayproiceB.Open;
    这时打开了DM.CDS_PayproiceB 这个数据集,才可以在DBGRid中输入数据,添加行
    而保存时,第一段代码,又执行了
      DM.CDS_PayExc.Close ; 
      DM.CDS_PayExc.CommandText :=sql; 
      DM.CDS_PayExc.Open ; 
    当执行到第二段时,是对DM.CDS_PayproiceB这个来保存数据,这样就不行了,是不是执行第一段时关闭掉了DM.CDS_PayproiceB这个啊,我实在是想不到什么办法,来连续执行来保存,有人可以给介绍经验吗?
      

  5.   

    LZ   你的那 Where 1<>1     是什么意思啊 我记得我全用的是1=1 条件永远为真