マイクロソフトデータベースアクセス(以下Access)を使っているとデータの検索や抽出と言った作業は必要不可欠となってきます。
今回は、その検索・抽出時に役に立つような参考情報をブログにしました。
テーブルデータをダイレクト検索・抽出
テーブルを開いて、赤丸の場所に単語や数値を入れれば、そのデータが入力されているレコードのフィールドまで検索をすることができますが、これではAccessを使っている意味がありませんし、使いづらいです。
その為に、テーブルをフォームにして、自分が使いやすいようにカスタマイズしていくことができるのがAccessというソフトになります。
テーブルをダイレクトにフォームにして、作業することは、誤入力などのミスにつながる恐れがあるので、テーブルをダイレクトにしない非連結フォームを準備して検索・抽出する方法が使われます。
スタンドアロン(一人で使う場合)や、データベース作成時間を短縮したい場合などは、テーブルをダイレクトにすることも良くあります。※この回では、こちらの説明。
テーブルをフォームにして検索・抽出
サンプルデータとして、「商品マスタ」のテーブルを、作成>>フォームウィザードから、自動でフォームを作成しデザインモードにして、非連結のテキストボックス「商品名検索」というのを設置しました。
「商品名検索」の非連結ボックスに、商品名を入力してレコードを検索させようと思いますが、あいまいでも検索できるようにします。
更新後処理にて、下記のプログラムを設定します。
Private Sub 商品名検索_AfterUpdate()
Dim stCD As String
stCD = DCount("*", "商品マスタ", "商品名 Like '*" & 商品名検索 & "*'")
If stCD = 0 Then
MsgBox "検索されたデータは存在しません。ご確認ください。"
商品名検索 = Null
Me.商品名検索.SetFocus
Exit Sub
Else
Me.RecordSource = "Select * From 商品マスタ Where " _
& "商品名 Like '*" & Me!商品名検索 & "*'"
商品名検索 = Nul
End If
End Sub
「stCD」にて、検索したレコードが無い場合に注意をするようになっています。
VBAで改行するときの注意
私も、VBAで改行する時に間違ってエラーになったことが何度もありました。
法則としては、コード内の改行は、ダブルコーテーションとアンダーバーで改行になります。アンダーバーの前にスペースを入れることをお忘れなく。
改行された最初には、ドルマークそして、スペースで開始です。
(例)
Me.RecordSource = "Select * From 商品マスタ Where 商品名 Like '*" & Me!商品名検索 & "*'"
(例:改行入り)
Me.RecordSource = "Select * From 商品マスタ Where "□_
&□"商品名 Like '*" & Me!商品名検索 & "*'"
※□は、半角スペースです。
デーブルダイレクトフォームの長所
上記の様にすれば、レコードの検索ができるようになります。
直接テーブルをフォームにする良い点として、誤入力もしやすい面がある反面、データの更新が楽だという面があります。
表示されているデータを消して入れ替えればデータの更新が可能
非連結フォームなどだと、更新処理が必要になり、更新するだけでVBAを書かなければいけません。
テーブルをそのままダイレクトにフォームにすると更新が大変楽です。
ただ、気付かずに誤入力しても簡単に更新されてしまうという問題もあることを考えて使った方が良いかと思います。
テーブルダイレクトフォームの誤入力対策には、下記のような対策を参考にしてみてください。
https://pctips.jp/pc-soft/access-typo201907/