-PR-
  • すぐに回答を!
  • 2006-03-15 09:25:01
  • 質問No.2029954
解決
済み

Q ACCESSのフォーム上で複数検索したい項目がある場合どうすればいいですか?

  • 閲覧数4091
  • ありがとう数5
  • 気になる数1
  • 回答数5
  • コメント数0
noname#89246

(1)部品ID
(2)日付
(3)入庫か出庫 
以上3つを検索したいのですがどうすればいいでしょうか?

(1)の部品IDはリストBOXの一覧から選択し、選択したものをテキストBOXに表示させるという形で作成しました。
(2)の日付はテキストBOXに手入力という形です。
(3)の入庫か出庫はコンボBOXで選択するという形です。

検索ボタンを作成してクエリの更新をかけて表示したいと思うのですが、3つの条件のうちその時により、全ての検索条件を入力しなくても1つでも条件を入力するとその条件が表示させるようにさせたいのです。

あと、何も条件を入力せず、検索ボタンを押すと全てのデータが表示させれるようにもしたいのです。

どのようなコードを記述すればいいでしょうか?
よろしくおねがいします
  • 回答数5
  • 気になる数1
  • Aみんなの回答(全5件)

    質問者が選んだベストアンサー

    • 2006-03-16 16:31:53
    • 回答No.5
    >”このオブジェクトに値を代入することはできません”と表示され・・
    失礼しました。フィルターのセットで最後が足りませんでした。あと[このオブジェクトに値を代入・・]のメッセージは抽出等で間違った指定方法をしているという事なのですが・・。
    多分日付の抽出の仕方だと思いますので日付抽出のセットを少し変えましたのでメインフォーム上のボタンCmd1のクリック時のイベントを下記に変更してみてください。

    Private Sub Cmd1_Click()
    Dim MyCriteria As String

    MyCriteria = "日付 ="
    If IsNull(Text2) Then
    MyCriteria = MyCriteria & True
    ElseIf Not IsNull(Text2) Then
    MyCriteria = MyCriteria & "#" & Me!Text2 & "#"
    Else
    End If

    strfilter = MyCriteria
    strfilter = strfilter & " And 部品ID Like '*" & Me.Text1.Value & "*' And 区分 Like '*" & Me.Cmb1.Value & "*'"

    Forms!フォーム名!サブフォーム名.Form.Filter = strfilter
    Forms!フォーム名!サブフォーム名.Form.FilterOn = True
    Forms!フォーム名!サブフォーム名.Requery

    End Sub

    メインフォーム上のテキストボックスやコンボの値をサブフォームのフィルターに代入するときはMe!Text1の指定で良さそうなので上記でサブフォームにフィルターをかけられます。(試したらフィルターかけられました。)
    これでどうでしょう。
    お礼コメント
    noname#89246

    お礼が遅くなって申し訳ありません。
    できました!!本当に毎回ありがとうございます。
    またよろしくおねがいします。
    投稿日時 - 2006-03-20 13:32:26
    • ありがとう数0
    -PR-
    -PR-

    その他の回答 (全4件)

    • 2006-03-15 14:20:07
    • 回答No.1
    簡単に処理したいのであれば Filterを使ってやれば出来ます。 部品IDを選択し表示するテキストボックスをText1、日付を入力するコントロールをText2、入庫か出庫をCmb1としてテーブルのフィールド名を区分、検索ボタンをCmd1とした場合。 Cmd1ボタンのクリック時イベントに Private Sub Cmd1_Click() Dim MyCriteria As String ...続きを読む
    簡単に処理したいのであれば
    Filterを使ってやれば出来ます。
    部品IDを選択し表示するテキストボックスをText1、日付を入力するコントロールをText2、入庫か出庫をCmb1としてテーブルのフィールド名を区分、検索ボタンをCmd1とした場合。
    Cmd1ボタンのクリック時イベントに

    Private Sub Cmd1_Click()
    Dim MyCriteria As String

    MyCriteria = "日付 ="
    If IsNull(Text2) Then
    MyCriteria = MyCriteria & True
    ElseIf Not IsNull(Text2) Then
    MyCriteria = MyCriteria & "#" & Me!Text2 & "#"
    Else
    End If

    strFilter = "部品ID Like '*" & Me.Text1.Value & "*' And MyCriteria And 区分 Like '*" & Me.Cmb1.Value"
    Me.Filter = strFilter
    Me.FilterOn = True
    End Sub
    としてフォームにFilterをかければ出来ます。
    または
    クエリのWhere句で抽出条件に同様となる記述をしないと出来ません。
    補足コメント
    noname#89246

    早速試してみましたができません(>_<)
    抽出条件をサブフォームに表示したいという記述を忘れていました。
    また回答いただけるとありがたいです。よろしくおねがいします。
    投稿日時 - 2006-03-16 10:24:28
    お礼コメント
    noname#89246

    回答ありがとうございます。
    早速試してみます。
    O_cyan様には本当にいつも助けられています。
    もしよければACCESSの勉強法や、お勧めの本・サイトなど教えていただければありがたいのですが・・・。
    またお時間のある時よろしくお願いします
    投稿日時 - 2006-03-16 09:14:29
    • ありがとう数0
    • 2006-03-15 14:31:12
    • 回答No.2
    noname#60992

    フォームフィルタを使わないとすれば、クエリを作成するのが良いと思います。 データ一覧を参照するのが目的ならば、選択クエリを作成して抽出ボタンなどを押した際にクエリを実行させればよいと思います。 何か他の目的があるのならば、追加クエリなどで一旦テーブルにデータを入れたほうが良いかもしれません。 クエリを作成する前に、抽出条件をきっちり決めなくてはいけません。 出庫・入庫は必ずどちらかが選択されている ...続きを読む
    フォームフィルタを使わないとすれば、クエリを作成するのが良いと思います。
    データ一覧を参照するのが目的ならば、選択クエリを作成して抽出ボタンなどを押した際にクエリを実行させればよいと思います。
    何か他の目的があるのならば、追加クエリなどで一旦テーブルにデータを入れたほうが良いかもしれません。
    クエリを作成する前に、抽出条件をきっちり決めなくてはいけません。
    出庫・入庫は必ずどちらかが選択されているものとしても、部品IDと日付が両方入力されている場合の抽出条件をANDにするかORにするかによって、クエリの作り方が少し違います。

    直接質問には関係ないですけれど、日付を選ぶのには ActiveXのカレンダーコントロールや、DatePickerなどが便利ですよ。 (クエリを実行させる際に抽出条件によってエラーが起きないよう考えておく必要があります。)
    お礼コメント
    noname#89246

    回答ありがとうございます。
    クエリでも出来るのですね。勉強になります。
    紹介して頂いたActiveXのカレンダーも使ってみます。
    ありがとうございました
    投稿日時 - 2006-03-16 09:16:23
    • ありがとう数0
    • 2006-03-16 10:20:46
    • 回答No.3
    >ACCESSの勉強法やお勧めの本・サイトなど教えていただければありがたいのですが 勉強法といっても特にはないのですが私は自分で考えた処理が動くかどうかSQLでもモジュールでも取りあえず試してみる事にしています。ダメならどこがダメなのか究明する。頭の中で考えた物を記述する感じですが・・。 そのためにはある程度の関数の記述の仕方と関数の概要が分かる本ですかね? Accessで使う私の持っている本 ...続きを読む
    >ACCESSの勉強法やお勧めの本・サイトなど教えていただければありがたいのですが
    勉強法といっても特にはないのですが私は自分で考えた処理が動くかどうかSQLでもモジュールでも取りあえず試してみる事にしています。ダメならどこがダメなのか究明する。頭の中で考えた物を記述する感じですが・・。
    そのためにはある程度の関数の記述の仕方と関数の概要が分かる本ですかね?
    Accessで使う私の持っている本はMicrosoftのAccess開発者用のアプリケーションマニュアルとVB開発者用マニュアルの厚さ3Cmくらいの分厚い本くらいですね。あまり読みませんが・・。^_^;
    本は関数の便利な使い方みたいな物が多く載っている方が良いと思います。
    サイトは結構いろいろあると思いますが一概にどこが良いとは言えません。
    すいませんあくまで主観です。
    • ありがとう数0
    • 2006-03-16 12:00:24
    • 回答No.4
    >抽出条件をサブフォームに表示したいという記述を忘れていました 抽出条件をサブフォームの抽出条件に代入すれば行けるかと思いますが。 strFilter = "部品ID Like '*" & Me.Text1.Value & "*' And MyCriteria And 区分 Like '*" & Me. ...続きを読む
    >抽出条件をサブフォームに表示したいという記述を忘れていました
    抽出条件をサブフォームの抽出条件に代入すれば行けるかと思いますが。
    strFilter = "部品ID Like '*" & Me.Text1.Value & "*' And MyCriteria And 区分 Like '*" & Me.Cmb1.Value"
    Me.Filter = strFilter
    Me.FilterOn = True
    Me.Filter・Me.FilterOnは自分のFilterのセットとなりますのでこの部分を
    Forms!フォーム名!サブフォーム名.Form.Filter = strFilter
    Forms!フォーム名!サブフォーム名.Form.FilterOn = True
    Forms!フォーム名!サブフォーム名.Requery

    としてみてください。
    抽出部分も
    strFilter = "部品ID Like '*" & [Forms]![フォーム名]![Me.Text1].Value & "*' And MyCriteria And 区分 Like '*" & [Forms]![フォーム名]![Cmb1].Value"
    にすれば行けるはずですが。
    お礼コメント
    noname#89246

    何度も質問に答えてくださってありがとうございます。
    デバックがでるんです・・・
    ”このオブジェクトに値を代入することはできません”と表示され、Me.Filter = strFilterが黄色にマーカーされます。

    O_cyan様の回答をそのままコピーしているのでスペルミスではないと思うのですが・・・。
    お時間があればまたよろしくおねがいします
    投稿日時 - 2006-03-16 15:26:50
    • ありがとう数0
    • 回答数5
    • 気になる数1
    • ありがとう数1
    • ありがとう
    • なるほど、役に立ったなど
      感じた思いを「ありがとう」で
      伝えてください
    • 質問する
    • 知りたいこと、悩んでいることを
      投稿してみましょう
    このやり方知ってる!同じこと困ったことある。経験を教えて!
    このQ&Aにはまだコメントがありません。
    あなたの思ったこと、知っていることをここにコメントしてみましょう。

    関連するQ&A

    -PR-
    -PR-

    その他の関連するQ&Aをキーワードで探す

    別のキーワードで再検索する
    -PR-
    -PR-
    -PR-

    特集


    成功のポイントとは?M&Aで経営の不安を解決!

    -PR-

    ピックアップ

    -PR-
    ページ先頭へ