我正在构建一个带有一组支持子函数的函数来创建 ADOX.Catalog 对象,以帮助我构建 Access 数据库生成的自动化。
我喜欢为我的应用程序使用后期绑定,因为我的用户群并不总是拥有相同版本的办公应用程序,所以我不能总是依赖他们拥有我正在调用的相同版本的库。
我的公共函数接受多个对象作为参数,但在开始处理它们之前,我需要确保它们实际上是 ADODB.Recordset 对象。我参考了https://msdn.microsoft.com/en-us/library/s4zz68xc.aspx上的 msdn 文章以开始使用,我正在尝试If TypeOf ... Is ADODB.Recordset
按照文章的建议使用,但它会产生以下错误:
Compile error:
User-defined type not defined
这是我的代码片段。第一个违规行是TypeOf adoRsColumns Is ADODB.Recordset
:
Public Function ADOX_Table_Factory( _
ByVal strTblName As String, _
Optional ByVal adoRsColumns As Object, _
Optional ByVal adoRsIndexes As Object, _
Optional ByVal adoRsKeys As Object _
) As Object
'Init objects/variables.
Set ADOX_Table_Factory = CreateObject("ADOX.Table")
'Begin interactions with the new table object.
With ADOX_Table_Factory
.Name = strTblName
'Check if we've received an ADO recordset for the column(s).
If TypeOf adoRsColumns Is ADODB.Recordset Then
'Check that the recordset contains rows.
If Not (adoRsColumns.BOF And adoRsColumns.EOF) Then
'Loop through the column definitions.
Do
.Columns.Append ADOX_Column_Factory(adoRsColumns.Fields(0), adoRsColumns.Fields(1), adoRsColumns.Fields(2), adoRsColumns.Fields(3))
Loop Until adoRsColumns.EOF
End If
End If
我的谷歌搜索没有产生任何帮助我解决这个错误的结果。如果我设置对 ADO 库的引用,我已经确认此代码有效。我还通过该TypeName
函数确认了对象的名称标识为Recordset
. 但是,如果我替换TypeOf adoRsColumns Is ADODB.Recordset
为TypeOf adoRsColumns Is Recordset
,则测试评估为 false 并且不会执行所需的代码。我没有对TypeName
' 的输出进行字符串比较,因为正如 MSDN 文章中所述,TypeOf ... Is
它更快。
提前感谢您的任何帮助!