Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : 指定なし)
コンボボックスを基にしたフィルターに関して
投稿日時: 21/08/22 15:19:07
投稿者: Manabukunn

テーブル名:薬剤名一覧
フィールド:薬剤名ID、薬剤名、分類
   
こちらの”薬剤名一覧”テーブルの”分類”には”薬剤分類”テーブルの”薬剤分類名”を
データソースとしたコンボボックスに設定してあります。
(SELECT [薬剤分類].[ID], [薬剤分類].[薬剤分類名] FROM 薬剤分類 ORDER BY [薬剤分類名]; )
   
やりたいこととしては”薬剤名一覧”テーブルを基にした”薬剤名一覧”フォーム上に
”薬剤分類”テーブルの”薬剤分類名”の重複を除いたすべての分類を表示するコンボボックス(class_List)を以下で作成(動作問題なし)
Private Sub class_List_Enter()
    Dim myDB As Database
    Dim myRS As DAO.Recordset
    Dim mySQL As String
    mySQL = "SELECT DISTINCT 薬剤分類名 FROM 薬剤分類;"
    Set myDB = CurrentDb
    Set myRS = myDB.OpenRecordset(mySQL, dbOpenDynaset)
    Set Me.class_List.Recordset = myRS
End Sub
   
そしてこの”class_List”コンボボックスで選択した
”分類”を基にして表形式のフォーム”薬剤分類名一覧”上に作成された
ボタン”classFilter"でフィルターをかけるということが最終的にやりたいことなのですが
   
Private Sub classFilter_Click()
   
    Forms!薬剤名一覧.class_List.SetFocus
   
    Classname = Forms!薬剤名一覧.class_List
   
    Me.Filter = "分類 = '" & class_List & "'"
   
    Me.FilterOn = True
   
End Sub
   
でも何も表示されなくなってしまいます。
そもそもフォーム上でフィルターを行っても何も変化がないことに
気が付きました。
  
こちらに関して解決策など教えていただけると幸いです。
よろしくお願いいたします。

回答
投稿日時: 21/08/23 09:14:27
投稿者: Suzu

Me.Filter = "分類 = '" & class_List & "'"
 
この class_List は、フォーム上の コントロール class_List でしょうか?
その場合、コード実行時の、class_List の値を、ローカルウィンド 等にて、確認してみてください。
 (リストボックス の連結列 は いくつでしょうか?)

投稿日時: 21/08/23 21:00:09
投稿者: Manabukunn

Suzuさん
 
返答ありがとうございます。
コピペをしているうちに説明の最初の部分が
抜けてしまっておりました。
 
追記ですが
 
テーブル名:薬剤分類
フィールド:ID、薬剤分類名
 
のテーブルがあり以下は最初の説明文の用に
”薬剤名一覧”のテーブルの”分類”フィールドには”薬剤分類”テーブルの
”薬剤分類名”フィールドをデータソースとしたコンボボックスが設定してあります。
 

引用:
Me.Filter = "分類 = '" & class_List & "'"
  
この class_List は、フォーム上の コントロール class_List でしょうか?
その場合、コード実行時の、class_List の値を、ローカルウィンド 等にて、確認してみてください。
 (リストボックス の連結列 は いくつでしょうか?)

 
に関してですがこちらはフォームフッター上に存在しているコンボボックスで
最初の説明の通り”薬剤分類”テーブル上の”薬剤分類名”に記載されているもの
データーソースとしておりこちらに関しては確認してみてもclass_Listに関しては
きちんとコンボボックスで選択されていたものがきちんと代入されております。
 
以上追記です。アドバイスなどありましたら是非ともよろしくお願いいたします。

回答
投稿日時: 21/08/24 08:50:28
投稿者: Suzu

引用:
こちらの”薬剤名一覧”テーブルの”分類”には”薬剤分類”テーブルの”薬剤分類名”を
データソースとしたコンボボックスに設定してあります。
(SELECT [薬剤分類].[ID], [薬剤分類].[薬剤分類名] FROM 薬剤分類 ORDER BY [薬剤分類名]; )

 
これは
テーブル「薬剤一覧」 の
フィールド『分類』 に、コンボボックス を設定していて
  その値集合ソース として、
   SELECT [薬剤分類].[ID], [薬剤分類].[薬剤分類名] FROM 薬剤分類 ORDER BY [薬剤分類名]
を指定している
 
と読みました。
 
 
であるならば、
 
テーブル 「薬剤一覧」 の 『分類』 の 値は、
テーブル 「薬剤分類」の 『ID』 と連携している
と考えられます。
 
対して
コンボボックス 【class_List】の値集合ソースと同等のレコードセットのSQLが
    SELECT 薬剤分類名 FROM 薬剤分類
 
ここで、class_List の値は、『分類』と連携している『ID』ではなく 『薬剤分類名』 となっています。
 
ここで、整合性が取れていない為、
フィルター後の フォームに何も表示されなくなる と読み解きました。
いかがでしょうか。

投稿日時: 21/08/26 21:23:18
投稿者: Manabukunn

Suzuさん
誠にありがとうございます。
自分的にはどちらのテーブルを参照しても
テキストとして同じなので関係ないと
思っておりました。
 
結局できそうでできない状態ですので
大変申し訳ございませんが最後に再度お知恵をお願いいたします。
 
 mySQL = "SELECT DISTINCT 薬剤名一覧.分類 FROM 薬剤名一覧;"
 
として概ねできたいのですが
こうするとコンボボックス”class_List”に表示されるのが
1,2,3,4とテーブル”薬剤名一覧”に入力されている”分類”のテキストではなく
”分類”の数になってしまいます。
いろいろやってみたのですが結局いま現在できておりません^^;
非常に初歩的なことなのかとも思いますが
最後にこちらだけお願いいたします。

投稿日時: 21/08/26 23:30:18
投稿者: Manabukunn

解決できました!!!!
 
テーブル”薬剤名一覧”のフィールド”分類”で連結させる
列が”薬剤名ID”になっておりました^^;
 
suzuさんいろいろとありがとうございました。
個人的には時間がかかりましたがいろいろと
勉強になりました。
 
今後ともヨロシクお願いいたします。