各位好!
我用adoquery编模糊查询时,检索事件总出这个错:参数'xm'没有默认值
请问,这个错误怎么解决啊?我总查不出来
涉及代码为:
var
  xm,sqlstr:string;
begin
  xm:=Trim(xm_ledit.Text);
  //无名称输入,检索所有数据
  if length(xm)<1 then
  begin
    sqlstr:='Select cno as 课程编号,cname as 课程名称,sort as 课程类别,content as 描述 from c_info';
    adoQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add(sqlstr);
    ADOQuery1.Open;
  end
  //有名称输入,模糊查询
  else
  begin
    adoQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select * from c_info');
    adoquery1.SQL.Add(' where xm like ''%'+xm+'%''');
    ADOQuery1.Open;    //单步运行到这蹦出错的
  end;
end;
没有输入的时候,可以显示所有字段,只要输入字段,比如课程号:1,就出现那个错了;而且有一个奇怪的问题,就是:
我课程信息表里的“描述”content字段,字段类型是备注,本来是有记录的,可是检索出来,里面没有记录,只标注着(memo),这怎么才能显示里面的信息呀??这两个问题请大家指点!谢谢!

解决方案 »

  1.   

    adoquery1.SQL.Add(' where xm like ''%'+xm+'%''');杩欏彞搴旇涓嶅锛屼綘鏈塜M杩欎釜瀛楁鍚楋紵
    浣犳兂瑕佺敤XM鐨勫€硷細
    adoquery1.SQL.Add(' where :xm like ''%'+xm+'%''');
    adoquery1.Parameters.ParamByName('XM').Value := XM;
      

  2.   

    adoquery1.SQL.Add(' where :xm like ''%'+xm+'%''');
    adoquery1.Parameters.ParamByName('XM').Value := XM;
      

  3.   

    只要输入字段,比如课程号:1,就出现那个错了;
    这里,你不应该输入 ':1'前面带有引号的字符串
    不然
    adoquery1.SQL.Add(' where xm like ''%'+xm+'%''');
    这一句后传出来的是where xm like '%:1%'
    ADOQuery如果发现里面有 :开头的,就会把他当成参数问问,为什么要输入 :1呢?
      

  4.   

    回复睡到自然醒:我输入的是1 哈!我只是说输的是一个课程号,嘿嘿!首先谢谢大家的指点!
    可是我改成:adoquery1.SQL.Add(' where :xm like ''%'+xm+'%''');
                adoquery1.Parameters.ParamByName('XM').Value := XM; 
    还是不对呀?应该是输入课程号1就应该检索出1所对应的所有信息
    可是与没有输入的情况一样,检索出所有的字段,没有实现模糊查询!!这是怎么回事?谢谢!
      

  5.   

    adoquery1.SQL.Add(' where :xm like ''%'+xm+'%''');
    改成adoquery1.SQL.Add(' where :xm like'+ ''''+'%'+xm+'%'''');试试应该就可以了。
      

  6.   

    adoquery1.SQL.Add(' where :xm like'+ ''''+'%'+xm+'%'+'''');这样吧。上面的有点点问题。。
      

  7.   

    按你的提示看,应该是access的数据库,把%改成*吧看看,如果还是出这个问题,那你表里一定没有xm字段
      

  8.   

    回复wuqinyiu:还是一样...
    与没有输入的情况一样,检索出所有的字段,没有实现模糊查询........呀,抓狂了快!大家能告诉我这是为什么呀?