プロが教える店舗&オフィスのセキュリティ対策術

現在2つの問題に直面しています。
どなたかご存知の方いらっしゃいましたらご教示お願い致します。

下記のようなデータベースがあります
テーブル名:テーブル
列名:類、目、名称

哺乳類 単孔目 カモノハシ
哺乳類 有袋目 カンガルー
哺乳類 有袋目 コアラ
哺乳類 貧歯目 アリクイ
哺乳類 貧歯目 アルマジロ
鳥類 ダチョウ目 エミュー
鳥類 ダチョウ目 ダチョウ
鳥類 ダチョウ目 ヒクイドリ
鳥類 ペリカン目 ペリカン
(実際には学名や生息地域等の列名がありますが割愛します)

まず1つ目の問題ですが、
これをフォーム上(フォーム名:一覧画面)で
コンボボックスから選択した物を表示させるようにフィルター機能を使い行っています。

現在コンボボックスで選択肢として(目を選択するコンボボックスの例)
"全て";"単孔目";"有袋目";"貧歯目";"ダチョウ目";"ペリカン"
のように値を指定しています。

数が少ないうちはいいですが、これからデータの追加があった場合にその都度ここに書き足していくのではそのうち漏れや間違いが発生しそうで困っています。(作業量も多くなりますし)

コンボボックスにクエリの値を参照するようにしてみたのですが、選択肢が
単孔目 有袋目 有袋目 貧歯目 貧歯目 ダチョウ目 ダチョウ目 ダチョウ目 ペリカン目
のようになってしまい、同じものがいくつも出てきてしまうのと
全て という選択肢がなくなってしまいます。

次に2つ目の問題ですが、
上記の一覧画面をフィルター機能で検索した画面をレポートに出力したいのですが、条件がうまくいかず困っています。
上記のフォームをロードする際に
Me.目コンボボックス = "▼選択してください"
のように記述しているのですが、
全て と ▼選択してください を選択したときは全てのレコードを
そうでない場合は該当レコードのみを出したいのですが
全て と ▼選択してください の場合がうまくいきません。

IIf([Forms]![一覧画面]![目コンボボックス] = "全て","*",[Forms]![一覧画面]![目コンボボックス]) And IIf([Forms]![一覧画面]![目コンボボックス] = "▼選択してください","*",[Forms]![一覧画面]![目コンボボックス])

のように記述しております。

どなたか上記の問題について解答宜しくお願いします。

A 回答 (1件)

レスがなかなかつかないようですが、


まず現状のコンボボックスから見て
いきます。

質問のデータが少ないので以下の
ようにこちらで推測します。
まず、テーブルの名前はtblDATA、
コンボボックスの名前はcmbSelect、
とし、テーブルのフィールドの
ひとつを目とします。フォームは
新規作成からフォームウィザード
で表形式で、レコードソースは
tblDATAとします。

コンボボックスの値リストの項目が
漸次増えていくのでどうにかしたい
ということでは、ます値リストの
中身を削除します。次に値集合ソース
に次のSQL文をはりつけます。

SELECT tblDATA.目
FROM tblDATA
GROUP BY tblDATA.目
UNION SELECT "(全て)" AS 目
FROM tblDATA;

これで値リストに触ることなく
コンボボックスに項目が追加されて
いきます。

次に、コンボボックスの"(全て)"を
選択したときと、どれかの項目を
選択したときに正しく表示したい
という場合は、フォームのコードに

Private Sub cmbSelect_AfterUpdate()
Dim strField As String

strField = cmbSelect.Value
With Me.Form
If strField <> "(全て)" Then
.Filter = BuildCriteria("目", 1, Me.cmbSelect)
.FilterOn = True
Else
.FilterOn = False
End If
End With
End Sub

を貼り付け、フォームを保存します。
これでフォームにはコンボボックス
で選んだ項目が表示されるようにな
ります。

フォームのロード時のイベントプロシージャ
はこの場合全て必要ありません。

レポートについては、文脈がわかりずらい
のと、質問はひとつにしてほしいと
いうことと、まずはコンボボックスの
働きを確かめて別途質問とされてはいか
がですか。いっぺんにたくさんの質問
をされるとレスがつきにくいと思いま
すが。いかがでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!