- ベストアンサー
Access 2003を使用した10万件のデータのチェック方法について
- Access 2003を使用して10万件のデータに対してチェックを行い、処理時間の短縮方法を探しています。Excelを使用してデータを読み込み、Accessのテーブルにインサート・アップデートしていますが、処理が遅い問題があります。
- 現在10万件のデータのうち8万件がアップデートの対象であるため、処理時間が非常に長くなっています。アイディアや他の技術を使用することで処理時間を短縮できる方法を探しています。
- どのような技術や手法を使用すれば、Access 2003を使用した大量のデータ処理を効率的に行うことができるのか、アイディアやアドバイスを教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ExcelをAccessにリンクしてリンクテーブル とします。Accessのバージョンによっては Excelは読み取りのみになりますが、この場合は 読み取りでいいのでそのままリンクします。 リンク方法は外部ファイルのテーブルをリンクする場合 と同じですが、ExcelのSheet名がテーブル名 になり、フィールド名はExcelで設定している たとえば、A1、A2などにID、商品名などと 設定しているとそれをフィールド名として 設定できます。 ファイルから「外部データの取り込み」を 選択し、「テーブルのリンク」を選択し、 ファイルの種類をExcelに変更し、フォルダに 移動してExcelファイルを選択するとウィザードが 起動されます。 次に、クエリを作成します。たとえば、Excel とAccessにID、商品名があるとして、 先に更新クエリを実行します。 UPDATE Tdata INNER JOIN Sheet1 ON Tdata.ID=Sheet1.ID SET Tdata.商品名=Sheet1.商品名 WHERE Tdata.ID=Sheet1.ID; 続いて、追加クエリを実行します。 INSERT INTO Tdata SELECT * FROM Sheet1 WHERE ID NOT IN (SELECT ID FROM Tdata); このような方法はどうでしょう。なお、 フィールドが他にある場合はクエリの デザインビュー、あるいはSQL文の中で 追加してください。 なお、 実行時エラー「ファイルの共有ロック数が制限を超えています」 というエラーが出れば以下。 http://support.microsoft.com/kb/209940/
その他の回答 (4)
- piroin654
- ベストアンサー率75% (692/917)
訂正です。 #3で、 >たとえば、A1、A2などにID、商品名などと としていましたが、 >たとえば、A1、B1などにID、商品名などと にしてください。
- piroin654
- ベストアンサー率75% (692/917)
#3です。 Tdataというのはテーブル名です。
8万件のデータはExcelに記録されているのでしょうか? それならば一旦Accessに読み込み(Accessのテーブルにする)してから追加クエリで処理すれば圧倒的に早くなるはずです。「一旦Accessに読み込み」時の時間は試したことがないですが、それほどかからないのでは?
- shupla1976
- ベストアンサー率16% (1/6)
上の内容を見る限りindexが付いていないような気がします。 AccessテーブルのID列にindexは付いていますか? 付いていなければ付けましょう。劇的に早くなる筈です。 付いていても遅いのであればAccessデータをSQL Serverに入れて試してみたらいかがでしょうか。