VB在vb函数中使用ADO Recordset,检查是否为null

时间:2011-08-11 15:45:25

标签: function vba

我有一些令我困惑的奇怪行为。我在vb(Microsoft Word Macro版本的VB)中创建了一个函数,如下所示:

Public Function isitnullorempty(newstring As String) As Boolean
    If IsNull(newstring) Or IsEmpty(newstring) Or newstring = "" Then
        isitnullorempty = False
    Else
        isitnullorempty = True
    End If
End Function

如果我创建一个变量然后将其设置为null,“”或将其保留为空,它似乎按预期工作。我操纵变量,然后做MSGBOX isitnullorempty(变量),它回应我的期望。但是当我将一个记录集放在函数中时,它的行为方式并不相同。我甚至试图将变量设置为记录集,然后测试它,但这也不起作用。如果我尝试调用以下

'ADO query code here (This is an ODBC connection)
DO While (Not oRecordset.EOF)
    MsgBox isitnullorempty(oRecordset.Fields("CustomerTypeRefFullName"))

    oRecordset.MoveNext
Loop

这会产生错误:Null的使用无效。

所以两个问题。

是否已存在符合我想要的vb功能? 为什么我的代码表现如此?

更奇怪的是,如果我在功能之外单独进行测试,它就可以工作。

临时解决方案

它编写的代码超出了它的需要,但由于我似乎无法使用记录集值调用该函数,因此我将根据我的需要单独检查每条记录,如下所示:

 If IsNull(oRecordset.Fields("CustomerTypeRefFullName").Value) Or IsEmpty(oRecordset.Fields("CustomerTypeRefFullName").Value) Or oRecordset.Fields("CustomerTypeRefFullName").Value = "" Then
    MsgBox "potato"
End If

2 个答案:

答案 0 :(得分:1)

在我看来,你的逻辑是错误的:

如果IsNull(newstring)或IsEmpty(newstring)或newstring =“” 然后
    isitnullorempty = 错误
否则
     isitnullorempty = True
结束如果

不应该是

如果IsNull(newstring)或IsEmpty(newstring)或newstring =“” 然后

isitnullorempty = TRUE

否则

isitnullorempty = FALSE

结束如果

答案 1 :(得分:0)

答案是,如果要将null传递给函数的参数,则需要将参数设置为variant。      Public Function isitnullorempty(newstring As Variant)As Boolean