• ベストアンサー

Access2000での複合検索について

コンボボックスを使い検索をしたいと考えております! 名前は テーブル1:ビル区分マスタ←フィールド:ビル区分、ビル名 テーブル2:テナントマスタ←フィールド:ビル区分、テナントコードetc…があります コンボボックス:cbo検索ビル区分、cbo検索テナントコード コマンドボタン:btn検索 cbo検索ビル区分に01,02があり、例えば01を選んだときcbo検索テナントコードにビル区分が01のテナントコードを出したいのです!そしてbtn検索をクリックするとフォームにそのデータを出したいのです! こんな文章じゃわかりにくいかとも思われますが、よろしくお願いします!!もんすごい初心者です!

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 コード上での方法ですが。 cbo検索ビル区分のChangeイベント(Clickイベントにも書かないといけないかも知れない)に、 Me!cbo検索テナントコード.RowSource = "SELECT テナントコード FROM テーブル2 WHERE ビル区分 = '" & Me!cbo検索ビル区分 & "'" と書きます。 次にbtn検索のClickイベントに、 Me.Filter = "ビル区分 = '" & Me!cbo検索ビル区分 & "' AND テナントコード = '" & Me!cbo検索テナントコード & "'" Me.FilterOn と書きます。 もし、別のフォームを開くのであれば、 DoCmd.OpenForm "フォーム名",,,"ビル区分 = '" & Me!cbo検索ビル区分 & "' AND テナントコード = '" & Me!cbo検索テナントコード & "'" とします。 この時、開くフォームのレコードソースに[テーブル2]を設定しておきます。

moshamosha
質問者

補足

それと書き忘れてたのですが、先に検索テナントコードは開けないようにしたいのです! どういうことかというと先に検索ビル区分を選びそれに対応する検索テナントコードを表示させたいのです! 例えば、 検索ビル区分 検索テナントコード   01      100   01      101   01      102   02      103 というテーブルにあるとします。 もし検索ビル区分で01を選択した場合検索テナントコードには、100,101,102が表示という具合にしたいのです! そしてプラス先に検索ビル区分が選ばれてない場合、仮に検索テナントコードを表示しようとしてもできないようにしたいのですがどうすればいいのでしょうか? わかりにくいかと思いますけどよろしくお願いします

すると、全ての回答が全文表示されます。

その他の回答 (6)

  • aptiva
  • ベストアンサー率36% (193/529)
回答No.7

>それと書き忘れてたのですが、先に検索テナントコードは開けないようにしたいのです! >どういうことかというと先に検索ビル区分を選びそれに対応する検索テナントコードを表示させたいのです! 検索テナントコードはあらかじめ選択できないようにして(Enabled=False)、検索ビル区分が入力された時にBeforeUpdateイベントでRecordSourceをセットし、検索テナントコードのEnabled=Trueにすればいいと思います。 btn検索の方も同様に考えてください。 #moshamoshaさんは、職業プログラマーの方ですか? #そうであれば、このくらいの事を質問できる先輩とかはいませんか? #職場で画面を見てもらいながら教えてもらえば一番わかり易いと思います。

すると、全ての回答が全文表示されます。
  • 20020718
  • ベストアンサー率48% (13/27)
回答No.6

●cbo検索ビル区分の集合値ソース -----ここから SELECT ビル区分マスタ.ビル区分, ビル区分マスタ.ビル名 FROM ビル区分マスタ ORDER BY ビル区分マスタ.ビル区分; -----ここまで ●cbo検索ビル区分の更新後処理 [イベント プロシージャ] (内容) -----ここから Private Sub cbo検索ビル区分_AfterUpdate() cbo検索テナントコード.Requery End Sub -----ここまで ●cbo検索テナントコードの集合値ソース -----ここから SELECT [テナントマスタ].[テナントコード] FROM テナントマスタ WHERE ((([テナントマスタ].[ビル区分])=[forms]![テナントマスタ].[cbo検索ビル区分])) ORDER BY [テナントマスタ].[テナントコード]; -----ここまで ●btn検索のクリック時 [イベント プロシージャ] (内容) -----ここから Private Sub btn検索_Click() Dim Conn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim StrSQL As String Set Conn = CurrentProject.Connection StrSQL = "SELECT * FROM テナントマスタ WHERE ビル区分='" & cbo検索ビル区分 & "'" rs.Open (StrSQL), Conn テキスト1 = rs!テナントコード rs.Close End Sub -----ここまで 以上です。 もう少しちゃんと書けばいいのですが、 面倒なので、このへんで。。。 コンボボックスの表示をコードではなく名称にしたい とか、 例えば cbo検索ビル区分を01で選択後 cbo検索テナントコードを0002で選択後 cbo検索ビル区分を02で選択したら、 cbo検索テナントコードが0002のままなので、 自動でcbo検索テナントコードを何とかしたい とか は自分で考えて下さい。。。 では~。

すると、全ての回答が全文表示されます。
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.5

aptivaさん補足ありがとうございます。 確かにBeforeUpdateイベントの方がいいかも知れません。 あと、 >念の為、BeforeUpdateイベントの中で値チェック(値が01か02であるか)もしたらベターかと。 これは、コンボボックスの[入力チェック]プロパティに"はい"を設定しておけばいいと思いますが。

すると、全ての回答が全文表示されます。
  • aptiva
  • ベストアンサー率36% (193/529)
回答No.4

#3に補足ですが、 > cbo検索ビル区分のChangeイベント(Clickイベントにも書かないといけないかも知れない)に、 >Me!cbo検索テナントコード.RowSource = "SELECT テナントコード FROM テーブル2 WHERE ビル区分 = '" & Me!cbo検索ビル区分 & "'" ここは、BeforeUpdateイベントの方がいいと思います。 Changeイベントだと、なにか入力が起きるたびにイベントが発生してしまうので。 念の為、BeforeUpdateイベントの中で値チェック(値が01か02であるか)もしたらベターかと。 RowSourceプロパティーを設定後、Me!cbo検索テナントコード.Requeryも必要かもしれません。 あと、 Me!cbo検索テナントコード.RowSource = "SELECT テナントコード FROM テーブル2 WHERE ビル区分 = '" & Me!cbo検索ビル区分 & "'" Order By テナントコード とOrder By句をつけるとテナントコードが昇順に表示されます。

すると、全ての回答が全文表示されます。
  • 20020718
  • ベストアンサー率48% (13/27)
回答No.2

#1 です。 >btn検索をクリックするとフォームにそのデータを出したいのです! を見落としてました。。。 スイマセン(^^; SQL文の記述はわかりますか? 質問No.351375 の回答No.5 に ファイルの読み方を書いてますので、 あてはめて考えてみて下さい。 で、どこがわかりませんか? 考えたなりのコードを教えてくれれば、見ますが。 # 全部書くのが結構ツライので。。。(^^; あと、フォーム名は、「フォーム1」でいいですか?

moshamosha
質問者

補足

フォーム名はテナントマスタです! それから、どうするもこうするも全くわからないのでどうすることもできていませんでした! お手数ですがぜひとも書いてはいただけないでしょうか? お願いします!!

すると、全ての回答が全文表示されます。
  • 20020718
  • ベストアンサー率48% (13/27)
回答No.1

cbo検索ビル区分(コンボボックス)のプロパティに、 「集合値ソース」というのがあります。 まずそこに、 SELECT ビル区分, ビル名 FROM テーブル1; と書きます。 cbo検索テナントコードの「集合値ソース」に、 SELECT テナントコード FROM テーブル1 WHERE (((ビル区分)=[forms]![フォーム1].[cbo検索ビル区分])); でできると思います。 # 未確認ですが。。。

すると、全ての回答が全文表示されます。

関連するQ&A