AccessでSQLのLIKE演算子を使って「あいまい検索処理」の機能を実装する方法:Access VBAで学ぶ初心者のためのデータベース/SQL超入門(5)(3/3 ページ)
Accessを通じて、初心者がリレーショナルデータベースやSQLの基本を学び、データベースを使った簡単なシステムの作り方を習得する本連載。今回は、名前と住所による「あいまい検索処理」の機能をSQL文を使って実装する方法を解説する。
データ検索のコードを記述する
続いて、データ検索のためのコードを記述していく。
フォームが読み込まれたときの処理
今回は、前回とは異なり、ボタンをクリックしたときの処理のみならず、フォームが読み込まれたときの処理も必要となる。そこで、フォームが読み込まれたときのイベントプロシージャを記述する。
図2の画面から、まずフォーム全体を選択し(薄い青になった部分)、右クリックで「プロパティ」を選ぶ。表示された「プロパティシート」の「選択の種類」から、選択ボックスの「▼」アイコンをクリックして「フォーム」を選択。「イベント」タブから、「読み込み時」に[イベント プロシージャ]を指定する。その後「…」アイコンをクリックすると、「Visual Basic Editor」(以下、VBE)が起動し、下記のイベントプロシージャが生成される。
Option Compare Database
Option Explicit
Private Sub Form_Load()
End Sub
これを、以下のように書き換える。
Option Compare Database Option Explicit Private myRecordset As Recordset Private SQL As String Private Sub Form_Load() SQL = "" End Sub
「Option Explicit」の下にRecordset型の変数「myRecordset」変数と、文字列型の変数「SQL」を宣言し、Form_Load()イベント内で変数「SQL」は「””」(空欄)で初期化する。
ボタンがクリックされたときの処理
次に、「レコードの検索(氏名検索ボタン)」を選び、「プロパティシート」から「イベント」タブを選択する。先頭に「クリック時」という項目があり、その右端にあるドロップダウンの「▼」アイコンをクリックすると表れる、[イベント プロシージャ]を選択する。
その横にある「…」アイコンをクリックすると、VBEが起動する。「氏名検索ボタン_Click」時などの処理はここで記述する。下記のようにしておこう。
Private Sub 氏名検索ボタン_Click() ResultShow (1) End Sub
引数に「1」を渡してResultShowプロシージャを実行する。ResultShowプロシージャについては、後ほど解説する。
次に、「住所検索ボタン」がクリックされたときの処理を記述する。「氏名検索ボタン」と同様に、VBEを起動し、下記のようにしておこう。
Private Sub 住所検索ボタン_Click() ResultShow (2) End Sub
検索処理をResultShowプロシージャに記述する
ResultShowプロシージャのコードは以下に示すものだ。先ほどボタンクリック時の処理を書いた後のVBE上に貼り付けよう。
Private Sub ResultShow(flag As Integer) Select Case flag Case 1 SQL = "select * from 顧客管理テーブル where 氏名 LIKE" & "'" & 検索氏名テキストボックス.Value & "*';" Case 2 SQL = "select * from 顧客管理テーブル where 住所 LIKE" & "'" & 検索住所テキストボックス.Value & "*';" End Select Set myRecordset = CurrentDb.OpenRecordset(SQL) 結果リストボックス.RowSourceType = "Table/Query" 結果リストボックス.RowSource = SQL 検索結果個数ラベル.Caption = "検索結果は【" & 結果リストボックス.ListCount - 1 & "】件あります。" myRecordset.Close End Sub
先頭から解説しよう。SQL文のLIKE演算子を用いた検索が「あいまい検索」になる。
まず引数「flag」で条件分岐を行う。引数が「1」であった場合は、「LIKE」演算子を用いて、「検索氏名テキストボックス」に入力された値を含むレコードを抽出する「SQL」文を記述する(3〜4行目)。
引数が「2」であった場合は、LIKE演算子を用いて、「検索住所テキストボックス」に入力された値を含むレコードを抽出するSQL文を記述する(5〜6行目)。
9行目では、現在開いているデータベースをOpenRecordsetメソッドで開き、OpenRecordsetの引数には「SQL文」を指定する。ここでは、引数が「1」または「2」で生成したSQL文を指定することになる。
10行目では、リストボックスの「値集合タイプ」を設定するRowSourceTypeに「Table/Query」と指定。テーブル名、クエリ名、もしくはSQLステートメントを記述できるが、今回は「テーブルとクエリ」を指定している。
11行目のように、RowSourceに「SQL文」を指定することで、「SQL」で検索した結果が「結果リストボックス」内に表示される。
検索結果個数ラベルのCaptionには、「結果リストボックス」のListCountで表示されている個数を取得して表示させる(12行目)。検索結果の件数はこうして得る。「-1」したのは、「列見出し」もカウントされるため。その分を差し引くために「-1」としている。
ワンポイント
「ResultShow」プロシージャは直接VBE内にコードを書いたが、それ以外の方法もある。VBEメニューの「挿入」→「プロシージャ」と選択し、表示される「プロシージャの追加」ダイアログボックスへ、名前を「ResultShow」、種類を「Subプロシージャ」、適用範囲を「Privateプロシージャ」と選択して(図3)、「OK」ボタンをクリックする。
すると、
Private Sub ResultShow() End Sub
が生成されるので、引数に「Integer」型の「flag」を指定すればよい。
これを実行すると図4のように表示される。
検索結果が「結果リストボックス」に表示されたあとで、再度全てのデータを「結果リストボックス」に表示したい場合は、「検索氏名テキストボックス」や「検索住所テキストボックス」が未入力の状態で、「レコード検索」ボタンをクリックすると、全てのデータが表示される。
次回予告
「SQL」文を使用すると、簡単に必要なレコードが取得できることを理解できただろうか。
次回は、再度「SQL」文を使って、登録されているデータの編集処理を解説する。お楽しみに。
筆者紹介
薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所
薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。
1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。
2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。
Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。
Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)
Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとは
Accessを通じて、初心者がリレーショナルデータベースやSQLの基本を学び、データベースを使った簡単なシステムの作り方を習得する本連載。初回はデータベースの基本を理解し、Accessを使い始めてみよう - Access VBAでデータ入力フォームを作り、各コントロールを追加するためのデザインビューの使い方
今回は、テーブルを基にデータ入力フォームを作成し、ラベル、テキストボックス、コンボボックス、ボタンリストボックスを追加する手順を解説する - SQLとはどういう言語か
- Accessを使うなら最低限知っておきたいSQL文を使ったさまざまな種類のクエリ操作の基本
今回は、テーブルに「SELECT文」や「BETWEEN演算子」などのSQLを入力し、データベースに蓄積したレコードを抽出する方法を解説する - 初心者でも図解で分かる! VBEの基本的な使い方とVBAプログラムの基礎文法
- Accessでフォームからデータを追加し、Excelのシートにエクスポートする
- SQLとはどういう言語か
- 数値判定、乱数発生、数値の丸めなど、数値に関する4つの関数の使い方
- 制御文で道案内
- 使うほどに良さが分かる正規表現
- .NET Frameworkがサポートする正規表現クラスを徹底活用する(前編)
- .NET Frameworkがサポートする正規表現クラスを徹底活用する(後編)