下面的代码为从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;

解决方案 »

  1.   

    嗯,逻辑处理怎么弄呀,设置主键的方法试过了,但是出现一个问题,如果excel表格中间只有一个编号(主键)和ACCESS中的重复的法,会导致后边所有的包括不重复的都不能导入,再等高手
      

  2.   

    那再给你一个办法,先导入数据到一个临时表,比如A表,然后删除这张表里与你目的表重复的数据,再将剩下的数据插入到你的目的表,就OK了
      

  3.   


    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;
      

  4.   

    而且你最好用while not eof()
      

  5.   

    6楼的那种逻辑判断方法是不可取的,除非你是单机程序。一般必须通过SQL语句直接从数据库中进行判断,这样才能保证逻辑的正确性。否则你内存中的拷贝,可能数据库中早就被人修改成另外一个值了。
      

  6.   

    ACCESS 支持两个数据库连接。 可以在sql语句里直接判断。让数据库直接判断执行。这种方法就免得在程序里做判断了。
      

  7.   


    在程序里做判断,由于插入会时时导致数据库与程序查询结果不同,所以要求
    时时刷新查询结果。
    类似你这种插入要先将所有数据保存到数据库临时表TMP中
    然后INSERT INTO 表1 FROM TMP
      WHERE TMP.编号 NOT IN() 之类的插入到实际表中
    重复机制处理在临时表,在实时表上不能对数据进行加工