電子書籍の厳選無料作品が豊富!

コンボボックスを使い検索をしたいと考えております!

名前は
テーブル1:ビル区分マスタ←フィールド:ビル区分、ビル名
テーブル2:テナントマスタ←フィールド:ビル区分、テナントコードetc…があります
コンボボックス:cbo検索ビル区分、cbo検索テナントコード
コマンドボタン:btn検索

cbo検索ビル区分に01,02があり、例えば01を選んだときcbo検索テナントコードにビル区分が01のテナントコードを出したいのです!そしてbtn検索をクリックするとフォームにそのデータを出したいのです!

こんな文章じゃわかりにくいかとも思われますが、よろしくお願いします!!もんすごい初心者です!

A 回答 (7件)

こんにちは。

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]を設定しておきます。

この回答への補足

それと書き忘れてたのですが、先に検索テナントコードは開けないようにしたいのです!

どういうことかというと先に検索ビル区分を選びそれに対応する検索テナントコードを表示させたいのです!

例えば、
検索ビル区分 検索テナントコード
  01      100
  01      101
  01      102
  02      103
というテーブルにあるとします。

もし検索ビル区分で01を選択した場合検索テナントコードには、100,101,102が表示という具合にしたいのです!
そしてプラス先に検索ビル区分が選ばれてない場合、仮に検索テナントコードを表示しようとしてもできないようにしたいのですがどうすればいいのでしょうか?

わかりにくいかと思いますけどよろしくお願いします

補足日時:2002/09/05 18:08
    • good
    • 0

>それと書き忘れてたのですが、先に検索テナントコードは開けないようにしたいのです!


>どういうことかというと先に検索ビル区分を選びそれに対応する検索テナントコードを表示させたいのです!

検索テナントコードはあらかじめ選択できないようにして(Enabled=False)、検索ビル区分が入力された時にBeforeUpdateイベントでRecordSourceをセットし、検索テナントコードのEnabled=Trueにすればいいと思います。
btn検索の方も同様に考えてください。

#moshamoshaさんは、職業プログラマーの方ですか?
#そうであれば、このくらいの事を質問できる先輩とかはいませんか?
#職場で画面を見てもらいながら教えてもらえば一番わかり易いと思います。
    • good
    • 0

●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検索テナントコードを何とかしたい
とか
は自分で考えて下さい。。。

では~。
    • good
    • 0

aptivaさん補足ありがとうございます。



確かにBeforeUpdateイベントの方がいいかも知れません。

あと、
>念の為、BeforeUpdateイベントの中で値チェック(値が01か02であるか)もしたらベターかと。
これは、コンボボックスの[入力チェック]プロパティに"はい"を設定しておけばいいと思いますが。
    • good
    • 0

#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句をつけるとテナントコードが昇順に表示されます。
    • good
    • 0

#1 です。



>btn検索をクリックするとフォームにそのデータを出したいのです!
を見落としてました。。。
スイマセン(^^;

SQL文の記述はわかりますか?
質問No.351375 の回答No.5 に
ファイルの読み方を書いてますので、
あてはめて考えてみて下さい。

で、どこがわかりませんか?
考えたなりのコードを教えてくれれば、見ますが。
# 全部書くのが結構ツライので。。。(^^;

あと、フォーム名は、「フォーム1」でいいですか?

この回答への補足

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

補足日時:2002/09/05 17:14
    • good
    • 0

cbo検索ビル区分(コンボボックス)のプロパティに、


「集合値ソース」というのがあります。

まずそこに、

SELECT ビル区分, ビル名 FROM テーブル1;

と書きます。

cbo検索テナントコードの「集合値ソース」に、

SELECT テナントコード
FROM テーブル1
WHERE (((ビル区分)=[forms]![フォーム1].[cbo検索ビル区分]));

でできると思います。
# 未確認ですが。。。
    • good
    • 0

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

関連するカテゴリからQ&Aを探す