下面SQL语句:
  ADOQuery2.Close;
  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Add('select * from INFO_JianCeDian where Id in(');
  ADOQuery2.SQL.Add('select max(Id) from INFO_JianCeDian where Name=:pNo)');
  ADOQuery2.Parameters.ParamByName('pNo').Value :='';
  ADOQuery2.Open;
如果ADOQuery2.Parameters.ParamByName('pNo').Value 值为'',则Open之后会报错:
不能比较或排序 text、ntext 和 image 数据类型,除非使用 IS NULL 或 LIKE 运算符
但是如果参数值不为''则不报错。
如果不用参数直接写也不报错,如下:
ADOQuery2.Close;
  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Add('select * from INFO_JianCeDian where Id in(');
  ADOQuery2.SQL.Add('select max(Id) from INFO_JianCeDian where Name=''''');
  ADOQuery2.Parameters.ParamByName('pNo').Value :='';
  ADOQuery2.Open;
如果用BDE也没有错,不知是什么原因???

解决方案 »

  1.   

    ADOQuery2.Parameters.ParamByName('pNo').Value :='';
    改为
    ADOQuery2.Parameters.ParamByName('pNo').AsString :='';
    试试
      

  2.   

    cosmart(CoolSmart):
    ADOQuery2.Parameters.ParamByName('pNo').AsString没有这种类型
    Name是字符型
      

  3.   

    我知道产生的原因了,是ADO自身处理的问题:
    你用SQL跟踪一下有下列语句:
    declare @P1 int
    set @P1=0
    declare @P2 int
    set @P2=102401
    declare @P3 int
    set @P3=311300
    declare @P4 int
    set @P4=0
    exec sp_cursoropen @P1 output, N'select * from INFO_JianCeDian where Id in(
    select max(Id) from INFO_JianCeDian where Name=@P1 and Id=@P2)
    ', @P2 output, @P3 output, @P4 output, N'@P1 text,@P2 smallint', '', 2
    select @P1, @P2, @P3, @P4
    如为空,把参数一变为Text类型,Text类型是不能比较的!
    大家可以一起讨论一下