Access我遇到了个奇怪的模糊查询问题,所以不得以求教高手
ado连接access里类似这样的语句
sSql := 'select * from addr where AddrId like ''*'+edAddrId.Text+'*''';
然后我假定传值 edAddrId.Text='D'
所以sSql 就为:select * from addr where AddrId like '*D*'
在用delphi运行的时候没有一条记录返回,
用IsEmpty测试表示确实是没有检索到记录,
但是直接在access里面运行该sql的时候会查到六条记录
------------------
这不是我第一次遇到,上次在另一条like 语句时候也是这样的情况
求教:为什么及怎么解决,时间比较急,所以请大家多热心点帮忙,谢谢

解决方案 »

  1.   


    sSql := 'select * from addr where AddrId like '+QuotedStr('%'+edAddrId.Text+'%'); 
      

  2.   

    sSql := 'select * from addr where AddrId like ''%'+edAddrId.Text+'%''';*:代表一个字符
    %:代表多个任意字符 
      

  3.   

    你sql语句写错了。
    * 和 %的关系
      

  4.   

    应该是Acess的版本与数据访问引擎版本不一致引起的,这个没关系,你可以用 "%" 代替你的“*”应该就可以了。
      

  5.   

    请注意,我说的是access,我测试过在access里直接运行sql: SELECT * FROM addr WHERE AddrId like '%D%',结果为:一条记录都没找到这是Access Help
    pattern 中的字符       expression 中的匹配项 
    ? 或 _(下划线)          任何单个字符 
    * 或 %                零个或多个字符 
    #                       任何单个数字(0 — 9) 
    [charlist]           在 charlist 中的任何单个字符。 
    [!charlist]          不在 charlist 中的任何单个字符。 请注意,ANSI SQL 通配符 (%) 和 (_) 仅在 Microsoft® Jet 4.X 版本和 Microsoft OLE DB Provider for Jet 中才是有效的。如果用在 Microsoft Access 或 DAO 中,那么它们被视为文本。
    希望能够有高手解答
      

  6.   

    在access环境中,只能用*,但是放到delphi环境中,用ado就要用%
      

  7.   

    sSql := 'select * from addr where AddrId like ''%'+edAddrId.Text+'%''';