起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 138|回复: 7

【结】不知道为什么如下代码会一次性插入两条记录

[复制链接]
发表于 2009-11-19 09:40:34 | 显示全部楼层 |阅读模式
procedure TMainForm.FrameButton1Click(Sender: TObject);
var
bh:string;
khlb,khkssj,khjssj,KQSZBL,GZJLSZBL,ZGPJSZBL,ESFZKFBL,BXSKFBL,YXSKFBL,QTKFBL,MTCERWJFS,BM,bckhmc:String;
begin
query1.Close;
query1.ConnectionString:='DATABASEURL=Biz:\KHXT\KHSJK.Database';
query1.CommandText:='select * from khcspzb where khlb='''+combobox1.Text+''' and KHKSSJ=to_date('''+DataEdit1.Text+''',''yyyy-mm-dd'') and KHJSSJ=to_date('''+DataEdit4.Text+
                     ''',''yyyy-mm-dd'') and KQSZBL='+DataEdit2.text+' and GZJLSZBL='+DataEdit5.Text+' and ZGPJSZBL='+DataEdit3.Text+' and ESFZKFBL='+DataEdit17.Text+' and BXSKFBL='+
                     DataEdit19.Text+' and YXSKFBL='+DataEdit20.text+' and QTKFBL='+DataEdit21.Text+' and MTCERWJFS='+DataEdit25.Text+' and BM='''+dept+''' and bckhmc='''+DataEdit27.Text+'''';
query1.Execute;
query1.Open;
if query1.RecordCount>0 then
begin
//并且要指向那条记录
Tsqldataset(DataSetKHCSPZ.DataSet).UserFilter:='bh='''+ query1.FieldByName('bh').AsString+'''';
dialogs.ShowMessage('设置成功!');
exit;
end;
//如果没有这样的记录就要插入一条了
khlb:=combobox1.Text;
KHKSSJ:=DataEdit1.Text;
KHJSSJ:=DataEdit4.Text;
KQSZBL:=DataEdit2.text;
GZJLSZBL:=DataEdit5.Text;
ZGPJSZBL:=DataEdit3.Text;
ESFZKFBL:=DataEdit17.Text;
BXSKFBL:=DataEdit19.Text;
YXSKFBL:=DataEdit20.text;
QTKFBL:=DataEdit21.Text;
MTCERWJFS:=DataEdit25.Text;
bckhmc:=DataEdit27.Text;
DataSetKHCSPZ.DataSet.Append;
// DataSetKHCSPZ.DataSet.ApplyUpdates;
DataSetKHCSPZ.DataSet.FieldByName('KHKSSJ').AsDateTime:=sysutils.StrToDate(KHKSSJ);
DataSetKHCSPZ.DataSet.FieldByName('KHKSSJ').AsDateTime:=sysutils.StrToDate(KHJSSJ);
DataSetKHCSPZ.DataSet.FieldByName('KQSZBL').AsFloat:=sysutils.StrToFloat(KQSZBL);
DataSetKHCSPZ.DataSet.FieldByName('GZJLSZBL').AsFloat:=sysutils.StrToFloat(GZJLSZBL);
DataSetKHCSPZ.DataSet.FieldByName('ZGPJSZBL').AsFloat:=sysutils.StrToFloat(ZGPJSZBL);
DataSetKHCSPZ.DataSet.FieldByName('ESFZKFBL').AsFloat:=sysutils.StrToFloat(ESFZKFBL);
DataSetKHCSPZ.DataSet.FieldByName('BXSKFBL').AsFloat:=sysutils.StrToFloat(BXSKFBL);
DataSetKHCSPZ.DataSet.FieldByName('YXSKFBL').AsFloat:=sysutils.StrToFloat(YXSKFBL);
DataSetKHCSPZ.DataSet.FieldByName('QTKFBL').AsFloat:=sysutils.StrToFloat(QTKFBL);
DataSetKHCSPZ.DataSet.FieldByName('khlb').AsString:=khlb;
DataSetKHCSPZ.DataSet.FieldByName('bckhmc').AsString:=bckhmc;
// DataSetKHCSPZ.DataSet.Post;
DataSetKHCSPZ.DataSet.ApplyUpdates;
dialogs.ShowMessage('设置成功!');
end;
本来想利用上述代码插入一条记录的,不知道为什么每次都一次性插入两条,这两条中只有KHKSSJ和KHJSSJ是不一样的。
回复

使用道具 举报

发表于 2009-11-19 09:43:03 | 显示全部楼层
你跟踪代码看看,是否执行两次了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-19 09:58:02 | 显示全部楼层
我跟踪了,只执行了一次。
回复 支持 反对

使用道具 举报

发表于 2009-11-19 10:01:59 | 显示全部楼层
楼主,本身DataEdit上已经有数据,然后又用代码新增插入一条,保存时候,保存的是两条。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-19 10:08:23 | 显示全部楼层
难道中间的
DataSetKHCSPZ.DataSet.Append; 这句话不会把dataedit上关联的数据都冲掉?
况且我插入的两条数据中的KHKSSJ和KHJSSJ字段,有一条是正确的,另一条都不知道从哪儿来的数据。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-19 10:21:32 | 显示全部楼层
哦,我想明白了,你解释的有道理,谢谢啊,我再想别的办法。
回复 支持 反对

使用道具 举报

发表于 2009-11-19 10:27:30 | 显示全部楼层
Append是新增记录,如果你在前面写上CancelUpdates会把你填写的数据给冲掉,确切说把数据撤销。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-19 10:53:10 | 显示全部楼层
我果然用这个方法解决了,多谢,结贴吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-14 08:47 , Processed in 0.039989 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表