忘れないうちに、というか結構知らない人もいるかもなので記述

Accessのテーブルにデータをインサートする時、
まぁVBAでそのロジックを記述すると思うのだけど

その時、貴方はどう書くかな?

1.SQL文(INSERT INTO) を記述する
2.AddNewを使用する

だいたい上の2点のどちらかだよねー。
(※テキストデータ等のインポートは今回は省きます)
最終的にどちらもテーブルにデータがセットされるんだけど
Accessの場合はAddNewのがInsert Into文を書いてセットするよりも断然速い

とある案件のPGで、数100万件のデータを扱うときに
最初INSERT INTO文を書いてDocmdでSQLを走らせる形になってました。
(というか、100万件のデータをAccessで扱うのがどうかと思うんだけども・・・)

それで全てのデータをインサートし終えるまでに3時間もの時間が掛かっていたのですが、
AddNewを使用するように変更を行ったところ1時間まで処理時間を短縮することに成功しました。

また、SystemMDBとデータMDBというようにMDBを分割していたのですが、
INSERT INTO文を使用していたときに SystemMDBのファイルサイズがどでかく膨張していたのですが
AddNewを使用することによりその現象もなくなりました。

ちょっと仕事がまだ忙しかったりするので、
何故速いのかとか、そういうのをまだ調べ切れていないのですが速いです。ほんとに。

とあるサイトではINSERT INTO文を使用するのと比べると5倍以上速くなるとかいう記載もありました。
ただし、これはAccessの場合のみでSQLServerでAddNewを使用すると逆に遅くなるようです。

まぁテーブルの持ち方が双方違うんだろうなぁと簡単に予想してますけど。
ちなみにAddNewを使用する場合は以下の様に記述します。

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
‘————————————-

‘初期設定
cn.Open “Provider=Microsoft.Jet.OLEDB.4.0;” & _
“Data Source=[MDBフルパス(データを追加するテーブルを持っているMDB)];”
rs.Open “[データを追加するテーブル名]“, cn, adOpenKeyset, adLockOptimistic

‘データセット
rs.AddNew
rs.Fields(“[フィールド名]“).Value = “[セットしたいデータ]”
rs.Update

‘クローズ
rs.close
cn.close

こんなとこだろうか?
データセットのところをループさせるようにすればどんどん下に追加していけますね。

間違ってたらごめんねー。