質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
DAO(Data Access Object)

DAO(Data Access Object)とは、データベースなどに保存するための操作を実装したオブジェクトのことです。データの永続化機構に抽象化されたインタフェースを提供し、データベースの詳細を隠蔽。ビジネスロジックとデータ操作も分離できます。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

690閲覧

テーブルと繋がっているコンボボックスのフィールドで名前の検索をかけて抽出されるようにするには

AKI_TADA

総合スコア7

DAO(Data Access Object)

DAO(Data Access Object)とは、データベースなどに保存するための操作を実装したオブジェクトのことです。データの永続化機構に抽象化されたインタフェースを提供し、データベースの詳細を隠蔽。ビジネスロジックとデータ操作も分離できます。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2023/04/17 09:34

実現したいこと

テーブルを参照したコンボボックスのフィールドで、主キーのフィールドでなく別フィールドの文字列で検索して出てくるようにしたい。

前提

ACCESSで発注書の一覧を検索する機能を制作しており、発注ID、発注日、発注者、発注先などから検索フィールドを選択して、検索文字列のテキストボックスに入力した単語からLike検索でフィルターをかけて抽出するようにしています。
しかし、その中の発注先は発注先一覧のテーブルを参照にしており、そのせいか検索文字列では参照元テーブルの主キーフィールドの発注先IDの文字列でしか抽出されなくなっており、それに続くフィールドの発注先の名前を入力して検索した場合、検索機能に認識されず何も出てこない状態になっております。
主キーフィールドの発注先IDでなく、発注先名の方で検索をかけて出るようにしたいのですが、何かいい解決方法はありますでしょうか。
ValueをTextに替えるのは行いましたが、それでも発注先IDの方で認識されるのは変わりませんでした。
分かりにくい質問ですがどうぞよろしくお願いします。

発生している問題・エラーメッセージ

検索対象フィールドの中に、発注先のコンボボックスが存在するのだが、そのコンボボックスは発注先リストのテーブルと繋がっている。 そのせいか、発注先のコンボボックスを指定して検索した場合、テーブルの主キーフィールドの発注先IDで検索しないと出てこない。

該当のソースコード

Private Sub コマンド31_Click()

Dim db As DAO.Database 'データベースへの参照を代入する変数を宣言する
Dim rs As DAO.Recordset 'レコードセットへの参照を代入する変数を宣言する

Set db = CurrentDb() '現在のデータベースを参照する
'「Q_発注」クエリを開きレコードセットを再設定する
Set rs = db.OpenRecordset("Q_発注", dbOpenDynaset)
'リストから選択された検索フィールドで指定された検索文字列を検索する。
rs.Filter = Me.検索フィールド.Value & " LIKE '" & Me.検索文字列.Value & "'"
End If
Set rs = rs.OpenRecordset

Set Me.Recordset = rs

Me.Requery

End Sub

試したこと

検索フィールド.SetFocus
rs.Filter = Me.検索フィールド.Text & " LIKE '" & Me.検索文字列.Value & "'"

5行目を検索フィールドのコンボボックスをTEXTとして検索するこのコードに置き換えたが、それでも出てこなかった。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

しかし、その中の発注先は発注先一覧のテーブルを参照にしており、そのせいか検索文字列では参照元テーブルの主キーフィールドの発注先IDの文字列でしか抽出されなくなっており、

「検索文字列」コンボボックスには発注先名を入力または選択しているが、このValueが発注先IDになっているということでしょうか。
だとしたら、コンボボックスは下記のような設定になっていると思われます。

連結列 1
列数 2
列幅 0cm, 3cm
値集合ソースのテーブルのフィールドは先頭から、発注先ID, 発注先名

この場合は、コンボボックスに表示されるのは発注先名ですが、連結している値は1列目の発注先IDになります。
まずは、このコンボボックスの仕様を理解してください。

対策としては、連結列を2にすれば2列目と連結しますので、Value は発注先名となります。
あるいは、連結列は1としたままで、Me.検索文字列.Colums(1) とすれば2列目の発注先名を取得できます。

vba

1rs.Filter = Me.検索フィールド.Value & " = '" & Me.検索文字列.Colums(1) & "'"

この場合、Me.検索フィールド.Value は「発注先名」になっているようにする。
また、ワイルド文字のない完全一致検索になってますので Like演算子ではなく=演算子でOKです。

ただし、データベース的にはキーフィールドであるIDで検索した方が高速なので、コンボボックスは現状のままにしておいて、発注先IDフィールドを検索対象にするほうがいいでしょう。

vba

1rs.Filter = Me.検索フィールド.Value & " = '" & Me.検索文字列.Value & "'"

Me.検索フィールド.Value は 「発注先ID」になっているようにする。

投稿2023/04/17 12:52

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

発注ID、発注日、発注者、発注先などから検索フィールドを選択して
'「Q_発注」クエリを開きレコードセットを再設定する

 「発注ID、発注日、発注者、発注先発注先名などから検索フィールドを選択して」となるように、Q_発注の表示フィールドを変更するのはどうでしょう。

テーブルと繋がっているコンボボックスのフィールドで名前の検索をかけて抽出されるようにするには

 もし、新しいコンボボックスを追加して、という単純な話であれば、発注先一覧テーブルを元にクエリを作成、発注先名の抽出条件にフォームの検索テキストボックスをLike指定した上で、それを参照するのでしょうが。

投稿2023/04/17 10:26

編集2023/04/17 10:56
logres_Fan

総合スコア164

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問