16.データ呼び出し処理の作成
データ呼び出し処理のフロー データ呼び出し処理は、アドレス帳テーブルに登録してあるプロフィール情報を読み込み、フォーム「登録内容変更」に表示するための処理です。

プロフィール情報の呼び出し方法は、メニューに表示している一覧のうち、修正を加えたいプロフィールのレコードセレクタをダブルクリックすることで行います。
フォーム「登録内容変更」を開く
ここでは、フォーム「登録内容一覧」のイベント「ダブルクリック時」へVBAコードを記述します。まずは、フォーム「登録内容一覧」をデザインビューで開いて下さい。

VBAを使ってフォームを開くときは、ご存じの通りDoCmd.OpenFormという命令を使います。フォーム「登録内容変更」は、フォーム「登録内容一覧」のレコードセレクタをダブルクリックしたときに開くようにしますが、レコードセレクタをダブルクリックしたときにこの命令(VBAコード)を実行したいときは、フォームのイベント「ダブルクリック時」というイベントプロシージャを使います。

フォームのイベント「ダブルクリック時」へ、イベントプロシージャを記述するときは、プロパティウィンドウで「ダブルクリック時」を選択し、をクリックしてください。

Visual Basic Editorが開いたら、イベントプロシージャ「Form_DblClick」へ次のようにVBAコードを記述します。


 ■イベントプロシージャ「Form_DblClick」の作成例
Private Sub Form_DblClick(Cancel As Integer)

    '16.データ呼び出し処理の作成
    '記述先:フォーム[登録内容一覧]/フォーム[ダブルクリック時]

    'フォーム「登録内容変更」を開きます
    DoCmd.OpenForm "登録内容変更"

End Sub
 ※これは、Access VBAです。

VBAコードを記述したら、フォームが開くかどうかを確認してみよう。フォーム「アドレス帳メニュー」をフォームビューで開き、一覧のレコードセレクタをダブルクリックしてください。フォーム「登録内容変更」が開くはずです。
データ呼び出し処理の作成
ここでは、フォーム「登録内容変更」のイベント「開く時」へVBAコードを記述します。まずは、フォーム「登録内容変更」をデザインビューで開いて下さい。

フォーム「登録内容変更」をデザインビューで開いたら、フォームのイベント「開く時」へVBAコードを記述する準備を(プロパティウィンドウで「開くとき時」を選択しをクリック)しましょう。

データ呼び出しでの処理は、「1.実行するSQL(SELECT命令)の組み立て」、「2.SQLの実行しテーブルからデータを取り出す」、「3.取り出したデータをテキストボックスなどへセット」の順序で行います。データ呼び出しでのポイントは、SELECTを実行して得たレコードセットの扱いと、フォームのコントロールへ値をセットするところです。

VBAコードを記述したら、データの呼び出し処理が正常に動作するか確認してみよう。手順は、フォーム「アドレス帳メニュー」をフォームビューで開き、一覧にのレコードセレクタをダブルクリックしてください。フォーム「登録内容変更」に選択したプロフィール情報が表示されるはずです。

 ■イベントプロシージャ「Form_Open」の作成例
Private Sub Form_Open(Cancel As Integer)

    '16.データ呼び出し処理の作成
    '記述先:フォーム[登録内容変更]/フォーム[開く時]

    'フォームを最大化します
    DoCmd.Maximize

    Dim objDB  As New MDBAccess 'データベース操作クラス
    Dim strSQL As String        'SQL組み立て用

    'SQLの組み立て
    strSQL = ""
    strSQL = strSQL _
           & "SELECT  * " _
           & "  FROM  アドレス帳テーブル" _
           & " WHERE  レコードキー =" _
           & Forms("アドレス帳メニュー").一覧.Form("レコードキー").Value

    'SELECTの実行と結果判定
    If objDB.ExecSelect(strSQL) = True Then

       'SELECTが成功したときはフォームのコントロールへ取得した内容をセットする
       Me.漢字氏名.Value = objDB.GetRS.Fields("漢字氏名").Value
       Me.カナ氏名.Value = objDB.GetRS.Fields("カナ氏名").Value
       Me.性別.Value = objDB.GetRS.Fields("性別コード").Value
       Me.関係.Value = objDB.GetRS.Fields("関係コード").Value
       Me.生年月日.Value = objDB.GetRS.Fields("生年月日").Value
       Me.職業.Value = objDB.GetRS.Fields("職業").Value
       Me.郵便番号.Value = objDB.GetRS.Fields("郵便番号").Value
       Me.都道府県.Value = objDB.GetRS.Fields("都道府県コード").Value
       Me.住所.Value = objDB.GetRS.Fields("住所").Value
       Me.電話番号.Value = objDB.GetRS.Fields("電話番号").Value
       Me.FAX番号.Value = objDB.GetRS.Fields("FAX番号").Value
       Me.携帯等電話番号.Value = objDB.GetRS.Fields("携帯等電話番号").Value
       Me.PCメールアドレス.Value = objDB.GetRS.Fields("PCメールアドレス").Value
       Me.携帯メールアドレス.Value = objDB.GetRS.Fields("携帯メールアドレス").Value
       Me.備考.Value = objDB.GetRS.Fields("備考").Value

       '非表示フィールドです。更新時のレコード特定に使います。
       Me.レコードキー.Value = objDB.GetRS.Fields("レコードキー").Value

    'SELECTが失敗したとき
    Else

       '登録失敗メッセージ
        MsgBox "DBエラーが発生しました", vbOKOnly + vbExclamation, "呼び出し失敗"

       'フォームを閉じる
       DoCmd.Close acForm, "登録内容変更"

    End If

    'クラスのインスタンスを破棄
    Set objDB = Nothing

End Sub
 ※これは、Access VBAです。

■このプロシージャの解説

SQLの組み立てです。一覧で選択したレコードがテーブルから取り出せるSQLを組み立てなくてはなりません。アドレス帳テーブルは、レコードキーというフィールドで全てのデータをユニークにしているので、このフィールドを使ってデータを取り出すようにしています。

ここで重要になるのが、一覧の中に作成した見えないテキストボックスレコードキー」です。このテキストボックスは、プロフィール情報を特定するためのテキストボックスなので、画面には表示しませんでした。しかし、値の取得は可能です。このテキストボックスの値を取得し、WHERE句の条件として使用しましょう。


    'SQLの組み立て
    strSQL = ""
    strSQL = strSQL _
           & "SELECT  * " _
           & "  FROM  アドレス帳テーブル" _
           & " WHERE  レコードキー =" _
           & Forms("アドレス帳メニュー").一覧.Form("レコードキー").Value


なお、一覧に複数件のデータが表示されていても、取得する情報はダブルクリックした行の情報なのでご安心を。


           & " WHERE  レコードキー =" _
           & Forms("アドレス帳メニュー").一覧.Form("レコードキー").Value


組み立てたSQLの実行です。SQLを実行するときは、クラスモジュール「MDBAccess」を使って行いますが、この処理で実行するSQLはSELECT命令です。SELECT命令を実行するとレコードセットが返る(もちろん、そのレコードセットを使う…)ので、クラスモジュールの「ExecSelect」というメソッドを使って(SQLを)実行しています。


    'SELECTの実行と結果判定
    If objDB.ExecSelect(strSQL) = True Then


取得したデータをフォーム上のコントロールへセットする処理です。ポイントは、レコードセットからフィールドの情報を取り出し、その値をコントロールへセットしている所です。アドレス帳ツールでは、クラスモジュールのプロパティ「GetRS」をレコードセットとして扱える仕組みになっているため、フィールド値の取得もこのプロパティ(GetRS)を使って行います。

なお、この処理はフォーム「登録内容変更」だけに限定した処理ので、フォームの指定には「Me」を使用しています。


       'SELECTが成功したときはフォームのコントロールへ取得した内容をセットする
       Me.漢字氏名.Value = objDB.GetRS.Fields("漢字氏名").Value
       Me.カナ氏名.Value = objDB.GetRS.Fields("カナ氏名").Value
       Me.性別.Value = objDB.GetRS.Fields("性別コード").Value
       Me.関係.Value = objDB.GetRS.Fields("関係コード").Value
       Me.生年月日.Value = objDB.GetRS.Fields("生年月日").Value
       Me.職業.Value = objDB.GetRS.Fields("職業").Value
       Me.郵便番号.Value = objDB.GetRS.Fields("郵便番号").Value
       Me.都道府県.Value = objDB.GetRS.Fields("都道府県コード").Value
       Me.住所.Value = objDB.GetRS.Fields("住所").Value
       Me.電話番号.Value = objDB.GetRS.Fields("電話番号").Value
       Me.FAX番号.Value = objDB.GetRS.Fields("FAX番号").Value
       Me.携帯等電話番号.Value = objDB.GetRS.Fields("携帯等電話番号").Value
       Me.PCメールアドレス.Value = objDB.GetRS.Fields("PCメールアドレス").Value
       Me.携帯メールアドレス.Value = objDB.GetRS.Fields("携帯メールアドレス").Value
       Me.備考.Value = objDB.GetRS.Fields("備考").Value

       '非表示フィールドです。更新時のレコード特定に使います。
       Me.レコードキー.Value = objDB.GetRS.Fields("レコードキー").Value

次は「変更処理の作成」です
データの呼び出し処理の作成が終わったら、いったんフォームやVisual Basic Editorを全て閉じ「17.変更処理の作成」へ進みましょう!

ちなみに、閉じるときは保存も忘れずに…
Copyright(C) 1999-2006 結城圭介。 All rights reserved