VBA ADODB 记录集字段是来自 MySQL 的 Null - 有没有简单的方法来检查或防止“NULL”?
Posted
技术标签:
【中文标题】VBA ADODB 记录集字段是来自 MySQL 的 Null - 有没有简单的方法来检查或防止“NULL”?【英文标题】:VBA ADODB recordset field is Null from MySQL - is there an easy way to check or prevent "NULL"? 【发布时间】:2018-10-19 06:49:48 【问题描述】:我从 mysql 服务器中提取了一个大型记录集,并根据字段位置在 Excel VBA 例程中分配了一堆变量,例如:
x = MyRecordset.Fields(0).Value
y = MyRecordset.Fields(1).Value
' etc...
只有当其中一个值为 NULL 时才会引发错误,因为 VBA 不允许字符串为 NULL。如果 VBA 端倒下,我对 VBA 和 MySQL 端都有疑问:
VBA:我目前正在使用On Error Resume Next
来跳过 NULL 错误 - 有没有更好/更正式的方法来实现这一点?这个错误是否跳过减慢我的代码?
MySQL: 有没有办法防止“NULL”被发送,例如在我的SELECT
语句中用空字符串快速替换 NULL 实例?
【问题讨论】:
您是否尝试在查询中使用“IS NOT NULL”? ***.com/questions/5285448/… 那只会给我在任何字段中不包含 NULL 值的行,对吗?我仍然想要那些行,我只想将一两个 NULL 实例替换为 "" 也许我只需要不允许我的数据库中的任何 NULL 值以开头并将所有内容默认为空字符串... 为什么不先检查IsNull(MyRecordset.Fields(0).Value)
,然后再检查x = MyRecordset.Fields(0).Value
【参考方案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))
【讨论】:
谢谢,我会接受这个,我有一个类似同类函数的转换模块,所以我认为这很适合那个工具箱。【参考方案2】:如何做到这一点:
1 - 在 VBA 端
如果我没记错的话,已经有一个 VBA 函数可以将空值转换为默认值。在你的情况下,那将是
Nz(MyRecordset.Fields(1).Value,"")
如果字段值为空,则返回零长度字符串。
2 - 在 MYSQL 方面
您可以使用 COALESCE 函数,该函数将返回其参数列表中的第一个非空值。您的选择将如下所示:
SELECT COALESCE(myFieldName,'')
【讨论】:
您好,感谢您的输入,Nz()
函数显然只在 Access 中有效,而我正在使用 Excel - 不过很有帮助,因为我搜索了它并且看到了一个很好的 sn-p根据IIF()
重新创建它 - 至于COALESCE()
的想法,也很棒,我将使用两者进行一些速度测试,看看哪个更快 - 我认为 Excel 中的后查询处理可能会更快,并将用户应用程序而不是服务器上的“CPU”负担。【参考方案3】:
如果我没记错的话,如果你有一个可能为空的变量,连接一个空字符串会将变量变成一个空字符串,而不会影响任何其他值。但这可能不适用于 ADO 记录集
x = MyRecordset.Fields(0).Value & ""
【讨论】:
以上是关于VBA ADODB 记录集字段是来自 MySQL 的 Null - 有没有简单的方法来检查或防止“NULL”?的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA - 搜索范围和连接的 SQL ADODB 记录集以在列中匹配写入结果集