Access テーブルにデータをインサート
忘れないうちに、というか結構知らない人もいるかもなので記述
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
こんなとこだろうか?
データセットのところをループさせるようにすればどんどん下に追加していけますね。
間違ってたらごめんねー。
コメントはまだありません。