database - Access VBA : Error when declaring the type of a Database object: User defined type is not defined

标签 database ms-access compiler-errors ms-access-2010 declaration

在 Access 2010 VBA 中,如果我运行这个子程序:

sub test

    Dim db
    Dim rst

    Set db = CurrentDb()
    Set rst = db.OpenRecordset("select * from mytable")

    Debug.Print "db:  " & TypeName(db)
    Debug.Print "rst: " & TypeName(rst)

end sub

然后它显示(在“中间”面板中):

db:  Database
rst: Recordset2

所以它可以工作,并且所有库都已正确安装(例如 ADO)。

好的,现在我想通过使用显示的类型(“Database”和“Recordset2”)显式声明变量类型,所以我以这种方式修改 sub:

sub test

    Dim db   as Database        ' explicitly
    Dim rst  as Recordset2      ' explicitly

    Set db = CurrentDb()
    Set rst = db.OpenRecordset("select * from mytable")

    Debug.Print "db:  " & TypeName(db)
    Debug.Print "rst: " & TypeName(rst)

end sub

当我运行它时,在“Dim db as Database”行出现以下错误:

Compilation error:
User defined type is not defined

所以我明白“数据库”类型没有定义(!)。为什么?

注:我也试过:

Dim db   as ADO.Database        ' explicitly
Dim rst  as ADO.Recordset2      ' explicitly

和:

Dim db   as ADODB.Database      ' explicitly
Dim rst  as ADODB.Recordset2    ' explicitly

和:

Dim db   as DAO.Database        ' explicitly
Dim rst  as DAO.Recordset2      ' explicitly

并且所有这些都出现了同样的错误。这怎么可能?如果我不声明类型,为什么它会起作用?


编辑:我刚刚发现 Access 还通过调用“CurrentProject.Connection”为当前数据库提供了一个 ADODB.Connection 对象。所以我可以明确声明:

sub test

    Dim db As ADODB.Connection
    Set db = CurrentProject.Connection      ' Access gives an ADODB object too!

    Dim rst As ADODB.Recordset
    Set rst = New ADODB.Recordset
    rst.Open "select * from mytable", db

    Debug.Print "db:  " & TypeName(db)
    Debug.Print "rst: " & TypeName(rst)

end sub

显示:

db:  Connection
rst: Recordset

所以我会使用它,因为 ADO 比 DAO 更现代。

最佳答案

尝试检查“引用”——您会看到没有 DAO 库。 您的第一个示例有效,因为 db 具有 Variant 类型。和赋值

Set db = CurrentDb() 

将 COM 对象 DAO.Database 放入 db,稍后 TypeName 确认这是数据库。 如果你想使用

Dim db   as DAO.Database 

您必须引用适当的库(例如 Microsoft DAO)

更新 @John Shaw : 现在您可以使用库“Microsoft Office 1X.0 Access 数据库引擎对象库”作为“Microsoft DAO”的完全兼容替代品。

关于database - Access VBA : Error when declaring the type of a Database object: User defined type is not defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21989581/

相关文章:

mysql - 不知道为什么连接查询返回结果集的时间比我预期的要长,并且执行需要很长时间

Java Play 2.2.2 BoneCp 0.8.0.RELEASE MySql 超时连接

mongodb - 无法连接到 MongoDB/奇怪

java - 如何在java数据库查询中使用不等于运算符?

arrays - 在 MS Access 中公开数组 - 相当于 var_dump()

java - Java中如何将字符串值转换为日期?

ms-access - 微软 Access : create subdatasheet with SQL command?

compiler-errors - Elixir - 无法在比赛中调用远程功能

objective-c - 函数(非方法)声明中的未知类型名称CGRect

arrays - 在 Dymola 中编译大型数组