パソコン情報

【Access】コンボボックスから値を選択して抽出されたデータをレコードソースにする方法

これはアクセスデータベース(以下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に埋め込むような時のように&マークとかカンマ、ダブルコーテーションなどが必要になります。

この辺もいつも悩む部分なので注意したいですね。