在三层结构中的主细表,我想用户选择了单据后自动插入明细,如果已经有了明细则先删除,代码如下:
procedure TFRM_DBCK.CDS_DBCKAfterPost(DataSet: TDataSet);
begin
  //如果单据编号不为空,则根据该调拨申请单自动生成明细
  if CDS_DBCK.FieldByName('djbh').AsString <> '' then
  begin
    with cds_temp do
    begin      //如果有明细,则删除所有明细
      if CDS_CKDMX.RecordCount > 0 then
      begin
        Close;
        CommandText := 'delete from t_ckdmx where ckdid=''' + CDS_DBCK.FieldByName('ckdid').AsString + '''';
        Execute;
      end;
      
      Close;
      CommandText := 'select * from t_ckdmx'
        + ' where ckdid=''' + CDS_DBCK.FieldByName('djbh').AsString + '''';
      Open;
      First;
      while not Eof do
      begin
        CDS_CKDMX.Insert;
        CDS_CKDMX.FieldByName('wlbh').AsString := fieldbyname('wlbh').AsString;
        CDS_CKDMX.FieldByName('pub_sx').AsString := fieldbyname('pub_sx').AsString;
        CDS_CKDMX.FieldByName('thsl').AsFloat := fieldbyname('thsl').AsFloat;
        CDS_CKDMX.FieldByName('sfsl').AsFloat := fieldbyname('sfsl').AsFloat;
        CDS_CKDMX.FieldByName('jldw').AsString := fieldbyname('jldw').AsString;
        CDS_CKDMX.FieldByName('zhgx').AsFloat := fieldbyname('zhgx').AsFloat;
        CDS_DBCK.ApplyUpdates(0);
        Next;
      end;
    end;
  end;
end;
但对同一主记录反复选单据的过程中,明细在不断的增加,而跟踪时发现delete也执行了,这是怎么回事?请大家指点。

解决方案 »

  1.   

    你的意思是明细没有删除而是递增了是么?看看where ckdid=''' + CDS_DBCK.FieldByName('ckdid').AsString + ''''这个条件和你数据表里的相符么?你的程序我看不出错误来,我想还是SQL语言的问题吧:)
      

  2.   

    呵呵,楼上说的对!
    应是
    CommandText := 'delete from t_ckdmx where ckdid=''' + CDS_DBCK.FieldByName('djbh//而非ckdid吧').AsString + '''';
      

  3.   

    我是想删除当前主表记录的明细记录,所以肯定是
    'delete from t_ckdmx where ckdid='''+CDS_DBCK.FieldByName(ckdid).asstring+'''';
      

  4.   

    我的删除语句没有问题。
    我也仔细跟踪了,但发现虽然执行了delete的sql语句,但记录并没有删除。
    大侠点拨一下吧!