メールマガジン【アクセスで作るシリーズ】


バックナンバー 【会計ソフト編】 Vol.50
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

    ACCESSで作るシリーズ  【会計ソフト編】

    発 行 : Yoshihisa Fukuda          2001. 4.14 Vol.50

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
--------------------------------------

 前回はレコードセットのプロパティとメソッドの紹介をしました。
 今回は、実際にテーブルを操作する方法を解説します。

== ◇ 第5章 拡張機能     ====================

--------------------------------------
 第5回 VBAでのテーブル操作
--------------------------------------

 今、ここに SAMPLE_DB.MDB というデーターベースの中に ABC_TABLE と言う
 テーブルがあるとします。
 そして ABC_TABLE には FIELD_1(テキスト型)のフィールドがあるとしましょう。
 ここで、FIELD_1 のデータをメッセージボックスに表示させるプログラムを作成
 してみましょう。

◆レコードセットを設定する。
 まず、最初にデータベースを開き、そのデーターベースオブジェクトを使用して
 テーブルを開きレコードセットを獲得します。
 以下がそのコードです。

 Dim SMPL_DB As Database
 Dim ABC_T As Recordset

 Set SMPL_DB = OpenDatabase("C:\DATABASE\SAMPLE_DB.MDB")
 Set ABC_T = SMPL_DB.OpenRecordset("ABC_TABLE")

 これで ABC_T に ABC_TABLE のレコードセットが設定されました。

 【解説】
 1行目はデータベースオブジェクトの変数宣言です。
 2行目はレコードセットオブジェクトの変数宣言です。
 4行目は SAMPLE_DB.MDB を開いて SMPL_DB にデータベースオブジェクトを設定
 しています。(SAMPLE_DB.MDB は C:\DATABASE\ にあるとします)
 5行目は ABC_TABLE を開いて ABC_T にレコードセットオブジェクトを設定して
 います。

 皆さんの中で気付かれた方がいらっしゃるかも知れませんが、今まで作成してきた
 会計ソフトで、実際に記述したコードと少し異なる所があります。
 皆さんは、Vol.43を見て下さい。
 ここではデータベースオブジェクトの設定を

 Set ACC_DB = CurrentDb

 としています。
 この様に、現在開いているデータベース(カレントデータベース)のオブジェクト
 を獲得する場合、CurrentDb が使えます。
 もちろん、SAMPLE_DB.MDB から、他のMDBファイルを開いて、その中のテーブルを
 参照、更新等もできます。
 その場合は前述の OpenDatabase を使用します。

 実は、皆さんに作成して頂いている会計ソフトでは、まだ1ヶ所だけ異なる記述
 方法の所があります。
 皆さん、Vol.21 を見て下さい。
 元帳の集計の所ですが、ここでレコードセットの獲得を

 Set Motocyo_T = CurrentDb.OpenRecordset("MotocyoTable")

 と1行でやってます。
 この様に、データベースオブジェクトを変数に代入せずにメソッドを実行する事
 もできるのです。

 如何でしょうか?
 同じ1つの事をやるにも、これだけの方法があります。
 皆さんは、あらゆる書籍やサンプルなどを参考にされていると思いますが、その時
 その時で違った書き方がされていると、解りづらいと思います。
 そこでまず、オブジェクト、プロパティ、メソッドなどをしっかり理解しましょう。

◆フィールドのデータをメッセージボックスに表示させる。
 レコードセットオブジェクトを使用してデータを参照するのですが、単純に最初の
 1レコードのデータのみ表示する場合、

 MsgBox ABC_T.Fields("FIELD_1")

 で良いでしょう。

 では、ABC_TABLE に入っている全てのレコードのデータを1つずつ表示するには
 どうすれば良いでしょう。
 まず、レコードを先頭から1レコードずつデータが無くなるまでのループを作成
 します。
 そして、その中でメッセージボックスの表示をさせます。

 Dim SMPL_DB As Database
 Dim ABC_T As Recordset

 Set SMPL_DB = CurrentDb
 Set ABC_T = SMPL_DB.OpenRecordset("ABC_TABLE")

 ABC_T.MoveFirst
 While ABC_T.EOF = False
  MsgBox ABC_T.Fields("FIELD_1")

  ABC_T.MoveNext
 Wend
 
 プログラムは、こんな感じになるでしょう。

 【解説】
 1~5行目まではもう大丈夫でしょう。
 7行目では ABC_TABLE のカレントレコードを先頭に移動しています。
 通常は、テーブルを開いた時は、カレントレコードは先頭にいますが、明示的に
 先頭行に移動をする事をお勧めします。

 8行目はABC_TABLE のデータが無くなるまでループするWhile文です。
 ABC_TABLE のデータが無くなると、ABC_T の EOF プロパティが True になります。
 従って、このWhile文ではABC_T の EOF プロパティがFalseの間ループさせる訳です。

 9行目はメッセージボックスでデータを表示しています。
 ABC_T.Fields("FIELD_1")でABC_TABLEのFIELD_1と言うフィールドが参照できます。
 また、これを ABC_T.Fields(0) とも記述できます。
 これはABC_TABLEのフィールドの1番目という意味です。
 Fields プロパティは、フィールド名でも、フィールドの位置(先頭が0から)でも
 指定できます。

 11行目はABC_TABLEのカレントレコードを次のレコードに移動しています。
 カレントレコードが最終レコードの時、このMoveNextを行うとABC_TABLE の EOF
 プロパティがTrueになり、While文を終了します。

--------------------------------------
今回は、幾つかのプロパティとメソッドを使用してデータの参照をしてみました。
次回は、データの追加、更新、削除をやってみましょう。
______________________________________
◆◇ Q&Aコーナー    ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇

 今回はありません。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

◇ ACCESSで作るシリーズ 【会計ソフト編】
◇ 発 行 元  :Yoshihisa Fukuda(福田 義久)
◇ ご意見・ご要望
  ご質問等   :y.fukuda@ro.bekkoame.ne.jp

◇ このメールマガジンは、インターネットの本屋さん『まぐまぐ』を利用して発行
  しています。(まぐまぐID:0000030446)
◇ バックナンバー:http://www.bekkoame.ne.jp/ro/y.fukuda/
◇ 登録・解除  :http://www.bekkoame.ne.jp/ro/y.fukuda/

 Copyright(C) 2000-2001 Yoshihisa Fukuda All rights reserved.

◇転載について
 このメールマガジンの無断転載などは、一切禁止です。
 転載をご希望の方は、事前にメールで連絡をください。
◇免責
 このメールマガジン及びホームページの内容による、いかなる損害、障害などに
 関して発行者は一切の責任を負いません。
 掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□