Lesson11 非連結フォームからレコードを操作する【レコード検索編】

スポンサーリンク

Lesson10 で使用したフォームにボタンを一つ加えます。このボタンを押したとき、フォームに入力した内容にレコードを更新します。

ボタンの名前は、btn_検索 とします。

クリック時のイベントプロシージャへ、以下のとおりコードを記述してください。

使用される際は、そちらの環境で十分テストのうえ使用してください。

Option Compare Database
Option Explicit

Dim db As DAO.Database
Dim strSQL As String
Dim rst As DAO.Recordset ←Lesson11で新たに追加しました

Private Sub btn_検索_Click()

Set db = CurrentDb
strSQL = "select * from 基本情報 where ID=" & Me.txt_ID

Set rst = db.OpenRecordset(strSQL)

If rst.RecordCount = 0 Then

    MsgBox "該当者なし", vbCritical
Else

    Me.txt_氏名 = rst!氏名
    Me.txt_シメイ = rst!シメイ
    Me.txt_生年月日 = rst!生年月日
End If

rst.Close
End Sub

記述が完了したら一度上書き保存して、フォームを閉じてください。

続いて、「基本情報」テーブルを開け、テストデータを入力しましょう。

IDに11、
氏名に 照会 太郎 、
シメイに ショウカイ タロウ 、
生年月日に 2015/3/1

と入力してテーブルを閉じます。

終わりましたら、再度、「入力画面」フォームを開けてください。

テキストボックス「ID」に、11 を入力し、「検索」ボタンをクリックしてください。

先ほど、テーブルに直接入力したレコードが表示されました。

ちなみに、存在しないIDを指定するとエラーメッセージを表示します。

では、解説です。

今回は、「レコードセット」という仕組みを使います。

クエリの種類には、実行系と参照系の二種類があります。Lesson8~10で使用した追加、更新、削除を実行するクエリを実行系クエリ(アクションクエリ)といい、これに対して参照系とは、選択クエリをさします。

実行系がテーブルに対して追加、更新、削除といった変更を行うのに対し、参照系は、指定した抽出条件に基づいてテーブルから該当するレコードを抽出し、画面へ表示します。

この、テーブルから抽出して画面に表示されたレコードの集まりのことを 「レコードセット」 といいます。

Lesson11では、クエリで抽出したレコードセットをレコードセットオブジェクトに代入し、そこから画面に配置したテキストボックス等に値を貼り付けています。

strSQL = "select * from 基本情報 where ID=" & Me.txt_ID

変数 strSQL に SQL文を組み立てて代入しています。

SQL文とは、データーベースを操作する命令文のことです。
ここでは、レコードの抽出を行うので、選択クエリに相当するSQL文を組み立てています。

select■[データを入力するフィールド名1],[データを入力するフィールド名2],…[データを入力するフィールド名n]■from■[レコードを追加するテーブル名]■where■[更新する範囲指定]

■は半角スペースを表しています。

この例では変数 strSQL に代入された値は、

select * from 基本情報 where ID=11

となります。

なお、select の次にある *(アスタリスク)は、テーブルにあるすべてのフィールドを指定していることを意味します。

次に、組み立てたSQL文から得られた結果を、レコードセットオブジェクトへ代入します。

Set rst = db.OpenRecordset(strSQL)

得られたレコードを数え、0(ゼロ)でなければ画面上のテキストボックスへ、対応するフィールドのデータを貼り付けます。

If rst.RecordCount = 0 Then  ← レコードセットオブジェクトに代入したレコード数をカウント

    MsgBox "該当者なし", vbCritical ← レコード数が0(ゼロ)であればメッセージボックスを表示

Else  ← レコード数が0(ゼロ)でないときは、以下の処理を実行

    Me.txt_氏名 = rst!氏名  ← テキストボックス txt_氏名 へ氏名フィールドのデータを代入

    Me.txt_シメイ = rst!シメイ  ← テキストボックス txt_シメイ へシメイフィールドのデータを代入

    Me.txt_生年月日 = rst!生年月日  ← テキストボックス txt_生年月日 へ生年月日フィールドのデータを代入

End If
rst.Close ← OpenRecordset で生成したレコードセットを閉じます。

※この処理を忘れるとバグの原因となったり思わぬところに影響することがあります。「開けたら閉める」と覚えておきましょう。

コメントをどうぞ!

  1. ももそらママ より:

    とても分かりやすく、仕事の参考にさせていただいております。本当に助かります!ありがとうございます!!

    • 和休 和休 より:

      ももそらママさん、コメントありがとうございます。
      おほめいただきまして、ありがとうございます。
      もし、「こんな場合どうしたらいい?」というリクエストがありましたら、お問い合わせフォームやコメントから送ってくださいネ。
      もちろん、対応できないこともありますが、できるだけお力添えできるよう努力します!

タイトルとURLをコピーしました