今回は、非連結コントロール+帳票フォームで一覧絞込みを行う所まで紹介したいと思います。
検索部は、非連結コントロールを配置し帳票フォームの詳細は、VBAでレコードソースのセットをします。
1. マスタテーブルを作成
2. フォームを作成
3. 検索ボタンで一覧表示
得意先マスタテーブルを作成
m_tokuisaki
1 | tokuisaki_id | 数値 | 長整数型 |
2 | tokuisaki_name | 短いテキスト | 255 |
3 | tokuisaki_short_name | 短いテキスト | 10 |
4 | tokuisaki_tanto_name | 短いテキスト | 50 |
5 | chiki_name | 短いテキスト | 255 |
5 | type_div_name | 短いテキスト | 10 |
6 | tel | 短いテキスト | 20 |
7 | mob | 短いテキスト | 20 |
8 | fax | 短いテキスト | 20 |
9 | post_cd | 短いテキスト | 20 |
10 | prefectures_id | 数値型 | 整数値 |
11 | add_1 | 短いテキスト | 255 |
12 | add_2 | 短いテキスト | 255 |
13 | del_flag | Yes/No型 | 既定値:NO |
14 | add_dt | 日付/時刻型 | 既定値:Date() |
15 | upd_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順に上から表示するようにしています。
取得したレコードセットをフォームにセットしています。
その場合はフォーム名と同じクエリ名にしてください。
そうしないと管理が煩雑になり最終的にどのクエリが何なのかわからなくなります。
クエリを多様化しないことがポイントかと思います。
動作確認
初期表示(全件表示)
絞込み
次回は新規ボタンと編集ボタンを押下して編集画面を表示し非連結フォームで表示して更新する箇所の紹介をしたいと思います。
コメント