在MS Access(VBA)中模拟多线程

时间:2012-09-15 17:16:35

标签: access-vba

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

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

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

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

  1. 根据您的经验,这会提高性能吗?或者这个过程会花费多长时间?
  2. 我正在考虑使用Powershell或VBScript来实现这一目标。有什么障碍要注意吗?
  3. 请注意:由于客户端会运行,我必须使用Access作为后端,如果我使用Powershell,它必须是版本1.0。

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

1 个答案:

答案 0 :(得分: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是不可能实现的。非常感谢你分享你的智慧!