我有一个表ORDER结构如下:
ID              ROOMNAME  TABLEID  STATUSID
PH20041226001   北京房    101       0 
PH20041226088   北京房    101       1 我想达的的目的是这样的:
判断ORDER表里的是否存在如下条件的记录,如果有就把ID取出赋给一个变量S
ROOMNAME=北京房
TABLEID=101
STATUSID=0      我的语名是这样:
北京房值用ROOMN
101值用TABLEN
adotable3.Locate('roomname;tableid;statusid',vararrayof([roomn,tablen,0])[]) then
    s:=adotable3.FieldByName('id').AsString
    else
      .
      .
      .
但明知道库里有记录符合条件了,程序总是执行ELSE下面的语句,是不是我的LOCATE语句出了问题,还是因为有空格的情况呢?我在取值时已经加上TRIM了

解决方案 »

  1.   

    Locate查询之前必须要建立索引, 
    既然用ADO,为什么不用SQL语句和ADOQuery来解决呢,那样开销要小得多,Select id From [order] Where RoomName = '北京房' and 后面的条件自己写
      

  2.   

    为什么要用LOCATE??
    如果有个10W.100W的数据..不是要搞死人??
      

  3.   

    我通常的做法时写成一个select语句然后看记录集的count属性为0测没有符合的条件的一个有点笨的方法!
      

  4.   

    你的else后面有没有begin与end
    else 
      a:=1;
     b :=1; 
    不管你locate是否为true都执行b:=1,如果加上
    else 
    begin
      a:=1; //不执行
      b:=1; //不执行
    end ;
      

  5.   

    我搞定了,我是这样解决问题的:
    adotable3.close;
    adotable3.open;
    adotable3.first;
    ADOtable3.Locate('roomname;tableid;statusid',vararrayof([roomn,tablen,0])[]) then
        s:=adotable3.FieldByName('id').AsString
        else
          .locate不会回转查询,从头查到尾吗?