今回の開発は
あるデータを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記述
1 2 3 4 5 6 7 8 9 10 11 |
'# DAO接続 Dim db As DAO.Database Dim rs As DAO.Recordset Dim sSql As String Set db = OpenDatabase(csvPath, False, False, "Text;DATABASE=" & csvPath) sSql = "SELECT * FROM [" & csvName & "]" Set rs = db.OpenRecordset(sSql, dbOpenDynaset) 'csvPath:CSVファイルの格納先(フルパスではない) 'csvName:CSVのファイ名(拡張子含む) |
※ちなみにADOは以下記事を参考に

INSERTはSQL文を使わずやってみた!
CSVにデータをINSERTする際
INSERT処理のSQL文を生成して実行するのは
とてもめんどくさい。。
1 2 3 4 5 6 7 8 |
With rs .AddNew .Fields("キャンペーン名") = "キャンペーンABC" .Fields("コンポーネントの種類") = "キャンペーン" .Fields("配信設定") = "オフ" .Fields("キャンペーン予算(日額)") = 1000 .Update End With |
先ほどの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文生成をやらなかった自分が悪かったのだ…。
これからはきちんと
色々試してみようと思った!!!(泣)
是非参考までに!!!