我用dbExpress中的SimpleDataSet组件,其中的dataset中的commandtext为‘select * from hyjbxx where gkxm like :m_gkxm’其中参数:m_gkxm为ftString类型,并且定义初试值为%.按理说这个Dataset初始应该是全部记录都显示出来,可是初始的时候一条记录也没有,如果这个m_gkxm:='%%%%'
那么姓名是2个字的记录就出来了,如果:='%%%%%%'
那么姓名是3个字的记录就出来了,
在查询分析器里一切正常,'%'匹配的是所有记录参数已经初始化了,在设置DATASET的属性的时候就把参数的初始值设定为  ftString '%'后台数据库为MSSqlServer2000偶一次只能送100分,不够可另开贴加

解决方案 »

  1.   

    哪个引号?我在vfp里面都是这样用的啊,没问题
      

  2.   

    我也觉得可能是引号问题,你试试m_gkxm:='''%%%%''' 看可以不可以
      

  3.   

    你也可用* 试试看吗. 要么用?号
    有时候我在ACCESS里也有这种事儿出来.
      

  4.   

    我测试了一下 这样可以
    adoquery1.SQL.clear;
    adoquery1.SQL.Add('select count(*) from cz常住人口表 where c21 like :c');
    adoquery1.Parameters.ParamByName('c').Value:='%%';
    adoquery1.Open;
      

  5.   

    初试值为%.按理说这个Dataset初始应该是全部记录都显示出来,可是初始的时候一条记录也没有你的字段值是中文的,每个汉字占两个字节
    而%只能替代一个字节,所以显示不出来试试用%%代替任何一个汉字,应该可以
    adoquery1.Parameters.ParamByName('c').Value:='%%';
      

  6.   

    感谢大家的回帖!to dahua(大华) 、 Z9J8(代码猪) 、 cxreal(转身离开的是你)我试了,但是还是不行:(  to  lxhong1980(娶个善善良良的妻子,养个聪聪明明的孩子)
    确实是%匹配1个字符,%%匹配一个汉字但是%%%就能匹配2个汉字,效果和%%%%是一样的另外在sqlserver里面'%'即可匹配所有字符啊,为什么在delphi里就不行了呢?这个变量的值难道不是传到服务器端再执行吗?继续迷惑ing
      

  7.   

    是不是单引号的,把你的换出来不成了
    select * from hyjbxx where gkxm like %是不是要这样
    select * from hyjbxx where gkxm like '%'
      

  8.   

    'select * from KHB where KHMC like'+ #39+'%'+#39;
    这样写
    可以的
      

  9.   

    我试过了,xxxx.CommandText:='select * from hyjbxx where gkxm like '+ #39+'%'+trim(edit2.Text)+'%'+#39
    这样是可以的,可是为什么参数赋值的时候就不行呢?如果参数m_gkxm:='%'+trim(edit2.Text)+'%'则就出现我开始说的情况
    如果edit2.text中的值是‘王’的话,那么只能查询出姓王,并且名是一个字的记录来如果参数m_gkxm=#39+'%'+trim(edit2.Text)+'%'+#39
    这样则什么记录也查询不出来,:(
      

  10.   

    用参数
    with AdoQuery1 do
    begin
      Close;
      SQL.clear:
      SQL.Add('select * from hyjbxx where gkxm like :m_gkxm');
      Parameters[0].Value:='%'+Edit2.Text+'%';
      Open;
    end;搞定!
      

  11.   

    Cds_1.Close;
        Cds_1.CommandText:='select * from KHB where KHMC like :KHMC';
        Cds_1.Params.ParamByName('KHMC').Value:='%'+Trim(Edt_S.Text)+'%';
        Cds_1.Open;
      

  12.   

    我用的Interbase ,和你的写法类似,也没问题。
    但是发现,如果用‘’就不能查出来空集。
      

  13.   

    我是想查询一个日志
    %表示全部用户,
    ''就是那些登录名称错误的,日志不纪录无效的用户名称,所以无效的登录日志中用户名是空。我用IB Console 用''能筛选到,但是在DBX里面就不行。
    不知道为啥。
      

  14.   

    在SQLSERVER中,like 语句就是 like '%',一个就能代表所有的,在%后前后最好去掉空格,我觉得可能是空格引起的吧!在中文的时候,有空格会出现乱码,你就查处出来了
      

  15.   

    如果直接写没有问题,建议你用format转换后付值
    比如:sql.add(format('select * from Id like ''%s'' ',['%']));
    因为可能是delphi编译的问题
      

  16.   

    我一直都是用的SQL SERVER 2000
      

  17.   

    我一直都是用的SQL SERVER 2000,并没有你这样的问题,%本来就是匹配所有字符。
    用以下两种方法都可以。with qryCX  do
      begin
        if Active then Close;
        SQL.Clear;
        SQL.ADD('Select * from WL');
        SQL.ADD('where WL_MC like ''%'+edit1.text+'%'' ');
        Open;
      end;或者
      with qryCX  do
      begin
        if Active then Close;
        SQL.Clear;
        SQL.ADD('Select * from WL');
        SQL.ADD('where WL_MC like :pMC ');
        ParamByName('pMC').AsString := '%'+edit1.text+'%';
        Open;
      end;