把这个参数[loCaseInsensitive]改成[](空)试试看

解决方案 »

  1.   

    去掉空格看看trim(dbeditx.text)
      

  2.   

    如果你的字段x,y,z在数据库中设为char而不是varchar,那么它们在数据库中的实际数据是“字符串”+一些空格。加空格的目的是保证总长度等于定义的char长度。可能是这个问题;另外也可能是大小写不一致。
    —————————————————————————————————
    MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
                 毁誉由人,望天上云卷云舒,聚散任风。';
    if Not Assigned(I) then
      I := TI.Create(Nil);
    I.Maxim := MaximStr;
    I.Desire := '加不加分随你';
    —————————————————————————————————
           
      

  3.   

    你是否将这三个字段设置为了主键,如果有,可以用try...except...方法添加记录,如果表中有相同记录,会弹出错误的
      

  4.   

    boby,在sql server 2000中只能把一个字段设置成主键。不能同时设置三个
      

  5.   

    好像是在插入状态下,执行LOCATE他会先把你的的纪录POST进去,然后再进行查找。造成的后果是,你肯定能查到该纪录。因为已经POST进去了
      

  6.   

    跟大小写和空格没有关系,我用EDIT控件代替DBEDIT试验过了。可以正确执行。
      

  7.   

    也就是因为dbedit 是dataaware的.
      

  8.   

    如果不愿意,你可以用SQL语句查找符合条件的记录,再判断ADOTABLE的recordcount,如果不是0就是已经有了!
    为了提高效率SQL语句可以这么写!select count(*) from table_name where tiaojian1=1 and tiaojian2=2....
      

  9.   

    那不是说还要用adoquery或者adodataset是控件才能执行select语句。是不是说adotable对此就无能为力呢?
      

  10.   

    解决啦!
    思路:在adotable.insert前,对表建立视图。这样视图中的记录就是没有插入新记录的记录集,对其进行查找即可。
    如下:(视图名view_cpkc,字段名如下d_cpkc.ckbm,d_cpkc.hth,d_cpkc.hh,d_cpkc.czdm)
    //判断数据库中是否已经存在该视图,如  果存在,drop掉
    Adoconnection1.Execute('IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = ''view_cpkc'') drop view view_cpkc');
    //对d_cpkc中几个关键字段库建立视图
    Adoconnection1.Execute('create view view_cpkc as select d_cpkc.ckbm,d_cpkc.hth,d_cpkc.hh,d_cpkc.czdm from d_cpkc');
    Adotable1.Insert;在进行post前查找视图中是否有将要添加的记录,既进行唯一性判断,如下:
    在adoquery的sql中加入如下语句:
    select count(*) from view_cpkc where ckbm=:ckbm AND hth=:hth AND hh=:hh AND czdm=:czdm//在button1(确定)加入如下语句,即可:
    with adoquery1 do begin
           close;
           Parameters.ParamByName('ckbm').Value:=ckbm.text;
           Parameters.ParamByName('hth').Value:=hth.text;
           Parameters.ParamByName('hh').Value:=hh.text;
           Parameters.ParamByName('czdm').Value:=czdm.text;
           open;
           count:=fields[0].value;
         end;
        if count>0 then
          begin
            showmessage('仓库中已有该货物,不能进行添加!');
            count:=0;
            abort;
          end
      

  11.   

    不要用AdoTable搜索,使用
    Adoquery1.sql:='select * from YouTable where x="'+dbeditx.text+'",y="'+dbedity.text+'",z="'+dbeditz.text+'"'
    Adoquery1.open;
    found := not Adoquery1.isEmpty;
    就OK了.
      

  12.   

    to gxyc826
    在插入状态下执行这些语句也没问题吗?
      

  13.   

    后来发现不用那么麻烦,直接在表中用两个adotable,都联结在同一个表上adotable1进入insert状态,在adotable1.post前locate adotable2的相关纪录。就可以了....hoho对了,问一句。sql的效率高,还是adotable.locate的效率高。