怎么防止重复导入数据

J198728 2010-01-26 02:18:09
下面的代码为从EXCL中向ACCESS中复制数据,query2连接excel表,query1连access,
但是出现了一个问题,excel表中的数据可以多次导入,这样就造成了重复,有什么方法
让它在重复导入的时候,弹出提示 坐等高手解决!
if ADOquery2.RecordCount > 0 then
begin
ADOquery2.First;
for i := 1 to ADOquery2.RecordCount do
if not ADOquery1.Locate('编号',TRIM(ADOquery2.FieldValues['编号']),[]) then//防止导入表中的重复数据,
begin
ADOquery1.Append;
ADOquery1.FieldValues['编号']:=ADOquery2.FieldValues['编号'];
ADOquery1.FieldValues['名称']:=ADOquery2.FieldValues['名称'];
ADOquery1.FieldValues['价格']:=ADOquery2.FieldValues['价格'];
ADOquery1.Post;
ADOquery2.Next;
end;

end;
...全文
197 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianpeiyudncs 2010-01-29
  • 打赏
  • 举报
回复
ACCESS 支持两个数据库连接。 可以在sql语句里直接判断。让数据库直接判断执行。这种方法就免得在程序里做判断了。
magicjove 2010-01-29
  • 打赏
  • 举报
回复

在程序里做判断,由于插入会时时导致数据库与程序查询结果不同,所以要求
时时刷新查询结果。
类似你这种插入要先将所有数据保存到数据库临时表TMP中
然后INSERT INTO 表1 FROM TMP
WHERE TMP.编号 NOT IN() 之类的插入到实际表中
重复机制处理在临时表,在实时表上不能对数据进行加工
Harryfin 2010-01-26
  • 打赏
  • 举报
回复
6楼的那种逻辑判断方法是不可取的,除非你是单机程序。

一般必须通过SQL语句直接从数据库中进行判断,这样才能保证逻辑的正确性。否则你内存中的拷贝,可能数据库中早就被人修改成另外一个值了。
J198728 2010-01-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 idecl 的回复:]
那再给你一个办法,先导入数据到一个临时表,比如A表,然后删除这张表里与你目的表重复的数据,再将剩下的数据插入到你的目的表,就OK了
[/Quote]
这个临时表怎么创建,怎么删除,两个表中的重复数据呢,各位再指点一下,多谢
J198728 2010-01-26
  • 打赏
  • 举报
回复
谢谢三哥
idecl 2010-01-26
  • 打赏
  • 举报
回复
而且你最好用while not eof()
idecl 2010-01-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 j198728 的回复:]
嗯,逻辑处理怎么弄呀,设置主键的方法试过了,但是出现一个问题,如果excel表格中间只有一个编号(主键)和ACCESS中的重复的法,会导致后边所有的包括不重复的都不能导入,再等高手
[/Quote]

for i := 1 to ADOquery2.RecordCount do
try
if not ADOquery1.Locate('编号',TRIM(ADOquery2.FieldValues['编号']),[]) then//防止导入表中的重复数据,
begin

ADOquery1.Append;
ADOquery1.FieldValues['编号']:=ADOquery2.FieldValues['编号'];
ADOquery1.FieldValues['名称']:=ADOquery2.FieldValues['名称'];
ADOquery1.FieldValues['价格']:=ADOquery2.FieldValues['价格'];
ADOquery1.Post;
ADOquery2.Next;
end;
except
continue; //继续循环
end;
idecl 2010-01-26
  • 打赏
  • 举报
回复
那再给你一个办法,先导入数据到一个临时表,比如A表,然后删除这张表里与你目的表重复的数据,再将剩下的数据插入到你的目的表,就OK了
J198728 2010-01-26
  • 打赏
  • 举报
回复
嗯,逻辑处理怎么弄呀,设置主键的方法试过了,但是出现一个问题,如果excel表格中间只有一个编号(主键)和ACCESS中的重复的法,会导致后边所有的包括不重复的都不能导入,再等高手
idecl 2010-01-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hnlg81004 的回复:]
两种方法:
一种是在客户端做判断,也就是在程序中加入逻辑处理,
而是在数据库中设置主键,防止重复插入
最好是两种结合
[/Quote]
同意、定义主键,程序判断
CCC的 2010-01-26
  • 打赏
  • 举报
回复
两种方法:
一种是在客户端做判断,也就是在程序中加入逻辑处理,
而是在数据库中设置主键,防止重复插入
最好是两种结合
Harryfin 2010-01-26
  • 打赏
  • 举报
回复
进行逻辑判断后才入库

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧