これはアクセスデータベース(以下Access)では良く使うテクニックだと思いますが、久々に使おうとすると意外と時間がかかってしまうものです。
何をしたいのか?説明
上の様なテーブルがあり、shipperというのがあるリストが入っており、searchkeyというのが、コンボボックスに表示させたいキーワードになります。
そして、
ココがポイント
これをフォームに設定して、キーワードでレコードを抽出したい!
コンボボックスの設定
まず、重複しているキーワードをまとめたい。
いつもこの作業には悩むのですが、コンボボックスのクエリで、グループ化するのに、一旦、「クロス集計」ボタンを押さないと集計が出てこないので、押してから、再度「選択」をクリックして戻すって事をやっています。
並び替えで、アルファベット順、五十音順にするために、「昇順」の設定をしました。
あと注意したいのが連結列とか、列数(今回の設定では、1)などをチェックしないと余計な列が表示されたりする。
選択後レコードソースに設定
あとは、コンボボックスの値が更新されたら下記のVBAを動かせばレコードソースに設定されます。
Private Sub search_mado_AfterUpdate() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset On Error GoTo Err_Handler Set cn = CurrentProject.AccessConnection Set rs = New ADODB.Recordset With rs Set .ActiveConnection = cn .Source = "SELECT * FROM shipper WHERE searchkey ='" & search_mado & "'" .LockType = adLockOptimistic .CursorType = adOpenKeyset .Open End With Set Me.Recordset = rs rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing ExitErr_Handler: Exit Sub Err_Handler: MsgBox "エラー: " & Err.description rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub
.Source = "SELECT * FROM shipper WHERE searchkey ='" & search_mado & "'"
このコードは、コンボボックスの値から抽出する部分になりますが、SQLに埋め込むような時のように&マークとかカンマ、ダブルコーテーションなどが必要になります。
この辺もいつも悩む部分なので注意したいですね。