奇怪的情况,使用 ADO 在 Excel VBA 中定义连接到 Access .accdb 数据库的文件路径,但是它告诉我找不到 .mdb 文件

Posted

技术标签:

【中文标题】奇怪的情况,使用 ADO 在 Excel VBA 中定义连接到 Access .accdb 数据库的文件路径,但是它告诉我找不到 .mdb 文件【英文标题】:Weird situation, define a file path connecting to Access .accdb database in Excel VBA using ADO, however it tells me couldn't find .mdb file 【发布时间】:2011-12-02 15:04:18 【问题描述】:

我正在使用 ADO 连接在 Excel VBA 中编写代码以打开 Access .accdb 数据库。我将文件路径定义为波纹管,但是当我运行我的代码时,错误消息告诉我“找不到文件 C:\Users\sevenice\Documents\EM Database.mdb”。太奇怪了,我从来没有定义 .mdb 文件范围内的文件路径。

但是,当我将 accdb 文件保存为 mdb 文件,然后将 mdb 文件放在 Documents 文件夹下时,代码可以正常工作!但我无法弄清楚为什么。

我的代码有什么问题吗?还是 Access 2007 中存在一些默认文件路径?我的代码在 Excel 2007 中。

谢谢, 必应

将 cnn 调暗为新的 ADODB.Connection Dim rst 作为新的 ADODB.Recordset

将 Dbfilepath 调暗为字符串

Dbfilepath = "C:\Users\sevenice\Desktop\EM Database.accdb"

Set cnn = New ADODB.Connection

cnn.Open "Provider= Microsoft.ACE.OLEDB.12.0;" & " Data Source=" & Dbfilepath & ";" & "Persist Security Info =False;"

Set rst = New ADODB.Recordset
rst.ActiveConnection = cnn

【问题讨论】:

第一件事是,您不需要连接字符串各部分之间的“&”。只需将其设为一个字符串并在 DbFlePath 前后使用 &。其次就像下面说的那样,用 SQL 语句试试。与 rst.open strsql、cnn 一样,Access 提供程序对连接字符串的形成方式很挑剔。 您是否检查过变量 Dbfilepath 是否未在其他地方定义为公共变量或常量? 【参考方案1】:

您是否在 SQL 文本中引用了数据库名称(您已从发布的代码中截取该名称)?

例如

SELECT [g/gtop] FROM [EM Database].[N (t) Data]

AFAIK 此语法将尝试在当前目录中查找数据库EM Database.mdb。我猜它使用 .mdb 来兼容遗留代码(或者它是一个错误!:)

【讨论】:

以上是关于奇怪的情况,使用 ADO 在 Excel VBA 中定义连接到 Access .accdb 数据库的文件路径,但是它告诉我找不到 .mdb 文件的主要内容,如果未能解决你的问题,请参考以下文章

在 VBA 中打开与 Excel 电子表格的 ADO 连接

Excel/ADO/VBA:计数返回不正确的结果

使用带有 ADO 的 Excel 2010 VBA(或带有 LINQ 的 vb.net)查询表的最佳 SQL 语句是啥

VBA Excel ADO SQL 更新查询不起作用

VBA利用ADO操作EXCEL表

VBA Excel里 用ADO访问ACCESS数据库的问题