【Access】非連結コントロール+帳票フォームで一覧絞込みを行う

スポンサーリンク

今回は、非連結コントロール+帳票フォームで一覧絞込みを行う所まで紹介したいと思います。
検索部は、非連結コントロールを配置し帳票フォームの詳細は、VBAでレコードソースのセットをします。

<今回やること>
1. マスタテーブルを作成
2. フォームを作成
3. 検索ボタンで一覧表示

得意先マスタテーブルを作成

m_tokuisaki

1tokuisaki_id数値長整数型
2tokuisaki_name短いテキスト255
3tokuisaki_short_name短いテキスト10
4tokuisaki_tanto_name短いテキスト50
5chiki_name短いテキスト255
5type_div_name短いテキスト10
6tel短いテキスト20
7mob短いテキスト20
8fax短いテキスト20
9post_cd短いテキスト20
10prefectures_id数値型整数値
11add_1短いテキスト255
12add_2短いテキスト255
13del_flagYes/No型既定値:NO
14add_dt日付/時刻型既定値:Date()
15upd_dt日付/時刻型既定値:Date()

フォームを作成

(1)作成>フォームデザイン を選択

(2)ラベル、テキスト、ボタンを配置します

(3)ヘッダーのフォームデザイン

フォームデザインにあるコントローラーを選択してフォームにドラッグすることで使えるようになります。

(4)フォームを右クリックしてプロパティを表示します。

イベントが発生するテキストやボタンの名前は必ず指定するようにしてください。
デフォルトは「テキスト0」等になっていて、システム開発終わってもこの名前のままだと
非常にメンテナンスがしにくいです(意外とそれでリリースされているシステムも多々あります)

(5)次に既定のビューを変更します

デフォルトは単票ビューですが、帳票フォームに変更します。

(6)フッターヘッダーを追加します

(7)ヘッダー部に検索項目とラベルを配置

(8)詳細部は1行分の高さに調整します。

(9)テキストコントロールを貼り付けし、データ>コントロールソースに項目名を入力します。
No:tokuisaki_name
得意先名:tokuisaki_name
得意先名略:tokuisaki_short_name
得意先担当者:tokuisaki_tanto_name

データタブ
使用可能:はい
編集ロック:はい・・←★大事!

ACCESS VBA

フォームの開くイベント

'***************************
' 画面起動時
'***************************
Private Sub Form_Open(Cancel As Integer)
    
    ' 画面表示
    Call subSetInputdata

    Me.txt得意先名.SetFocus
    
End Sub
'***************************
' 検索ボタン
'***************************
Public Sub cmd検索_Click()
    Me.Refresh
    ' 画面表示
    Call subSetInputdata
End Sub
Rem ----------------------------------------------------------------------------------
Rem     関数名   : subSetInputdata
Rem     処理内容 : 該当するデータをカレント表示する。
Rem     引  数  : なし
Rem     戻り値  : なし
Rem ----------------------------------------------------------------------------------
Private Sub subSetInputdata()
Dim objRs As Recordset
Dim strSql As String
Dim strWhere As String

On Error GoTo Error

    ' SQL実行(論理削除されたデータを除外して取得)
    strSql = "SELECT * FROM m_tokuisaki WHERE del_flag=false"

    '=================
    ' 検索条件生成
    '=================
    strWhere = ""
    
    ' 得意先名(入力されている場合のみ、条件を追加)
    If Nz(Me.txt得意先名.Value) <> "" Then
        strWhere = strWhere & " AND tokuisaki_name Like '*" & Me.txt得意先名.Value & "*'"
    End If
    
    strSql = strSql & strWhere
    strSql = strSql & " ORDER BY tokuisaki_id"
    Set objRs = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)

    Me.txt件数.Value = objRs.RecordCount
    
    ' レコードセットの複製をコピー
    Set Me.Recordset = objRs.Clone
    
    ' 後処理
    objRs.Close
    Set objRs = Nothing

'    Me.Requery
                
Exit Sub
Error:
    MsgBox "エラーが発生しました。エラー内容:" & Err.Description & Chr$(10), vbCritical, C_MSG_TITLE
End Sub

subSetInputdata関数は画面表示時と検索ボタン押下時にCALLされます。
検索項目の得意先名が未入力の場合は論理削除されたデータ以外、全件検索します。
Like の条件は曖昧検索をする条件になります。
Me.txt件数.Value = objRs.RecordCountは、画面のtxt件数というテキストに取得した件数を表示しています。
ORDER BYはソート順(並び順)になります。ここでは得意先ID順に上から表示するようにしています。
取得したレコードセットをフォームにセットしています。

SQLの箇所をクエリにして使う事も可能ですが、
その場合はフォーム名と同じクエリ名にしてください。
そうしないと管理が煩雑になり最終的にどのクエリが何なのかわからなくなります。
クエリを多様化しないことがポイントかと思います。

動作確認

初期表示(全件表示)

絞込み

次回は新規ボタンと編集ボタンを押下して編集画面を表示し非連結フォームで表示して更新する箇所の紹介をしたいと思います。

コメント

タイトルとURLをコピーしました