SQLを使ったCSVへのINSERT処理はADOよりDAOが高速!

今回の開発は
あるデータをCSVで生成する
ていうやつだったんだけど。

慣れたADODB接続で作って動かしてみると
遅い…

今思うと僕のコーディングに
問題があったのかもしれないが…
DAO接続に切替えてすぐ解決!!

もし同じように悩んでる人いたら
参考にしてみて!

MEMO
[開発環境]
・OS:Windows10
・Office:2016
・開発言語:VBA
・INSERT行数:2,507行
※実際のツール用途:Yahooサーチ入稿バルク生成

CSVにDAO接続してINSERT

VBA Project の参照設定

VBEを開いたら
「ツール」→「参照設定」から
「Microsoft Office 16.0 Access database engine Object Library」
を選択。

MEMO
名前の通りDAO(Data Access Object)は
Accessに特化したデータアクセス方法だそうだ。

※参考:「Access Study | Vol.16 AccessVBA徹底入門

DAO接続のVBA記述

※ちなみにADOは以下記事を参考に

【VB.NET】ADODBを使ってExcelデータをSQL操作してみた

INSERTはSQL文を使わずやってみた!

CSVにデータをINSERTする際
INSERT処理のSQL文を生成して実行するのは
とてもめんどくさい。。

先ほどのOpenRecordしたrsに対し

行追加(AddNew)し
CSV内の項目(Fields)に値をセットし
最後更新(Update)する!

ADOとDAOで比較してみて

CSVに追加した行数は
2,507」行。

処理時間は

ADO:約50分(3,000秒)

DAO:1秒

えっ。。

さすがに俺のコーディングがおかしいと思う(笑)

と疑いながらADOの高速化を調べてみると

INSERT INTO table(column1, column2,…) Values(v1, v2,…)

というSQL文を生成→実行する事で
高速化できたというこちらの記事が…!

※参考:SQL ServerへのCSVファイルinsert高速化

途中で匙を投げて
INSERT文生成をやらなかった自分が悪かったのだ…。

これからはきちんと
色々試してみようと思った!!!(泣)

是非参考までに!!!