メールマガジン【アクセスで作るシリーズ】
バックナンバー 【会計ソフト編】 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.
◇転載について
このメールマガジンの無断転載などは、一切禁止です。
転載をご希望の方は、事前にメールで連絡をください。
◇免責
このメールマガジン及びホームページの内容による、いかなる損害、障害などに
関して発行者は一切の責任を負いません。
掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
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.
◇転載について
このメールマガジンの無断転載などは、一切禁止です。
転載をご希望の方は、事前にメールで連絡をください。
◇免責
このメールマガジン及びホームページの内容による、いかなる損害、障害などに
関して発行者は一切の責任を負いません。
掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□