レコード移動フォームにある「ID」「氏名」「性別」「年齢」「郵便番号」「住所」「電話番号」のラベルと「テキストボックス」を全てコピーし、新規作成したフォームデザイン上にペーストする。ボックス類の配置位置は適宜調整してほしい。
フォームのプロパティシートにある「レコードソース」にて、右の「v」アイコンをクリックして表示される項目より「顧客管理テーブル」を選択する。この指定を行っていないと、テキストボックス全般でデータが表示されないので忘れないようにしてほしい。
この他のテキストボックスは、レコード移動フォーム内で「コントロールソース」を指定した設定がそのままコピーされているはずなので、ここでは特に設定する必要はない。フォームデザイン画面上部の「フォーム1」のタブ上でマウスの右クリック→上書き保存する。フォーム名は「レコード検索フォーム」とする。
続いて、氏名と住所を検索するための「テキストボックスを」2個と、実行用の「ボタン」コントロールを配置する。「ラベル」「テキストボックス」「ボタン」の書式は、これまで設定してきた標準書式で構わない。
氏名テキストボックスの名前は「検索氏名テキストボックス」に、住所テキストボックスの名前は「検索住所テキストボックス」とする。同じく、ボタンの表題は「実行」とし、ボタンコントロールの名前は「実行ボタン」と指定しておく。
「レコードの先頭に戻る」ボタンも追加しておこう。もう1つボタンコントロールを配置して、表題を「先頭に戻る」、ボタンコントロールの名前を「先頭ボタン」とする。
コントロールの種類 | 名前 |
---|---|
テキストボックス | 検索氏名テキストボックス |
テキストボックス | 検索住所テキストボックス |
ボタン | 実行ボタン |
ボタン | 先頭ボタン |
レイアウトの完成形は、図7の通りだ。
では、「実行ボタン」を押したときのコードを記述していく。
「実行ボタン」コントロールを選択した状態で、プロパティシート→「イベント」タブをクリックする。「▼」アイコンで[イベントプロシージャ]を選択し、「…」アイコンをクリックするとVBEが開き、
Private Sub 実行ボタン_Click()
End Sub
のコードが生成される。これをリスト2のコードに書き換える。
Private Sub 実行ボタン_Click() If IsNull(検索氏名テキストボックス.Value) = True Then MsgBox ("氏名が未入力です。") Exit Sub End If If IsNull(検索住所テキストボックス.Value) = True Then MsgBox ("住所が未入力です。") Exit Sub End If DoCmd.OpenForm FormName:="レコード検索フォーム", DataMode:=acReadOnly DoCmd.SearchForRecord ObjectType:=acDataForm, ObjectName:="レコード検索フォーム", Record:=acNext, WhereCondition:="[氏名] LIKE '*" & 検索氏名テキストボックス.Value & "*' AND [住所] LIKE '*" & 検索住所テキストボックス.Value & "*'" End Sub
リスト2のコードは、以下のように記述してある。
「検索氏名テキストボックス」や「検索住所テキストボックス」が未入力の場合は、警告メッセージを表示して処理を抜ける。
DoCmd.OpenFormで「レコード検索フォーム」を開く。
DoCmd.SearchForRecordで、WhereConditionにLIKE演算子を使って、検索氏名テキストボックスに入力された値と「検索住所入力テキストボックス」に入力されたデータが含まれるレコードを検索させる。DoCmd.SearchForRecordの基本書式は下記の通りだ。
名前 | 説明 |
---|---|
acActiveDataObject | レコードはアクティブオブジェクトに含まれる |
acDataForm | レコードはフォームに含まれる |
acDataFunction | レコードはユーザー定義関数に含まれる |
acDataQuery | レコードはクエリに含まれる |
acDataReport | レコードはレポートに含まれる |
acDataServerView | レコードはサーバビューに含まれる |
acDataStoredProcedure | レコードはストアドプロシージャに含まれる |
acDataTable | レコードはテーブルに含まれる |
(出典:Office Dev Center「AcDataObjectType 列挙 (Access)」) |
なお、今回はacDataFormを指定している。
名前 | 説明 |
---|---|
acFirst | 先頭のレコードをカレントレコードにする |
acGoTo | 指定したレコードをカレントレコードにする |
acLast | 最後のレコードをカレントレコードにする |
acNewRec | 新しいレコードをカレントレコードにする |
acNext | 次のレコードをカレントレコードにする |
acPrevious | 前のレコードをカレントレコードにする |
(出典:Office Dev Center「AcRecord 列挙 (Access)」) |
今回は、次のレコードをカレントレコードにするacNextを指定している。よって、条件を満たすレコードが複数ある場合は、「実行」ボタンをクリックするたびに順次該当するレコードが表示される動きとなる。
「先頭ボタン」を選択した状態で、プロパティシート→「イベント」タブをクリックする。「▼」アイコンで[イベントプロシージャ]を選択し、「…」アイコンをクリックするとVBEが開き、
Private Sub 先頭ボタン_Click()
End Sub
のコードが生成される。これをリスト3のコードに書き換える。
Private Sub 先頭ボタン_Click() DoCmd.GoToRecord , , acFirst End Sub
リスト3は、DoCmd.GoToRecord , , acFirstで先頭のレコードに移動するように記述してある。書式は以下の通りだ。
objectTypeは表3の値を指定する。省略可能だ。objectNameは、objectTypeで選択した種類のオブジェクトの有効な名前を文字列式で指定する。こちらも省略可能だ。
acRecord表4の値を指定する。今回は、acRecordの値である「acFirst」を指定して先頭のレコードに移動している。
Copyright © ITmedia, Inc. All Rights Reserved.