【发布时间】:2016-11-10 23:15:58
【问题描述】:
我在 MS Access 2007 中遇到了一个我无法可靠重现的零星错误。具体情况如下:
- 将 500K+ 行文本数据从文件加载到表中
- [用加载的数据做事]
- 尝试从 vba 中删除表的内容 CurrentDB().Execute "Delete * from RawImport",其中 RawImport 是表名
在第 3 步,代码有时会挂起,直到我按 ctrl-Break。发生这种情况时,如果 Ctrl-F11 回到数据库视图并尝试删除表的内容,它总是会给我一个错误“没有足够的内存或磁盘空间来完成此操作,请执行你想继续”(意译,我无法捕捉到错误)
退出访问并重新加载通常会清除此问题,以便 VBA 代码运行,这一切都很好,但我该如何捕获呢?它不会在删除时在 vba 中生成错误,它只是坐在那一行,直到我手动中断。
【问题讨论】:
-
我认为这对于 msAccess 来说数据过多,您有损坏数据库的风险。如果可能,您应该改用 MSSQL。我也期待有人回答
-
在处理过程中观察 Access DB 的大小,看看文件在处理过程中增长了多大。我猜你遇到了 2GB 的大小限制
-
"用 undo 完成这个动作" --- 所以你确实想继续,但你没有提供任何输入来这样做。尝试查看是否有另一种方法可以删除带有“忽略撤消”输入的表,或者是否有其他方法,如 runsql
-
是否可以选择删除表并重建为空表?
-
Hynek 不正确。 500k 行对于 Access 来说并不算多。按照建议,检查文件大小。你能发布相关代码吗?您可能会遇到更少的问题是您声明一个数据库变量,而不是使用 CurrentDb()。将 dbS 调暗为 dao.Database 设置 dbS = CurrentDb() sbS.Execute
, dbFailOnError。 UI 警告仅与 UI 有关。它只是告诉你,一旦删除记录,就无法撤消。
标签: vba ms-access error-handling low-memory