*

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

公開日: : 最終更新日:2014/04/20 データベース作成

データベース作成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として、リストボックスのデータを使用してのデータ検索になります。

スポンサーリンク

ad-pc

ad-pc

関連記事

sakusei02

Access VBA データベース作成1 ADO参照設定

データベース作成1 準備 データベース作成の実践編として数回に渡り、AccessVBAを使用したデ

記事を読む

sakusei20

Access VBA データベース作成7 リストボックスの値取得 検索フォームの作成3

データベース作成7 検索フォームの作成3 実践データベース作成の第7回目は検索フォームの作成Par

記事を読む

sakusei15

Access VBA データベース作成4 新規レコード追加 登録フォームの作成2

データベース作成4 登録フォームの作成2 実践データベース作成の第4回目は登録フォームの作成Par

記事を読む

sakusei22

Access VBA データベース作成8 コンボボックスの選択データを表示 編集フォームの作成1

データベース作成8 編集フォームの作成1 実践データベース作成の第8回目は編集フォームの作成Par

記事を読む

sakusei17

Access VBA データベース作成5 コンボボックスの作成 検索フォームの作成1

データベース作成5 検索フォームの作成1 実践データベース作成の第5回目は検索フォームの作成Par

記事を読む

sakusei12

Access VBA データベース作成3 新規レコード取得 登録フォームの作成1

データベース作成3 登録フォームの作成1 実践データベース作成の第3回目は登録フォームの作成を行い

記事を読む

sakusei27

Access VBA データベース作成10 フォームを開く メインフォームの作成

データベース作成10 メインフォームの作成 実践データベース作成の第10回目はメインフォームの作成

記事を読む

sakusei11

Access VBA データベース作成2 テーブルの作成

データベース作成2 テーブルの作成 実践データベース作成の第2回目はテーブルの作成を行います。

記事を読む

sakusei24

Access VBA データベース作成9 データの更新 編集フォームの作成2

データベース作成9 編集フォームの作成2 実践データベース作成の第9回目は編集フォームの作成Par

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

転職01
初心者がAccess VBAの仕事に就く為には

初心者がAccess VBAを使った仕事に就く 私はSEやITエンジ

sound01
Access VBA 音を鳴らす PlaySound

音を鳴らす PlaySound Access上で効果音を鳴らすプログ

pass01
Access VBA フォームをパスワードで制限

フォームをパスワードで制限 Accessで作成したデータベース使用時

prg01
Access VBA 処理の進行状況を表示するプログレスバー(ProgressBar)

処理の進行状況を表示するプログレスバー Accessで処理に時間のか

excel03
Access VBA AccessのデータをExcel(エクセル)へ変換

AccessのデータをExcel(エクセル)へ変換 Accessで使

→もっと見る

PAGE TOP ↑