下面的代码为从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;
但是出现了一个问题,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;
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;
在程序里做判断,由于插入会时时导致数据库与程序查询结果不同,所以要求
时时刷新查询结果。
类似你这种插入要先将所有数据保存到数据库临时表TMP中
然后INSERT INTO 表1 FROM TMP
WHERE TMP.编号 NOT IN() 之类的插入到实际表中
重复机制处理在临时表,在实时表上不能对数据进行加工