请大家帮忙看看菜鸟问题
if (Adoquery1.fieldbyname('费用A').AsFloat + Adoquery1.fieldbyname('费用B').AsFloat>=100) and (Adoquery1.fieldbyname('说明').AsString='' or Adoquery1.fieldbyname('说明').AsString=nil) then
...运行出错:operator not applicable to this operand type
请问这是为什么?是Adoquery1.fieldbyname('说明').AsString=nil写错了吗?另外想问一下,欲判断“说明”字段中没有内容,应该用“是否为空”和“是否为null”来一起判断才不会漏数据吧
Adoquery1.fieldbyname('说明').AsString='' or Adoquery1.fieldbyname('说明').AsString=nil

解决方案 »

  1.   

    Adoquery1.fieldbyname('说明').IsNull
      

  2.   

    去掉or Adoquery1.fieldbyname('说明').AsString=nil
      

  3.   

    if (Adoquery1.fieldbyname('费用A').AsFloat + Adoquery1.fieldbyname('费用B').AsFloat>=100) and ((Adoquery1.fieldbyname('说明').AsString='') or (Adoquery1.fieldbyname('说明').AsString=null)) then 
      

  4.   


    Adoquery1.fieldbyname('说明').AsString='' or Adoquery1.fieldbyname('说明').isNull
      

  5.   

    Incompatible types:'String' and 'Boolean'
      

  6.   

    这样岂不是漏掉了null值的数据?
      

  7.   


    你的Adoquery1.fieldbyname('说明').AsString=''就包含了字段为null的情况
      

  8.   

    if (Adoquery1.fieldbyname('费用A').AsFloat + Adoquery1.fieldbyname('费用B').AsFloat>=100) and ((Adoquery1.fieldbyname('说明').AsString='') or (Adoquery1.fieldbyname('说明').AsString.Isnull)) then
    这个解决了
      

  9.   

    if (Adoquery1.fieldbyname('费用A').AsFloat + Adoquery1.fieldbyname('费用B').AsFloat>=100) and ((Adoquery1.fieldbyname('说明').AsString='') or (Adoquery1.fieldbyname('说明').AsString=null)) then试下吧。。加个括号应该就好了。。
      

  10.   


    一个字段在默认没有数据的时候,不是null值吗,说明=''和说明.isnull是两回事吧?
      

  11.   

    null值和''值是两回事来的~~Adoquery1.fieldbyname('说明').Isnull来判断是否为null
      

  12.   

    如果Adoquery1.fieldbyname('说明').AsString.Isnull成立
    那Adoquery1.fieldbyname('说明').AsString=''也肯定成立
    所以你用个or是浪费
      

  13.   

    := nil这个铁定报告错误的
    使用.isNUll
      

  14.   

    如果是null值,Adoquery1.fieldbyname('说明').AsString会出错的吧?
      

  15.   

    .AsString是不会出错的,你自己试试不就知道了?
      

  16.   

    这个是不会出错的:Adoquery1.fieldbyname('说明').AsString='' or Adoquery1.fieldbyname('说明').IsNull原因说明:1、如果'说明'字段为空(NULL),则AsString后转化为'',如果'说明'字段不为空,则.IsNull就不起作用了。
      

  17.   

    OH~~我记错了..如果是asFloat之类数值型的才会出错~
      

  18.   

    delphi 中NULL   是字符串为空   NIL    是指针为空   Adoquery1.fieldbyname('说明').AsString 为字符串类型=nil(指针) 这样就很容易理解你的错误了
      

  19.   


    不一样,''是一个空字符串null是什么都没有Adoquery1.fieldbyname('说明').isNull的时候Adoquery1.fieldbyname('说明').AsString的值为'',但是这个是ADO隐形转换后的结果,
    同样
    Adoquery1.fieldbyname('说明').isNull的时候Adoquery1.fieldbyname('说明').AsInteger=0
      

  20.   

    Adoquery1.fieldbyname('说明').AsString=nil
    这个去掉就行了,为空的话会读出''的
      

  21.   

    ''和NULL是两个概念,只是用AsString时''和NULL得到的结果都是''
      

  22.   

    如果用查询语句的话是要这样写的,field='' or Field is null
      

  23.   


    ''和null的问题搞清楚了。
    请教jiap1723,能举个最简单典型的nil的例子吗?