在BDE中使用过滤是可以使用通配符的,但是在ADO中使用*却没有什么响应?请问是否在ADO的过滤中没有通配符?如果有,如何使用?谢谢!在线等待

解决方案 »

  1.   

    with adoquery1 do
    begin
      active:=false;
      sql.clear;
      sql.add('select * from table where field='+''''+'%'+edit1.text+'%'+'''');
      active:=tRUE;
    end;Filter:='field'+''''+'%'+edit1.text+'%'+'''';
      

  2.   

    谢谢您,我不知道行不行,您的意思是这里的通配符是%,而不是bde中的%
      

  3.   

    忘了提示您,采用重新检索的方式在我的应用中不可行,因为这会造成网路繁忙,速度比较慢,所以采用第二种方式,而且ado是客户端缓存过滤,所以速度比较快。
      

  4.   

    with adoquery1 do
    begin
      active:=false;
      sql.clear;
      sql.add('SELECT * FROM table WHERE field LIKE '+''''+'%'+edit1.text+'%'+'''');
      active:=tRUE;
    end;
    用这样多滤。
      

  5.   

    两位仁兄,你说的用select 的那种方式,速度太慢了。
    所以我想采用的可能性比较小,如果采用filter的方式应该速度比较快,但是我不知道通配符是什么?希望那位告知,另外My_first(小@_@小) ,您所说的那种通配符也不行,我刚才试验了一下,不知道为什么?(%作为通配符的那种)
      

  6.   

    adoquery1.Recordset.Find('字段 like *aa*',0,adSearchForward,mybook);
    mybook是书签
      

  7.   

    filter的方式应该速度比较快,不是这样子的。 如果你熟悉sql语句是怎样执行的。那你就应该知道。
    最快的应该算是存储过程.
    通过Filter输入的过滤字符串,最终还是要解析成sql server
    一般SQL语句处理的步骤 
    SQL Server首先对该sql语句进行预编译     建立一个规范化的查询树。
    查询优化和在高速缓存中建立查询计划。你可以通过查询分析器看看。最终还是连成了字符。 当数据很大,最好是先过滤再取数据。
      

  8.   

    My_first(小@_@小) 您好,Filter是要解析成sql来执行,但是它是建立在缓存级上的,所以速度当然比较快。而您所说的存储过程,如果他返回的是一个表,那么它的优越性就没有了
      

  9.   

    filter := 'name like ''123*'''