ExcelVBA-Excelファイルをデータベースとして使う-その9です。 前回の記事はこちらになります。
hirocom777.hatenadiary.org
クラスモジュールの解説
今回は、前回紹介したクラスの詳細を説明しようと思います。クラスモジュールのリストは、上記の前回記事をご確認ください。
・概要
今回紹介したクラス-名付けてExcelデータベースクラス(clsExcelDbase)ですが、指定されたxlsx形式のファイルをデータベースとしてアクセスして接続、アクセスするためのクラスです。1つのデータベースに紐づいたオブジェクトを作成できます。構成は、以下のようになります。
・コンストラクタ
clsExcelDbaseのコンストラクタ(Class_Initialize)では、オブジェクトが生成された時の処理を記述しています。具体的にはADO接続オブジェクトを宣言してExcelファイル(xlsx)対象で設定。ADOレコードセットオブジェクトを宣言の、処理を行っています。
・デストラクタ
clsExcelDbaseのデストラクタ(Class_Terminate)では、オブジェクトが破棄される前の処理を記述しています。具体的にはトランザクションの終了処理と、データベース接続のクローズ処理です。(トランザクション処理については、別途トランザクションの項目を参照してください。)
・プロパティー
・dbFileName(データベースファイル名)
接続するデータベースファイル名です。このプロパティーによって接続するデータベースファイルを設定します。実在しないフィルは設定できません。また、一度設定すると変更することはできません。
・dbTableName(テーブル名)
接続するデータベースのテーブル名です。このプロパティーによってデータベースファイル内のどのテーブルに接続するかを設定します。先にdbFileNameを設定しないと設定することはできません。また、一度設定すると変更することはできません。dbTableNameが設定されると同時にデータベースへの接続処理が実行されます。また、トランザクション処理も開始されます。(トランザクション処理については、別途トランザクションの項目を参照してください。)接続が完了すると、接続したデータベースからフィールド名の一覧を取得してdbFieldListに格納します。
・dbFieldList(フィールド名リスト)
接続するデータベースのフィールド名リストです。バリアント形式の配列で返します。dbTableNameが設定されたときに接続したデータベースから取得されます。この値を変更することはできません。
・メソッド
メソッドは今のところ一つだけです。今後追加していく予定です。
・AddRecord(レコードの追加)
引数に指定したバリアント変数の1次配列をデータベースにレコードとして追加します。
使い方
使い方については前回の記事で紹介したプロシージャAddDataByClassを見ていただければわかると思います。以下のような流れで使います。
- データベースオブジェクトを宣言して、New clsExcelDbaseをセットします。
- データベースのファイル名とテーブル名をプロパティーにセットしてます。
- メソッドを使用してデータベースにアクセスします。(今は追加だけです)
- オブジェクトを使用しているプロシージャが終了するなどしてオブジェクトの参照がなくなるとデストラクタが起動して処理を確定します。また、Set オブジェクト = Nothingとすると終了します。
1度接続してしまえば、複雑な処理(SQLで検索した結果を確認してから、編集や書き込みを行うなど)が可能です。
トランザクション
上にも書いた通り、このクラスを使用したオブジェクトでは複雑な処理を纏めて実行することができます。でも、データベースでは複数の個所からデータベースにアクセスされることがあります。データ書き換え中にほかの端末から該当データにアクセスがあった場合、トラブルの原因になります。また、処理実行中にシステムに不具合(停電、LANケーブル抜け等々)が発生した場合データベースの内容が壊れてしまうと大変です。
トランザクションは、このようなトラブルに対応するためのものです。このクラスでは、データベース接続時にトランザクションを開始。処理完了時に問題がなければ処理内容を有効にします。エラーが発生した場合には、それまでのアクセス処理を無効にして接続をOFFにします。
つまり、このクラスモジュールを使用することによってデータベースアクセスの信頼性が増すってことですね!!(自我自賛!!)
以上、Excelファイルのデータベースアクセスクラスの説明でした。
次回はこのクラスにメソッドを追加して、より実用的に仕上げていこうと思います。お楽しみに!!
hirocom777.hatenadiary.org