【问题标题】:Excel VBA ADO recordset issue with Null values具有 Null 值的 Excel VBA ADO 记录集问题
【发布时间】:2017-11-15 01:47:30
【问题描述】:

我是 VBA 的新手,对 ADO 有疑问。
目前,我使用的代码将 SQL 数据库中的字段(NameSuburbState)返回到 ListBox。 只要所有字段都有值,代码就可以正常工作,如果有 Null 值,则返回错误

无法设置 List 属性。类型不匹配

我需要找到一种方法,以便如果 Suburb 和/或 State 字段返回 Null 值,它仍会填充列表框。
任何信息将不胜感激,在此先感谢!

数据库条目

错误截图

Dim cnn As ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQLquery As String
Dim cnnstr As String
Dim SQLName As String
Dim i As Integer

SQLName = "Salon"
SQLquery = "SELECT [Name], [Suburb], [State] FROM Salon WHERE Name like '" & SQLName & "%'"

Set cnn = New Connection
cnnstr = "Provider=SQLOLEDB; " & _
                "Data Source=localhost; " & _
                "Initial Catalog=MyDatabase;" & _
                "User ID=sa;" & _
                "Password=Password;" & _
                "Trusted_Connection=Yes;"

cnn.Open cnnstr  
cnn.Execute SQLquery
rs.Open SQLquery, cnn, adOpenStatic

    rs.MoveFirst
    i = 0
    With Me.lb_search
        .Clear
        Do
            .AddItem
            .List(i, 0) = rs!Name
            .List(i, 1) = rs!Suburb
            .List(i, 2) = rs!State
            i = i + 1
            rs.MoveNext
        Loop Until rs.EOF
    End With

btn_search_test_Exit:
On Error Resume Next
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing

【问题讨论】:

  • .List(i, 1) = rs!Suburb & "" 有点老套,但通常有效。
  • SELECT [Name], NVL([Suburb], '') as Suburb, NVL([State], '') as State FROM Salon WHERE... 也应该可以工作

标签: sql-server vba excel


【解决方案1】:

Iif 可以返回空值的替代值。

例如:

.List(i, 0) = IIf(IsNull(a), "(not found)", rs!Name)

如果值为空,将返回“(未找到)”。

更多信息herehere

【讨论】:

  • nz不是Access函数吗?
  • @Tim -- 哎呀 - 我读错了(总是忘记 nz 在 Excel 中令人讨厌地不可用!)我已经更正了我的答案以适用于 Excel VBA,谢谢!
  • 这很可悲。如果它是日期怎么办,那么您必须在 Excel 中将所有内容转换为字符串,Excel 不会将其视为日期。并不是说它可以更好地处理日期。
【解决方案2】:

nz 在 Excel 中令人讨厌地不可用 哦,是的,它是:-)

Public Function NZ(v As Variant, Optional valueifnull As Variant = 0) As Variant
If IsNull(v) Then
      NZ = valueifnull
Else
    NZ = v
End If
End Function

【讨论】:

  • 在我浏览了几个小时的所有网站中,这是最干净、最简单的解决方案。搜索的时间将在我脑海中清楚地刻印一件事。即使 Excel 开发人员认为不适合包含函数,我也必须记住我可以创建自己的函数。谢谢@Harassed 爸爸。
猜你喜欢
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2011-02-15
  • 1970-01-01
  • 2017-05-26
相关资源
最近更新 更多