前回MySQL上に作成した郵便番号取り込み用のテーブルに実際のデータを取り込んでみます。
方法は幾つかあるようですがまずは一度Accessに取り込んだ後、DAOを使用してデータを送り込む方式を試してみます。
ちなみにCSVデータは日本郵便のサイトからダウンロードできるため、これを利用していきます。
ダウンロードできるファイルはLZH形式、ZIP形式のいずれかで圧縮されているのでこれを解凍すると「ken_all.csv」なるファイルが現れます。
では実際にデータ取り込みを行うフォームを以下のように作成してみました。
流れとしては
- Access内のローカルテーブルにCSVファイルをインポート
- DAOレコードセットとExecuteを使用してデータをサーバへ送り込む
といった流れです。
こんな感じで殺風景なフォームで申し訳ないのですが、いちおうダイアログを開いてファイル検索ができるようにしてあります。
選んだファイル名がテキストボックスに表示されるので、ファイル名を確認したら取込ボタンを押すと取込が始まる、という寸法です。
詳しくはコチラのmdbの中身をご覧頂くとなんとなく分かるかと思います。
(相変わらず美しくないコードで申し訳ないですが)
※なお、VBA内で使用している変数で「GLB_CON」というものがありますが、もともとこれは別のモジュールで定義しているグローバル変数的なもので、ODBC接続文字列を格納していますのでこれを置き換えるとすぐ使えるかと思います。
さて、これでデータ取込処理を行ってみたのですが・・・
長い!!
テストとして時間を計りたかったのでストップウォッチで計測してみたんですが、1分30秒を過ぎても終わる気配が無いため処理を中断して取り込んだ件数を数えてみたら・・・
わずか600件あまり。
郵便番号のデータ件数をみると約100,000件もあるじゃないですか!?
ということはこの方法でいくと・・・4時間半以上かかるのか。。。
こりゃ駄目だと即断念しました。
ちなみにこれ、会社のシステムを参考にして作ってみたのですが、会社ではここまで時間が掛かるイメージないのになぁ・・・と思いながら今回の失敗の原因を考えるとですね、
- データ件数の違い
- サーバ本体の性能
- データベースソフトの違い
などが思い当たります。
会社で取り込みを行うデータ件数はよく考えたらたかだか200件程度。
100,000件とは桁が違いますな。
続いてサーバの性能。
5、6年前のサーバとはいえ、会社のはそれなりにお金の掛かったFTサーバでしかもスペックも自宅のポンコツ(通販で約10,000ぐらい)とはかけ離れているでしょう。
データベースソフト、はどうなんでしょうね?
会社はOracle10gなんですが、上の二つに比べたら大した差じゃなさそうに思います。
ともあれ、これじゃ話にならないので別の方法を考えなきゃ。