データベース作成

Access VBA データベース作成6 SQLでLike演算子 検索フォームの作成2

データベース作成6 検索フォームの作成2

実践データベース作成の第6回目は検索フォームの作成Part2です。
前回はフォームの読み込み時のイベントを作成しましたので、今回は検索条件を基に検索を実行しリストボックスへ表示するプログラムを作成します。
・検索条件からデータを抽出
・リストボックスへ表示
上記のような流れになります。

では、実際にVBAをどのように組み込んでいくのか説明します。

コマンドボタン(検索)のクリックイベント

コマンドボタンのイベントは「クリック時」になります。

sakusei18

sakusei19
コマンドボタンの「クリック時」には以下のプログラムを実行します。
1.検索結果を表示するリストボックス「検索結果リスト」のデータをリセット
(何度も検索した場合に検索結果が重複しないようにリセットをする)
2.SQLを実行
3.検索されたデータを「検索結果リスト」に表示
実際のプログラムは以下のようになります。

プログラムの例

Private Sub 検索コマンド_Click()

Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim SQL As String

Me.検索結果リスト.RowSource = “”

Set CN = CurrentProject.Connection
Set RS = New ADODB.Recordset

SQL = “SELECT ”
SQL = SQL & “T_社員マスタ2013.社員コード, ”
SQL = SQL & “T_社員マスタ2013.名前, ”
SQL = SQL & “T_社員マスタ2013.性別コード, ”
SQL = SQL & “T_性別マスタ.性別, ”
SQL = SQL & “T_社員マスタ2013.所属部署コード, ”
SQL = SQL & “T_所属部署マスタ.所属部署名, ”
SQL = SQL & “T_社員マスタ2013.入社年月日 ”
SQL = SQL & “FROM ”
SQL = SQL & “(T_社員マスタ2013 ”
SQL = SQL & “INNER JOIN T_性別マスタ ”
SQL = SQL & “ON T_社員マスタ2013.性別コード = T_性別マスタ.性別コード) ”
SQL = SQL & “INNER JOIN T_所属部署マスタ ”
SQL = SQL & “ON T_社員マスタ2013.所属部署コード = T_所属部署マスタ.所属部署コード ”
SQL = SQL & “WHERE ”
SQL = SQL & “(((T_社員マスタ2013.名前) Like ‘%” & Me.名前 & “%’) ”
SQL = SQL & “AND ((T_社員マスタ2013.性別コード) Like ‘%” & Me.性別コード & “%’) ”
SQL = SQL & “AND ((T_社員マスタ2013.所属部署コード) Like ‘%” & Me.所属部署コード & “%’));”

RS.Open SQL, CN, adOpenStatic, adLockOptimistic
If RS.EOF = False Then

Me.検索結果リスト.ColumnCount = 2
Me.検索結果リスト.ColumnWidths = “1.0cm;3.0cm”
Me.検索結果リスト.RowSource = “コード;名前”
Me.検索結果リスト.RowSourceType = “値リスト”

Do Until RS.EOF

Me.検索結果リスト.RowSource = Me.検索結果リスト.RowSource & “;” & RS!社員コード & “;” & RS!名前

RS.MoveNext
Loop

End If

RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing

End Sub

プログラムの説明

「検索結果リスト」のデータをリセット

【Me.検索結果リスト.RowSource = “”】で空のリストボックスにします。

SQLの実行

SQL文中の「WHERE」句がポイントになります。

SQL = SQL & “WHERE “
SQL = SQL & “(((T_社員マスタ2013.名前) Like ‘%” & Me.名前 & “%’) “
SQL = SQL & “AND ((T_社員マスタ2013.性別コード) Like ‘%” & Me.性別コード & “%’) “
SQL = SQL & “AND ((T_社員マスタ2013.所属部署コード) Like ‘%” & Me.所属部署コード & “%’));”

【Like ‘%” & Me.名前 & “%’】通常単一の文字列データを検索する場合は【= ‘” & Me.名前 & “‘】と記述すればテキストボックス内のデータを検索条件として読み込めるのですが、今回は「Likeと%」を使いあいまい検索を実行しています。
たとえば、「わたなべこうすけ」を検索したい場合、【= ‘” & Me.名前 & “‘】ですとフルネームで入力しなければ検索できませんが、【Like ‘%” & Me.名前 & “%’】ですと「わたなべ」でも「こうすけ」でも「わ」でも検索可能です。また、空欄にすると全てのデータが検索対象になります。今回は全ての条件式に「Likeと%」を使用していますので、全ての検索条件が未入力の状態であれば全データが表示されます。

検索結果をリストボックス「検索結果リスト」に表示

検索結果がゼロでなければDo~Loop処理を使用して「検索結果リスト」に「社員コード」と「名前」を表示します。
ADOでレコード抽出
リストボックスの作成

sakusei18
各条件を入力後「検索ボタン」を押し、検索結果リストに検索結果が表示されれば成功です。

ここまでいかがでしょうか?
今回のポイントはSQLの書き方です。
・WHERE句内の条件式の書き方
・あいまい検索を行う為に「Like演算子」を使用する
以上を理解出来ればどんなことにでも応用が可能で、クエリをひとつも使用することなくデータベースを作成することが出来ます。

次回は検索フォーム作成のPart3として、リストボックスのデータを使用してのデータ検索になります。

こちらの記事もおすすめ!