首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jet.OLEDB或ACE.OLEDB MS Access

Jet.OLEDB或ACE.OLEDB MS Access
EN

Stack Overflow用户
提问于 2019-03-22 22:47:09
回答 1查看 730关注 0票数 0

我正在使用excel vba从MS Access DB中提取数据-这是使用Excel 2013和Access 2013 32位。代码历史上使用过:

代码语言:javascript
复制
Provider=Microsoft.Jet.OLEDB.4.0;

然而,一些计算机已经升级到Excel 2016 64位,而Jet provider不能用于64位。我已将代码更改为:

代码语言:javascript
复制
Provider=Microsoft.ACE.OLEDB.12.0;

它适用于64位和32位系统。然而,我注意到仅仅是因为更改了这一行,加载/保存数据的速度就显著下降了。有没有人知道为什么会这样,以及我如何改进它?

EN

回答 1

Stack Overflow用户

发布于 2019-03-23 09:46:04

您必须为x64 bits选择,这是正确的。

而JET的最大优势在于,它过去(现在仍然是)默认安装在所有windows副本上。因此无需安装Access或运行时,或以前的办公连接软件包。

至于性能呢?关于ACE x64的性能,有一些评论。

但是,一个技巧或建议是确保连接保持打开。换句话说,您确定行处理速度很慢,还是整个时间都在变慢?

(可能会放入一个测试消息框,或者在代码中进行测试。

例如:

代码语言:javascript
复制
 Dim T    as single

 T = timer()

 ‘ your code here

 Debug.print timer() – t

因此,上面的命令将显示调试窗口的时间(在VBA中,ide按ctrl-g以显示立即/调试窗口。

我建议强制开放的原因是,你经常会发现ACE需要很长时间才能打开。但是一旦打开,那么数据读取就会有很好的性能(和以前一样)。

因此,我建议检查并尝试此修复。

因此,打开一个表(任何表)并使其保持打开。现在运行您现有的代码(这很可能打开或关闭其他表)。问题是,当ACE试图打开一个表时,它会试图锁定mdb/accdb文件,而这个过程需要非常非常长的时间。

但是,如果您强制(保留)打开一个表,则每次执行查询或在代码中创建额外的记录集时,ACE尝试锁定文件以进行读/写的这一非常缓慢的过程不会发生。

因此,如果行读取速度很快,但START + open的时间非常慢,那么在运行+测试例程之前,强制打开某个reocrdset表(保持其活动并在作用域内),然后尝试您的代码。

我发现10次中有9次,这会消除这种缓慢的速度,而且我经常看到结果是惊人的(它会比以前跑得更快!)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55302206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档