我最近才发现:
比如 TadoDateSet 类型对象 adodsQuery
adodsQuery.Recordset.Fields[i].Value;
当数据库中某个字段为Null时候,回出现这个错误:canvert not convet variant of type (null) into type (String)
....
而且我用adodsQuery.Fields[i].AsString测试时候遇到某个字段为Null时候,不会爆错,
但是我用adodsQuery.Fields[i].Value测试时候遇到某个字段为Null时候,就依然回爆出上面的错误........
请问大家怎么个事情..
如果知道的话交下小弟解决方法.......
谢谢了

解决方案 »

  1.   

    1楼的方法,或者
    select isnull(字段名,'') as ... from ...
      

  2.   

    要么在select的时候就把null处理掉,用2楼的
    要么在程序中做判断adodsQuery.Fields[i].IsNull
      

  3.   

    用ASSTRING不要用VALUE这中VARIANT,如果是必须的话. varisStr 先判断下.
      

  4.   

    换成adodsQuery.Recordset.Fields[i].AsString;
      

  5.   

    实际上我开始也是采用你的方法,但是adodsQuery.Recordset.Fields[i]却没有AsString属性......非常感谢各位的帮助..........
    最后我决定采取二楼的方法........
      

  6.   

    starluck,你好!   你说的这个我不太清楚,如果有空的话请说清楚些,下次接触这方面的就不会陌生了.....
      

  7.   

    rainlovesea,你好,其实你说的那种方法编译时候通不过
      

  8.   


    我想问下
    因为我获取的字段比较多,所以我想用个选择判断,如果获取的为Null,那么就用空来代替,
    如果换个判断语句来if adodsQuery.Recordset.Fields[i].Value<>null then
                    begin  .................
                    end;
    我想问下这个null和nil有什么具体的区别没?
    我一般是对一个对象Free之后就给这个对象赋值为nil,
    但是null我在Delphi中很少用,不知道跟nil有什么区别,,
    殷切期望各位的指点和帮助
      

  9.   

    rainlovesea,你好,其实你说的那种方法编译时候通不过
      

  10.   

    function VarToStrDef(const V: Variant; const ADefault: string): string;
      

  11.   


    我只是引用上边的
    也遇到这种问题过,只是把filedbyname('d').value
                     换成filedbyname('d).asstring 
      

  12.   

    同志们,你们要注意一个问题,adodsQuery.Recordset.Fields[i]是没有AsString属性的,别老是往这方面想,其实我一开始也是这么修改的,不过编译器都欺骗不了