【问题标题】:Access 2010 VBA - DAO Database connection "Operation is not supported for this type of object"Access 2010 VBA - DAO 数据库连接“这种类型的对象不支持操作”
【发布时间】:2014-07-31 20:58:18
【问题描述】:

我真的被困住了。我和我的同事无法弄清楚为什么这个数据库不能连接到“CurrentDb”。这是我的代码:

Dim db As Database, rs As DAO.Recordset
Dim strSQL As String, strRowSource As String

strSQL = "SELECT * FROM tbl_Documents"

Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)


If rs.RecordCount = 0 Then
    MsgBox "No Documents available!"
    Exit Sub
End If

rs.MoveFirst
Do Until rs.EOF = True
    strRowSource = strRowSource & rs!tbl_Documents.DocID & "," & rs!tbl_Document_Types.DocType & "," & rs!tbl_Documents.DocTypeID & "," & rs!tbl_Documents.DateReceived & "," & rs!tbl_Documents.LinkToFile & "," & rs!tbl_Documents.Comments & ";"
    rs.MoveNext
Loop

通常我得到的错误是“在此集合中找不到项目”在执行直到循环期间。我对我的数据库和记录集进行了观察,似乎两者都没有正确设置。我收到“操作不支持这种类型的对象”。在数据库对象的连接字段中。本质上,完全相同的代码用于我们拥有的许多其他 Access 数据库。不知道为什么这不会很好玩。

【问题讨论】:

  • 你试过Dim db As DAO.Database 吗?
  • @Overmind,在通常的库中,DAO 是唯一具有数据库对象的库,您认为问题是什么?整个循环代码对我来说看起来很奇怪。为什么是rs!tbl_Documents.DocID 而不是rs!DocID? strRowSource 会发生什么?为什么选择语句中没有列出字段?
  • @Fionnuala 啊,好的。谢谢;反正我一直用。我不得不同意strRowSource 看起来很奇怪。
  • rs!tbl_Document_Types.DocType 字段看起来非常奇怪。您选择的是 tbl_Documents,而不是文档类型。

标签: ms-access vba database-connection


【解决方案1】:

在我看来,您的代码需要进行一些安静的更改。正如@OverMind 所建议的那样,始终按原样声明变量。特别是避免代码歧义的库。接下来,您的 strSQL 仅包含一个表,但您的 strRowSource 有另一个表。所以你的 strSQL 应该改变。我不确定 strRowSource 做了什么,但在我看来,在这种情况下它将成为 ListBox 或 ComboBox 的 RowSource,这有点令人困惑。无论如何,您的代码应该是。

Dim db As DAO.Database, rs As DAO.Recordset
Dim strSQL As String, strRowSource As String

strSQL = "SELECT * FROM tbl_Documents INNER JOIN tbl_Document_Types ON tbl_Documents.DocID = tbl_Document_Types.DocTypeID;"

Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)

If rs.RecordCount = 0 Then
    MsgBox "No Documents available!"
    Exit Sub
End If

Do While Not rs.EOF
    strRowSource = strRowSource & rs!DocID & "," & rs!DocType & "," & rs!DocTypeID & "," & rs!DateReceived & "," & rs!LinkToFile & "," & rs!Comments & ";"
    rs.MoveNext
Loop

现在关于您的错误。 “在此集合中找不到项目” - 可能是因为您使用了不属于记录集对象的其他字段。试试这个代码。祝你好运。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 2021-08-17
    相关资源
    最近更新 更多