6

感谢您的网站。精彩的信息。

简而言之,我正在尝试从 Outlook (2007) 执行以下代码,尽管它在 Excel 中也失败了。在内部访问中效果很好!

Sub Test

    Dim db As DAO.Database
    Dim rs As DAO.Recordset

    Const dbPath As String = "C:\Users\e574651.GLOBAL\Documents\Northwind 2007.accdb"
    On Error Resume Next
    Set db = DAO.OpenDatabase(dbPath)
    'Set rs = db.OpenRecordset("customers")

    Debug.Print Err.Number, Err.Description

End Sub

3343 无法识别的数据库格式 'C:\Users\e574651.GLOBAL\Documents\Northwind 2007.accdb'。

我可以整天使用 ADO 访问(不是双关语)这个数据库,我怀疑问题出在以下 ADO 语句上:

ADOConn.Provider = "Microsoft.ACE.OLEDB.12.0"

如何使用 DAO 提供此功能?

我在我的 VBA 首选项中包含了对 DAO 3.6 库的引用。我已经包含了其他 Microsoft 12.0 库引用,所以我要么破坏了一些东西,要么省略了一些东西。

任何帮助将不胜感激。

谢谢!

4

2 回答 2

7

最新的 DAO 库采用以下格式:

Microsoft Office x.x Access Database Engine Object Library

所以摆脱 3.6 参考并使用更新的库。然后,一个例子:

Sub XLAccess()
Dim ws As DAO.Workspace
Dim db As DAO.Database
Dim sDb As String
Dim sSQL As String
Dim qdf As QueryDef

    sDb = "Z:\Docs\Test.accdb"

    Set ws = DBEngine.Workspaces(0)
    Set db = ws.OpenDatabase(sDb)

    ''A stored query would be better
    sSQL = "Parameters p1 Text, p2 Datetime; " _
    & "INSERT INTO Table1 (AText,ADate) Values ([p1],[p2])"

    Set qdf = db.CreateQueryDef("", sSQL)

    qdf.Parameters!p1 = "ABC"
    qdf.Parameters!p2 = #1/17/2013#
    qdf.Execute dbFailOnError
    Debug.Print qdf.RecordsAffected
End Sub
于 2013-03-16T12:56:02.943 回答
2

在您的参考文献中使用更新的版本或最新的访问数据库

例如:在 Visual Basics 窗口中 =转到 Tools > References > Microsoft Office 14.0 Access Database Engine Object Library

然后使用以下命令打开您的数据库:

Dim database_data As DAO.Database
Dim rsData As DAO.Recordset
Dim field_index As Integer

Set database_data = DAO.OpenDatabase("demo1.accdb")

有时,可能还需要输入数据库文件的完整路径,例如“C:\User\Documents\projects\demo1.accdb”

于 2018-02-27T10:48:18.207 回答