1

我有一个例程可以在 481 MB 文本文件上导入并执行一些转换。

该例程在一个工作站的此代码块上崩溃(但在我们的其他工作站上工作正常):

' All of the eleven-digit telephone numbers encountered end in 0. If we get rid of the ending 0,  
' we may end up with a valid telephone number.  
SQLString = "UPDATE " & sTableName & _  
            " SET [ServAddrPhone] = Int([ServAddrPhone]/10) WHERE [ServAddrPhone] >9999999999 ; "
RoboCallDB.Execute SQLString, dbFailOnError

[ServAddrPhone] 是双重的。代码块扫描大约 800,000 条记录以查找大于 10 位的电话号码,通常会找到大约 3,000 条符合更新条件的记录。

如何优化此代码以避免错误 3035?谢谢!

4

1 回答 1

1

好的,假设机器都具有大致相同的资源,我会尝试:

  1. 将 480 MB 的文本文件拆分为两个 240 MB 的文件。
  2. 看看您的问题机器是否可以处理较小的块。

如果可行,我只需编写代码来拆分此文件,然后分别导入每个部分。

注意:在加载每件作品之前,请务必退出并重新进入 Access。

我在运行的一个大型 ETL 过程中遇到了这个确切的错误,我最终将这个过程分成更小的块来解决这个问题。

这使我认为“本地访问应用程序资源”是真正被超出的,而不是“系统资源”,正如错误所声称的那样。

我知道这个建议对你来说实施起来可能会很痛苦,但迟早这个文本文件会变得大到足以让你的任何计算机窒息。

于 2015-05-19T19:20:41.140 回答