我从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的实例?
答案 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 & ""