在三层结构中的主细表,我想用户选择了单据后自动插入明细,如果已经有了明细则先删除,代码如下:
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也执行了,这是怎么回事?请大家指点。
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也执行了,这是怎么回事?请大家指点。
应是
CommandText := 'delete from t_ckdmx where ckdid=''' + CDS_DBCK.FieldByName('djbh//而非ckdid吧').AsString + '''';
'delete from t_ckdmx where ckdid='''+CDS_DBCK.FieldByName(ckdid).asstring+'''';
我也仔细跟踪了,但发现虽然执行了delete的sql语句,但记录并没有删除。
大侠点拨一下吧!