ExcelVBA-Excelファイルをデータベースとして使う-その7です。 前回の記事はこちらになります。
hirocom777.hatenadiary.org
対策を考える
ADOでExcelファイルデータベース書き込みのスピードを測ってみたもののスピードは激遅!!原因は簡単で1レコード書き込む度にデータベース接続をON/OFFやっているから、ってのが前回まででした。書き込む量が1レコードだけだったらこれでもいいのかもしれないけれど、まとまった量をアクセスする場合は困る。CPUへの負担もかなりのものでしょうね。
こういう場合は、
・データベースを開く
・まとまったデータを書き込む
・データベースを閉じる
という手順でプログラムを組んでいけば、それなりのスピードが出ると思われます。でもね、そんなことやっても応用の利かないプログラムができるだけ。開くと閉じるの間には、検索したり、読んだり、編集したり色々複雑な処理が出てくることもある,って言うかそのほうが多い。処理が変わるたびにプログラムを組みなおさなければなりません。使い勝手がよくなければナイスなプログラムじゃないですよね。
そこで考えました・・・
ひょっとして、これってクラスモジュールで何とかならないかな?
でた、クラスモジュール。今まで何度も勉強してきましたが理解には及ばず。それでも地道に取り組み続けて最近ちょっとだけわかったような気になっている。これって、クラスモジュールの使いどころじゃないのでしょうか?
クラスって??
さて、その前にクラスとは何なのか僕なりの解釈で書きたいと思います。当然僕の解釈ですのであてずっぽうです。鵜呑みにしないでくださいね!!あと、間違いがわかる人教えてください。よろしくお願いします!!
クラスとは・・・プログラム生産、管理を効率化するためのプログラムの設計図または、設計図を作る仕組み。データを記憶する部分(変数、プロパティー?)と動くコード(メソッド?)の組み合わせ方を設計図として書いてあります。
クラスをもとに作られた実際のプログラム(実体化されたもの)がオブジェクトと言われます。この時、オブジェクトはクラスのインスタンス(実体化例)であるといわれます。実体化されたオブジェクトには、プロパティー(データ)やメソッド(プログラム)が組み込まれていて、それらを使ってオブジェクトを操作することができます。
クラスの中には実際にオブジェクトを作る際に使用するプログラムが入っていて、それをコンストラクタと呼びます。クラスはコンストラクタを使ってオブジェクトを作ります。また、オブジェクトが役割を終えて消去されるときに使用されるプログラムもあって、デストラクタと呼ばれます。クラスはデストラクタを使ってオブジェクト消去時に必要な処理を実行します。コンストラクタもデストラクタもメソッドの一種です。
どうでしょう!?
作戦!!
どんなクラスを作るのか作戦です。データベース(ファイルとテーブル)を指定してコントロールできるオブジェクトを作ろうと思います。データベースコントロールのオブジェクトを作るにあたって、最初に必要な処理をオブジェクト作成時(コンストラクタ実行時)にまとめてしまいます。残念ながら、VBAではコンストラクタで値(この場合はデータベースのファイル名とテーブル名)を指定することができませんので、これらは別途設定できるプロパティーを持とうと思います。
プロパティー(ファイル名とテーブル名)が決まればデータベース接続の準備は出来上がりですので、直ちにデータベースに接続します。
データベース接続が終わったら、オブジェクトのメソッドを使用してデータベースにアクセスしたり、検索したりします。
この時に、呼び出すメソッドの種類、メソッドに使用する設定などを組み合わせることで様々なデータベース操作を実現します。
書き込みのメソッドを繰り返せば大量の書き込みもできますし、データベースの接続ON/OFFが間に発生しないからスピードも速いはずです。
一通りのデータベース処理が終了して用済みになったら、デストラクタを使用してオブジェクトを消去します。この時に、データベースを閉じる作業も一緒に実施します。
どうでしょうか?正直初めて自分でクラスというものを考えてみたのですが合ってますかね?
達人たちは、どうやってクラスを考えているのでしょうか?よかったら教えてください。
次回は、今回立てた作戦をもとにデータベースコントロールクラスを作成してリベンジしようと思います。お楽しみに!!
hirocom777.hatenadiary.org
ExcelVBA-Excelファイルをデータベースとして使う連載はコチラからどうぞ!!