来自MySQL的VBA ADODB记录集字段为空 - 是否有一种检查或阻止“NULL”的简单方法?

时间:2018-05-09 08:10:35

标签: mysql vba excel-vba excel

我从MySQL服务器中提取了一个大记录集,并根据字段位置在Excel VBA例程中分配了一堆变量,例如:

x = MyRecordset.Fields(0).Value
y = MyRecordset.Fields(1).Value
' etc...

这次抛出错误的唯一时间是其中一个值为NULL,因为VBA不允许字符串为NULL。我有一个问题,双方,VBA和MySQL方面,以防VBA方面失败:

VBA:我目前正在使用On Error Resume Next来跳过NULL错误 - 是否有更好/更正式的方法来实现这一目标?这个错误是否会导致我的代码放慢速度?

MySQL:有没有办法阻止发送“NULL”,例如在我的SELECT语句中用空字符串快速替换NULL的实例?

3 个答案:

答案 0 :(得分:1)

使用类似

的功能
Option Explicit

Function rcdString(rcdField As Variant) As String

    If IsNull(rcdField) Then
        rcdString = ""
    Else
        rcdString = rcdField.Value
    End If

End Function

x = rcdString(MyRecordset.Fields(0))

答案 1 :(得分:1)

如何做到这一点:

1 - 在VBA方面

如果我没有错,那么已经有一个VBA函数可以将空值转换为默认值。在你的情况下,那将是

Nz(MyRecordset.Fields(1).Value,"")

如果字段值为null,则返回零长度字符串。

2 - 在MYSQL方面

您可以使用COALESCE函数,该函数返回其参数列表中的第一个非空值。您的选择将如下所示:

SELECT COALESCE(myFieldName,'') 

答案 2 :(得分:0)

如果我没记错的话,如果你有一个可能保持null的变量,连接一个空字符串会把变量变成一个空字符串,而对任何其他值都没有影响。但这可能不适用于ADO记录集

 x = MyRecordset.Fields(0).Value & ""