2

我编写了一个在 Access 数据库中运行的 VBA 脚本。该脚本在各种表上查找值,并根据值的组合将属性分配给主表。

该脚本按预期工作,但是,我正在处理数百万条记录,因此需要很长的时间。

我想把这个过程分成更小的部分,并在不同的线程上同时运行脚本。

在我开始尝试构建解决方案之前,我想知道:

  1. 根据您的经验,这会提高性能吗?或者这个过程会花费同样长的时间吗?
  2. 我正在考虑使用 Powershell 或 VBScript 来完成此任务。有什么需要注意的障碍吗?

请注意:由于这将在客户端上运行,我必须使用 Access 作为后端,如果我使用 Powershell,它必须是 1.0 版。

我知道这些都是非常模糊的问题,但我们感谢任何基于先前经验的反馈。谢谢

4

1 回答 1

0

只是想发回我对此的最终解决方案......

对于 60,000 条记录样本量,我尝试了以下方法,根据来自其他表的值的组合将属性分配给主表:

Solution 1: Used a combination of SQL queries and FSO Dictionary objects to assign attribute
Result: 60+ minutes to update 60,000 records

Solution 2: Ran script from Solution 1 concurrently from 3 separate instances of Excel
Result: CPU was maxed out (Instance 1 - 50% of CPU, Instances 2 and 3 - 25% each); stopped the code after an hour since it wasn't a viable solution

Solution 3: Tried using SQL UPDATE queries to update main table with the attribute
Result: This failed because apparently Access does not allow for a join on an UPDATE sub-query (or I just stink at writing SQL)

Solution 4 (Best Result): Selected all records from main table that matched the criteria for each attribute, 
 output the records into csv and assigned the attribute to all records in the csv file. 
 This created a separate file for each attribute, all in the same format. I then 
 imported and appended all of the records from the csv files into a new main table.  
Result: 2.5 minutes to update 60,000 records

特别感谢 Pynner 和 Remou,他们建议将数据写入 csv。

我从没想过这是用属性更新记录的最快方法。如果你没有提出这个建议,我可能会认为用 Access 和 VBA 不可能完成这个项目。非常感谢您分享您的智慧!

于 2012-09-23T17:38:06.310 回答