例如:dim a as string
...   '从配置文件中取一个参数
if ... then     '如果参数不存在
   a = ......   ' ??? 这里如何给A赋一个类似Java或C++中的NULL值
else if ...     '存在但没有具体的值
   a = ""       '用空字符串
else            '存在有具体的值
   a = ....
end if....            '这里根据a的值来判断参数,要能够根据a中的内容区分上述三种情况,但我不知道如何处理没有和有但为空这二种情况,那位高手可以帮助一下,多多感谢 !

解决方案 »

  1.   

    dim a
    dim b as string
    dim c as integer
    dim d as object未付值时,a=empty,b="",c=0,d=nothing
      

  2.   

    isnull(x)来判断是否为空
    含有null运算式,没有输入数据的数据库字段会等于null
      

  3.   

    VB中的字符串是没有null的,没有赋值就是"",用isnull好像也判断不出来。但为了和其他语言做接口,vb提供了一个常数,叫做vbNull,有时使用API的时候会经常用这个常数来进行参数的调用,代表没有字符串。
      

  4.   

    to AresChen
    但是用vbNull也不行,因为我试了一下,vbNull实际上就是"1",如果参数值真的是"1"的话,给a赋完值后,无法根据a的值来判断是没有参数还是参数值真的为"1"还有什么其它好办法吗?
    to 大家
    谢谢大家!
      

  5.   

    判断是否是NULL.
    IF ISNULL(A) THEN
       ...........
    ELSE
        .........
    END IF判断是否是""
    IF LEN(A)=0 THEN
       ................
    ELSE
       ...............
    END IF判断是NULL OR ""
    IF LEN(A & "")=0 THEN
       .................
    ELSE
       ................
    END IF
      

  6.   

    另:
    如果A定义为字符串,不能将NULL赋给A.A必须定义为Variant.
      

  7.   

    仔细看了你需求,如果是单纯的字符串是无法描述3种状态的,因为VB中的字符串没有null这个状态。提供一个思路给你,看看你能不能改代码实现,就是如果你三个判断都需要调用同一个函数,那么这个函数可以这么写:
    function doSomething(optional byval Arg as Variant) as ....
     if ismissing(Arg) then '代表null
     elseif Arg="" then '为空
     else
     end if
    end function
    即,以Variant代替String类型,同时设置这个参数为optional,这样函数内就可以区分三种情况。我不知道这种做法是否适合你的程序,你自琢磨琢磨吧。
      

  8.   

    对于vb中字符串无法区分NULL和为""的情况
      

  9.   

    在VB中是可以判断NULL和""的情况的.
    因为,我们知道,除""以外的任何变量一旦与NULL&运算,最后结果也是空.而与""进行&运算的结果将是变量本身.且看结果.
    ? ISNULL(NULL & "1")
    True
    ? isnull(null)
    True
    ? ISNULL("" & "1")
    False
    ? ISNULL("")
    False
    我们就可以利用该特点进行""和NULL的判断.判断语句你自己写吧.*注:有些初学者可能搞不清NULL,""," "之间的差别,打个比喻吧.NULL是真空,""是空气," "是水(我的计算机老师语).
      

  10.   

    还有一个函数,常用于数据库返回的值的判断if vartype(***)=vbnull thenend即可判断返回的值是什么你可以直接获取vartype(***),根据返回值判定
      

  11.   

    To MSTOP(CJH) :
    不对啊,我测试? ISNULL(NULL & "1")为false啊,并且直接打印? null & "1",得到结果是"1"啊。并且我试了vb中自定义的几个产量vbNull、vbNullChar和vbNullString,直接使用isnull(vbNullString)等得到的结果都是false,不过我发现楼主的需求可以通过下面这种方法:
    dim s as variants=Null
    msgbox isnull(s)
    这个时候返回的是true。
      

  12.   

    关于Null值与空串"",不妨这样定义。
    由于我们在处理字符串的时候,极少使用chr(0)或者是vbNullChar,当遇到空串的时候,是否可以给它们赋一个vbNullChar?这时的串,看上去像是空格,但是却不是空格,也和""不同。
    另:不要使用vbNullString代替vbNullChar,在vb程序中,vbNullString与""是无法区别的。
      

  13.   

    If StrPtr(StrName)=0 then
        'vbNullString
    Else Len(StrName)=0 then
        '普通空串""
    else
        '有数据
    End if
      

  14.   

    vbNullChar=chr(0)VB不是C/C++
    Chr(0)不是字符串结尾符
      

  15.   

    to  AresChen(AresChen)
    To MSTOP(CJH) :
    不对啊,我测试? ISNULL(NULL & "1")为false啊,并且直接打印? null & "1",得到结果是"1"啊。并且我试了vb中自定义的几个产量vbNull、vbNullChar和vbNullString,直接使用isnull(vbNullString)等得到的结果都是false,不过我发现楼主的需求可以通过下面这种方法:
    dim s as variants=Null
    msgbox isnull(s)
    这个时候返回的是true。
    -----------------------------------------
    老大,不会吧?下面的结果是我在调试窗口里直接COPY过来的啊!(我试了3次).
    ? ISNULL(NULL & "1")
    True
    ? isnull(null)
    True
    ? ISNULL("" & "1")
    False
    ? ISNULL("")
    False为什么会这样?
      

  16.   

    用Vartype函数进行判断如果Vartype(变量)=vbNull,那就是Null值,如果不是,那么自己去判断是否为空值了。
      

  17.   

    to MSTOP:
    不明白了。说句实话,我以前根本都不知道vb中有NULL这个关键字,所以我看了你的回复之后觉得很新鲜,特意在一个有VB的机子上试了一下,结果和你的结果不一样。
    怀疑也可能是VB的bug吧,我测试的机子环境是xp sp1,vb6英文版且没有补丁。
    不过计算是bug的原因,也只能说明微软后来更改了对null的操作,因为一个东西加上“什么都没有”的结果,你说还是“什么都没有”也对、说就是原先的那个东西也对,这个好像怎么说都行。所以我还是建议用variant等方式,这样至少安全一些。
      

  18.   

    你可以用isnull,也可以用len()来判断是否为空值