众位大侠帮帮忙吧我使用的是delphi 和 paradox数据库有两个表主从表结构 在从表中插入数据时如果插入两行没有任何问题,如果插入两行后再插入第三行的时候总提示:key violation 提示,是提示的主键重复,可是根据我的程序的循环是不会出现关键字重复的主表的关键字是:fplx,fpdm,fphm 从表的关键字是 fplx,fpdm,fphm,fpxh代码如下:
body.First ;
while not body.Eof do begin
if body.RecNo = 1 then begin
gdsfpmx.First ;
end else begin
gdsfpmx.Append;
end;
gdsfpmx.Edit;
gdsfpmx.FindField('fplx').Value := 's'
gdsfpmx.FindField('fpdm').Value := fpdm;
gdsfpmx.FindField('fphm').Value := fphm;
iIdx := iIdx + 10;
gdsfpmx.FindField('fpxh').Value := iIdx;
try
gdsfpmx.FindField('spbh').Value := 'ZAQXSW';
except
on e:Exception do
log('商品编号:' + e.Message);
end; GetGoodsCode('ZAQXSW',spmch,spggxh,spjldw,spslv,spdj,false); gdsfpmx.FindField('spmc').AsString := 'ZAQXSW';
gdsfpmx.FindField('sl').Value := spsl;
gdsfpmx.FindField('je').AsFloat := spje;
gdsfpmx.FindField('slv').Value := spslv;
gdsfpmx.FindField('djbh').AsString := xsdjbh;
gdsfpmx.FindField('djmxxh').AsInteger := djmxxh;
body.Next;
end;
body.First ;
while not body.Eof do begin
if body.RecNo = 1 then begin
gdsfpmx.First ;
end else begin
gdsfpmx.Append;
end;
gdsfpmx.Edit;
gdsfpmx.FindField('fplx').Value := 's'
gdsfpmx.FindField('fpdm').Value := fpdm;
gdsfpmx.FindField('fphm').Value := fphm;
iIdx := iIdx + 10;
gdsfpmx.FindField('fpxh').Value := iIdx;
try
gdsfpmx.FindField('spbh').Value := 'ZAQXSW';
except
on e:Exception do
log('商品编号:' + e.Message);
end; GetGoodsCode('ZAQXSW',spmch,spggxh,spjldw,spslv,spdj,false); gdsfpmx.FindField('spmc').AsString := 'ZAQXSW';
gdsfpmx.FindField('sl').Value := spsl;
gdsfpmx.FindField('je').AsFloat := spje;
gdsfpmx.FindField('slv').Value := spslv;
gdsfpmx.FindField('djbh').AsString := xsdjbh;
gdsfpmx.FindField('djmxxh').AsInteger := djmxxh;
body.Next;
end;
body.First ;
while not body.Eof do
begin
gdsfpmx.Append;
gdsfpmx.FieldByName('fplx').Value := 's'
gdsfpmx.FieldByName('fpdm').Value := fpdm;
gdsfpmx.FieldByName('fphm').Value := fphm;
iIdx := iIdx + 10;
gdsfpmx.FieldByName('fpxh').Value := iIdx; gdsfpmx.FieldByName('spbh').Value := 'ZAQXSW';
GetGoodsCode('ZAQXSW',spmch,spggxh,spjldw,spslv,spdj,false); gdsfpmx.FieldByName('spmc').AsString := 'ZAQXSW';
gdsfpmx.FieldByName('sl').Value := spsl;
gdsfpmx.FieldByName('je').AsFloat := spje;
gdsfpmx.FieldByName('slv').Value := spslv;
gdsfpmx.FieldByName('djbh').AsString := xsdjbh;
gdsfpmx.FieldByName('djmxxh').AsInteger := djmxxh;
try
gdsfpmx.post;
except
//
end; body.Next;
end;
end;