Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 如何检查VBA DAO记录集中的null?_Ms Access_Null_Vba_Dao - Fatal编程技术网

Ms access 如何检查VBA DAO记录集中的null?

Ms access 如何检查VBA DAO记录集中的null?,ms-access,null,vba,dao,Ms Access,Null,Vba,Dao,我在数据库中有一个可选字段,我正在使用DAO记录集提取该字段。我需要先检查该字段是否已设置,然后再将其与其他字段连接起来。到目前为止,我已经用Is和=尝试了以下代码片段(这显然是错误的语法[[Is |=]]),但没有用。如果我使用=它将无法正确地与Null进行比较,如果我使用Is它会抱怨它没有与对象进行比较 While Not rs.EOF If rs.Fields("MiddleInitial") [[Is | =]] Null Then thisMiddleInitial = ""

我在数据库中有一个可选字段,我正在使用DAO记录集提取该字段。我需要先检查该字段是否已设置,然后再将其与其他字段连接起来。到目前为止,我已经用
Is
=
尝试了以下代码片段(这显然是错误的语法
[[Is |=]]
),但没有用。如果我使用
=
它将无法正确地与
Null
进行比较,如果我使用
Is
它会抱怨它没有与对象进行比较

While Not rs.EOF
    If rs.Fields("MiddleInitial") [[Is | =]] Null Then thisMiddleInitial = "" Else thisMiddleInitial = rs.Fields("MiddleInitial")
    If prettyName(myLastName, myFirstName, myMiddleInitial) = prettyName(rs.Fields("LastName"), rs.Fields("FirstName"), thisMiddleInitial) Then
        MsgBox "Yay!"
    End If
    rs.MoveNext
Wend
如果有更简单的方法,我完全愿意。prettyName接受3个字符串作为参数,最初我只是试图直接传递rs.Fields(“MiddleName”),但它抛出了一个空值。我想做一些更直接的事情,但这是我能想到的最好的办法。

怎么样:

IsNull(rs.Fields("MiddleInitial").Value)

您还可以查看其中关于Access VBA应用程序中的空值的一些解释以及如何处理这些值。

对于您展示的示例,Nz将起到以下作用:

    thisMiddleInitial = Nz(rs!MiddleInitial,"")
或者简单地将字符串与空字符串连接:

    thisMiddleInitial = rs!MiddleInitial & ""

在我看来,Remou已经回答了您的问题,但我突然想到,您可能只是试图获得名称字段的正确连接。在这种情况下,可以在VBA中使用Mid()和Null传播来获得结果

我不使用单独的中间初始字段,因此我通常的名称串联公式是:

Mid(("12" + LastName) & (", " + FirstName), 3)
如果LastName不为Null,则开始处的“12”字符串将被丢弃,如果为Null则被忽略,因为+串联运算符传播Null

要将其扩展到包括中间初始值,请如下所示:

Mid(("12" + LastName) & (", " + FirstName) & (" " + MiddleInitial), 3)
假设您的UDF没有对昵称/缩写等进行某种复杂的清理,在我看来,这可能会完全取代它。

如果rst.Fields(“MiddleInitial”).Value=“Null”那么


这对我有用。我使用MS SQL数据库

我认为NoMatch选项可能适用于这种情况:


如果rs.NoMatch=True,则

我更喜欢使用下面的公式来解释空字符串值和空字符串值。使用表单收集用户的值是一个很好的检查

If Trim(rs.Fields("MiddleInitial") & "") = "" then

聪明的把戏,但依我看,依赖+和&运算符之间这一相当模糊的差异是有风险的。如果有人稍后返回并试图清理代码,为了一致性,他们可能会决定将所有+替换为&,反之亦然,在没有意识到它会改变行为的情况下,我并不太担心有人不了解Jet SQL的连接运算符的基础知识会把事情搞砸。因为他们不了解UDF是如何工作的,所以他们很容易搞乱为相同目的创建的UDF。