首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何等待压缩修复-访问VBA

如何等待压缩修复-访问VBA
EN

Stack Overflow用户
提问于 2013-04-21 23:00:26
回答 4查看 3.4K关注 0票数 2

在Access 2007中有一个VBA模块,它在For循环中执行类似的操作。在每次循环结束时,我希望在进行下一次迭代之前压缩和修复当前数据库。

原因:在我创建的每个迭代中,使用进行计算和删除一个表。大小应保持在可控范围内。

使用SendKeys,我无法压缩和修复-如果从表单按钮调用模块。确保SendKey正常工作并且模块继续进行下一次迭代的任何技巧。控制表单加载/模块执行/检查状态等的一些想法。最终目的是等待足够长的时间,直到压缩完成,然后继续进行。另外,如何安全地确保SendKeys /(建议替代)用于压缩工作良好。

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-22 06:16:14

"...在For循环中。在每个循环结束时,我希望在继续下一次迭代之前压缩和修复当前数据库。“

考虑压缩当前数据库时实际发生的情况。Access首先将当前数据库的压缩版本创建为新的db文件。然后删除旧的数据库文件,将新文件重命名为旧名称,最后打开新的数据库文件。

因此,如果您的代码尝试通过For循环压缩每个循环...当Access随后打开压缩的db文件时...它怎么知道您想让它在For循环中继续呢?

如果你真的想做这样的事情,你将不得不存储一个值来记录For循环的最后一次迭代。然后创建一个autoexec宏,以便在数据库打开时检索该值,并在适当的周期进入For循环。然后决定您是否真的希望每次打开数据库时都发生这一切。

然而,对我来说,这似乎太费力了。使用另一个db文件来保存易失性数据应该更简单。然后,通过当前数据库中的代码,您可以使用DBEngine.CompactDatabase压缩外部db文件。

票数 7
EN

Stack Overflow用户

发布于 2013-04-22 00:08:11

如果您正在进行如此多的压缩和修复,那么我会将DB拆分为前端和后端。所有的表都将放在后端。拆分DB对于任何常规的Access程序员来说都是相当标准的。

然后,在需要时,使用外壳命令通过/compact开关打开后端数据库。这将打开它,执行压缩和修复,然后关闭它。

因此,您的代码将如下所示:

代码语言:javascript
复制
Ret = Shell("C:\Program Files\Microsoft Office\Office12\MSACCESS.EXE /compact c:\MyFolder\MyDB.accdb")

如果需要等待它完成,请改用WScript.Shell命令。

祝好运

票数 2
EN

Stack Overflow用户

发布于 2013-04-22 02:02:31

您不能在任何类型的循环中压缩和修复当前数据库。您可以在循环中压缩和修复外部数据库,也可以在关闭时压缩当前数据库。

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

https://stackoverflow.com/questions/16132519

复制
相关文章

相似问题

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