"Type mismatch" 遍历 ADODB 记录集的字段时出错
"Type mismatch" error when iterating through fields of ADODB recordset
工作簿的 Sheet1
在单元格 A1:C2
中具有以下值:
abc def ghi
123 456 789
我正在使用以下代码在 ADODB 记录集中打开此 sheet 并读取字段:
Public Sub printColumnHeaders()
Dim fld As field
'class for handling ADODB operations
Dim ac As ADOConnector
Dim rs As ADODB.Recordset
Set ac = New ADOConnector
'establish ADODB.Connection
ac.connect "T:\test\testADO.xlsx"
'open recordset of Sheet1
Set rs = ac.selectSQL("select * from [Sheet1$]")
rs.MoveFirst
'test if recordset has been successfully opened
'by checking individual value
Debug.Print rs.Fields(0).Name
Debug.Print rs.Fields(0).value
For Each fld In rs.Fields
Debug.Print fld.value
Next
End Sub
这成功打印:
abc
123
但随后在 For Each fld In rs.Fields
:
上抛出错误
Type mismatch
当我右键单击 field
和 select "Definition" 时,我收到此消息:
Identifier under cursor is not recognized
我启用了以下相关参考:
Microsoft Scripting Runtime
Microsoft Office 14.0 Access database engine Object Library
Microsoft ActiveX Data Objects 6.1 Library
Microsoft ActiveX Data Objects Recordset 6.0 Library
Microsoft Forms 2.0 Object Library
当我通过键入 Dim
语句声明变量 fld
时,当我键入 As
时,我得到包含单词 Field
的 Intellisense,因此对象在该级别是已知的。
特别奇怪的是,我从另一个包含相同 For each fld in rs.Fields
迭代的 VBA 应用程序复制了 ADOConnector
的代码,而这个另一个应用程序启用了所有相同的引用并且显示相同的 Identifier under cursor is not recognized
消息,但成功地遍历了 Fields 集合。我一直无法弄清楚这两个应用程序之间有什么区别(如果有的话)。
似乎 field
没有解析为 ADODB.Field
类型的对象
所以改变这个:
Dim fld As field
对此:
Dim fld As ADODB.Field
这可能与引用两个库有关,这两个库中都有名为 'field' 的对象:
Microsoft Office 14.0 Access database engine Object Library
Microsoft ActiveX Data Objects 6.1 Library
Sheet1
在单元格 A1:C2
中具有以下值:
abc def ghi
123 456 789
我正在使用以下代码在 ADODB 记录集中打开此 sheet 并读取字段:
Public Sub printColumnHeaders()
Dim fld As field
'class for handling ADODB operations
Dim ac As ADOConnector
Dim rs As ADODB.Recordset
Set ac = New ADOConnector
'establish ADODB.Connection
ac.connect "T:\test\testADO.xlsx"
'open recordset of Sheet1
Set rs = ac.selectSQL("select * from [Sheet1$]")
rs.MoveFirst
'test if recordset has been successfully opened
'by checking individual value
Debug.Print rs.Fields(0).Name
Debug.Print rs.Fields(0).value
For Each fld In rs.Fields
Debug.Print fld.value
Next
End Sub
这成功打印:
abc
123
但随后在 For Each fld In rs.Fields
:
Type mismatch
当我右键单击 field
和 select "Definition" 时,我收到此消息:
Identifier under cursor is not recognized
我启用了以下相关参考:
Microsoft Scripting Runtime
Microsoft Office 14.0 Access database engine Object Library
Microsoft ActiveX Data Objects 6.1 Library
Microsoft ActiveX Data Objects Recordset 6.0 Library
Microsoft Forms 2.0 Object Library
当我通过键入 Dim
语句声明变量 fld
时,当我键入 As
时,我得到包含单词 Field
的 Intellisense,因此对象在该级别是已知的。
特别奇怪的是,我从另一个包含相同 For each fld in rs.Fields
迭代的 VBA 应用程序复制了 ADOConnector
的代码,而这个另一个应用程序启用了所有相同的引用并且显示相同的 Identifier under cursor is not recognized
消息,但成功地遍历了 Fields 集合。我一直无法弄清楚这两个应用程序之间有什么区别(如果有的话)。
似乎 field
没有解析为 ADODB.Field
所以改变这个:
Dim fld As field
对此:
Dim fld As ADODB.Field
这可能与引用两个库有关,这两个库中都有名为 'field' 的对象:
Microsoft Office 14.0 Access database engine Object Library
Microsoft ActiveX Data Objects 6.1 Library