为了避免向ACCESS数据表中插入重复数据,写了一个循环判断,但是查入的数据仍然有重复的,不知道问题出在那里,当把f的值设为1时,不能插入数据,说明我的inc(f)没起到作用,很困惑,请大家帮忙看下.
if ADOquery2.RecordCount > 0 then //query2连接的是excel中的数据表,
begin
ADOquery2.First;
for i := 1 to ADOquery2.RecordCount do //循环判断是否和数据表中的'编号'字段是否重复
begin
f:=0; //若有一个重复则变量f自加1
adoquery1.close;
adoquery1.sql.Clear;
adoquery1.sql.add('select 编号 from sp') ;
adoquery1.Open;
adoquery1.First;
if adoquery1.FieldByName('编号')=adoquery2.FieldByName('编号') //这句正确吗
then
begin
inc(f);
adoquery1.Next; //数据表循环,
end
else
begin
adoquery1.Next ;
end; if f=0 //当f=0时,说明没有重复,进行复制,
then
begin
ADOquery1.Close;
ADOquery1.Sql.Text := 'SELECT top 1 * FROM sp where 1=0';
ADOquery1.Open;
ADOquery1.Append;
ADOquery1.FieldValues['编号']:=ADOquery2.FieldValues['编号'];
ADOquery1.FieldValues['名称']:=ADOquery2.FieldValues['名称'];
ADOquery1.FieldValues['价格']:=ADOquery2.FieldValues['价格'];
ADOquery1.Post;
ADOquery2.Next;
end
else
begin
adoquery2.next; //若不等于0,则不复制,跳到excel表的下一行断续进行判断.
end ;
end; end;
if ADOquery2.RecordCount > 0 then //query2连接的是excel中的数据表,
begin
ADOquery2.First;
for i := 1 to ADOquery2.RecordCount do //循环判断是否和数据表中的'编号'字段是否重复
begin
f:=0; //若有一个重复则变量f自加1
adoquery1.close;
adoquery1.sql.Clear;
adoquery1.sql.add('select 编号 from sp') ;
adoquery1.Open;
adoquery1.First;
if adoquery1.FieldByName('编号')=adoquery2.FieldByName('编号') //这句正确吗
then
begin
inc(f);
adoquery1.Next; //数据表循环,
end
else
begin
adoquery1.Next ;
end; if f=0 //当f=0时,说明没有重复,进行复制,
then
begin
ADOquery1.Close;
ADOquery1.Sql.Text := 'SELECT top 1 * FROM sp where 1=0';
ADOquery1.Open;
ADOquery1.Append;
ADOquery1.FieldValues['编号']:=ADOquery2.FieldValues['编号'];
ADOquery1.FieldValues['名称']:=ADOquery2.FieldValues['名称'];
ADOquery1.FieldValues['价格']:=ADOquery2.FieldValues['价格'];
ADOquery1.Post;
ADOquery2.Next;
end
else
begin
adoquery2.next; //若不等于0,则不复制,跳到excel表的下一行断续进行判断.
end ;
end; end;
解决方案 »
- Undeclared identifier: 'YearOf'问题
- 动态定义的控件如何响应消息
- [求助]怎么获得tScrollBox滚动条事件
- DbGridEh导出excel,记录太多会出错?
- ACCESS数据库查询
- 谁要分
- 由于 report machine和fast report是兼容的,是在其2.43版的基础上重新做的,大部分的使用方法都一样,所以有问题可以到www.pcjingning.c
- DELPHI 调用过程ADOStoredProc1的问题??
- 如何得到一个类的多个级联父类。例如:从Table1得到TTable、从TTable得到TDBDataSet依次类推!
- WaveOutOpen的问题
- 如何分级递归显示出treeview
- 求delphi2010下载地址!
这样 DataSet.RecordCount 就是 f 值了
adoquery1.sql.Clear;
adoquery1.sql.add('select 编号 from sp where 编号=:bh') ;
adoquery1.parameters.parambyname('bh').value := adoquery2.fieldByname('编号').asstring;
adoquery1.Open;
if not eof then
begin
showmessage('重复');
Exit;
end;
我汗,你按阿三的做,是每个都要做判断,一个记录做一次判断,你不觉麻烦吗?
而按我的那个,只要执行一句SQL语句就OK,根本不用管是否重复,
唉~~ 等你以后的SQL知识多了,就知道了.