为了避免向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;

解决方案 »

  1.   

    adoquery1.FieldByName('编号').asstring
      

  2.   

    试试adoquery1.FieldByName('编号').asstring=adoquery2.FieldByName('编号').asstring
      

  3.   

    不行,你快回帖,不然我不能连三你的思路本来就有问题的根本不能对上的,呵呵~~ 可以试用stringlist或集合来存储ADOQUERY2的编号集.然后就看ADOQUERY1的编号是否IN STRINGLIST或集合来判断是否插入
      

  4.   

    哪用这么麻烦?adoquery1.sql.add('select 编号 from sp where 编号=:BH') ; 给 BH 给值就行了
    这样 DataSet.RecordCount 就是 f 值了
      

  5.   

              adoquery1.close; 
              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;
      

  6.   


    我汗,你按阿三的做,是每个都要做判断,一个记录做一次判断,你不觉麻烦吗?
    而按我的那个,只要执行一句SQL语句就OK,根本不用管是否重复,
    唉~~ 等你以后的SQL知识多了,就知道了.
      

  7.   

    dinoalex 不要生气,我不是说你的办法不好,也不是说的这个问题,不好意思