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

データを csv に書き出すことを提案した Pynner と Remou に感謝します。

これが属性を使用してレコードを更新する最も簡単な方法だとは思いもしませんでした。この提案がなければ、Access と VBA で達成することは不可能だと考えて、おそらくプロジェクトを破棄していたでしょう。あなたの知恵を共有してくれてありがとう!

于 2012-09-23T17:38:06.310 に答える