通过链接到 Access 数据库的 ODBC 数据源进行缓慢的数据访问

Posted

技术标签:

【中文标题】通过链接到 Access 数据库的 ODBC 数据源进行缓慢的数据访问【英文标题】:Slow data access via an ODBC datasource linked to an Access database 【发布时间】:2012-09-12 13:05:05 【问题描述】:

我的公司开发了一个使用 Visual Basic 6 的应用程序。 该应用程序通过 ODBC 数据源使用 Access 数据库。 Access 数据库是一个扩展名为“.mdb”的文件。

在以下环境中运行应用程序时,我们没有注意到任何缓慢的数据访问:

操作系统:Windows 7 32 位。 已安装的 MS Access 版本:Access 2007。 OBDC 数据源使用的访问驱动程序:Microsoft Access Driver (*.mdb) 版本 6.01.7601.17632。

但我们注意到在以下环境中运行应用程序时数据访问缓慢:

操作系统:Windows 7 64 位。 已安装的 MS Access 版本:Access 2010 或 2003。 ODBC 数据源使用的访问驱动程序:Microsoft Access Driver (*.mdb) 版本 6.01.7601.17632。

我已经在谷歌上搜索了一段时间以找到解决方案。 根据网上找的文章,其他开发者也遇到过同样的问题。

有关信息,我的 ODBC 32 位管理员中未启用跟踪功能。 以下页面提到了跟踪功能:http://answers.microsoft.com/en-us/office/forum/office_2010-access/my-solution-to-access-being-slow-with-odbc/a5a6522f-a70f-421e-af1b-48327075e010

我还尝试禁用 LLMNR 协议,但未成功,如下页所述: http://accessexperts.net/blog/2011/11/02/windows-7-64bit-slow-with-access-2007-solved/

任何帮助将不胜感激

【问题讨论】:

VB6 可能在 64 位中有问题吗?使用已安装的 Access 版本与 .mdb 文件建立 ODBC 连接,看看是否存在性能差异。 @JeffO :我使用 MS Access 2010 创建了一个新的 Access 数据库。然后我尝试将我的新数据库链接到我的 ODBC 数据源。但我被告知我不能使用链接到另一个 Access 数据库的 ODBC 数据源。 你能解决这个问题吗?我也有同样的问题 【参考方案1】:

有很多事情要检查,您要做的第一件事就是在您的应用程序中创建我们所说的持久连接。持久连接只是意味着在您的启动代码中的某处,您打开一个从后端到记录集的表,并在您在该应用程序中执行的任何其他操作期间保持打开状态。

持久连接经常产生巨大差异的原因是,较新的操作系统在创建与数据库的连接时往往确实具有大量额外的安全性和开销。事实证明,通常在 access 数据库中打开和关闭表需要同时打开和关闭这些连接。如果您强制持久连接始终保持打开状态,那么现在不会发生这种干扰代码中常规更新的一般性能的非常缓慢且大量开销的过程。

试试上面的方法,因为这个设置通常可以解决这个性能问题和问题。

【讨论】:

我公司的应用程序通过 DAO 3.6 库使用 Access 数据库。我检查了 VB6 源代码以查看连接是如何创建的。连接是在执行开始时创建的。首先,应用程序获取使用 Microsoft Jet DB 引擎的默认工作区。然后应用程序执行 Workspace 对象的 OpenDatabase 方法。 OpenDatabase 方法返回一个 Database 对象,用于在剩余的执行时间内执行 SQL 查询。 OpenDatabase 是否始终保持打开状态?您不想重新打开并重新创建 OpenDatase。它只需要发生一次。因此,您需要创建一个全局对象来打开数据库并在会话期间保持不变。

以上是关于通过链接到 Access 数据库的 ODBC 数据源进行缓慢的数据访问的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 ODBC 将 Access 连接到 SQLlite

MS Access:在设计指南视图中创建链接表不显示要链接的表?

将链接表添加到 Access 2003,同时在 MDB 中保留 ODBC 连接信息

Access如何释放ODBC

ODBC 链接表未显示几分之一秒

Microsoft Access ODBC 连接:连接字符串差异