• 締切済み

Accessへの大量データ登録

Access VBAの初心者です。 現在、VBAにてAccessのテーブルに100万レコード程度のデータを登録しようとしています。 最初は1レコード毎、SQLでinsertしようとしていたのですが、時間が想定以上にかかるので断念しました。 次に、CSVに一回書き出してDocmd.TransferTextすることを検討しましたが、読み込んだテーブルにselectした結果が安定しないため色々調べたところ、DoCmdは非同期で動くらしいです。 とすると次のクエリをかけるにはちゃんと全レコード読み込んだかを確認し、読み込んでいなければウェイトをかける処理を入れる必要があり、これも馬鹿馬鹿しいのでやりたくありません。 そこでお聞きしたいのですが、このような場合、どのような処理をするのが定石なのでしょうか。 皆様のお知恵をお借りできれば幸いです。 宜しくお願いいたします。

みんなの回答

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.3

こんにちは 書き出したCSVファイルにリンクを張るだけではダメなのでしょうか? 或いはリンクを張って、そのデータを必要なテーブルに追加クエリで追加するとか。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

現状において、出来ていて手元にあるデータ(のファイル形式)は、何ですか? CSV、エクセル、その他DBなどのうち、どれですか?この大切なことを質問に書いてないのはおかしくないですか。100万件ということなので、今からや最近行った手入力のデータではなく、事業系の(商売・会社・団体がらみの)の本番処理の後の、お下がり(メインシステムからもらうデータなど)の(EUC用の)データではないのですか。 達成後はアクセスに入れて、メインは主に何をするのですか。分析?照会用? ーー 一番歴史的に早くできた方式の、下記記事による方法のデータ処理を試してはどうですか。 複雑な処理や、データため込みをしないので、単純といえる分、読み込みや書き込み処理は早いかも。 また100万件を適当に数個に原データを分割して、1つづつ処理すると、よいことがあるかも。 http://vba-geek.jp/blog-entry-203.html CSVファイルを順次読んで、mdb(質問以バージョンも書いてないのでmdb)に「レコード」処理的(この意味は分かる?)に書きこんでゆくやり方です。(SQLのインサートやアクセスのインポートに頼らないやり方) ーー mdbについて、バージョンとの関連で https://support.office.com/ja-jp/article/Access-2007-%25E3%2581%25A7%25E4%25BD%25BF%25E7%2594%25A8%25E3%2581%258C%25E6%258E%25A8%25E5%25A5%25A8%25E3%2581%2595%25E3%2582%258C%25E3%2582%258B%25E3%2583%2595%25E3%2582%25A1%25E3%2582%25A4%25E3%2583%25AB%25E5%25BD%25A2%25E5%25BC%258F-a9530032-e4bc-4116-acf7-b204833cf73b?ui=ja-JP&rs=ja-JP&ad=JP&fromAR=1

Terios19
質問者

お礼

回答ありがとうございます。 1件毎に追加していくのは非常に時間がかかり耐えられないため、一括での読み込みを検討しています。 いずれにせよ、アドバイスありがとうございました。

回答No.1

>SQLでinsertしようとしていた・・ ということなのでデータの取得は出来ているのでしょうから それを追加クエリ Or テーブル作成クエリ(用途にあった方)に変更してください。 DAOかADOのExecuteメソッドで currentdb.Execute (SQL文 Or クエリ名) currentproject.Connection.Execute ( Executeでしたら処理が終了するまで次に行くことはありません。

Terios19
質問者

お礼

回答ありがとうございます。 1レコード毎、AddNewとかで更新するとかなり遅くて実用に耐えないため、CSVで一括読み込みできないか検討しています。 ありがとうございました。

関連するQ&A