if ADOQuery2.Active then ADOQuery2.Close;
ADOQuery2.SQL.text := 'select * from 表 where 字段1=''' + 
        str1 + ''' and 字段2=''' + str2 + '''');
        ADOQuery2.open;
        if ADOQuery2.RecordCount = 0 then
            begin              
                    ADOQuery2.Insert;
                    ADOQuery2.fieldbyname('字段1').AsString := str1;
                    ADOQuery2.fieldbyname('字段2').AsString := str2;
                    ADOQuery2.fieldbyname('字段3').AsString := str3;
                    ADOQuery2.Post;                    
                  end;
            end;

解决方案 »

  1.   

    你的'select * from 表 where 字段1="' + str1 + '" and 字段2="' + str2 + '"');
    中的str1和str2相同吗?如果记录中确实有相同的你并没有判断recordcound的数量呀,
    if adoquery12.recordcound=0 then insert;
     else empty adoquery2(这样是不行的,你得自己再改动一下)
      

  2.   

    你的语句好像没有毛病吧,我改了一下可能空格的错
    begin
    //一条记录存数据库
            if ADOQuery2.Active then ADOQuery2.Close;
            ADOQuery2.SQL.Clear;        
            ADOQuery2.SQL.Add('select * from 表 where 字段1="' + trim(str1) + '" and 字段2="' + trim(str2) + '"');
            ADOQuery2.open;
            if ADOQuery2.Eof and ADOQuery2.bof then
                begin              
                        ADOQuery2.Insert;
                        ADOQuery2.fieldbyname('字段1').AsString := str1;
                        ADOQuery2.fieldbyname('字段2').AsString := str2;
                        ADOQuery2.fieldbyname('字段3').AsString := str3;
                        ADOQuery2.Post;                    
                      end;
                end;
    end;
      

  3.   

    不是空格的毛病
    我用过trim了
    还是有重复