|
ここでは、フォーム「登録内容変更」のイベント「開く時」へ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
|
|
|
|