<Access 検索後・リストボックスで選択 サブフォームを移動> こんにちは。 年度末なのにヒマこいている、ダメダメな AB型の変わり者 三流プログラマーのKen3です。 今回は、 Access の フォーム リストボックスで少し遊んでみたいと思います。 ※と言っても、フィルターで絞って、ダブルクリックのイベントに書いただけだけど。/* * 1. 今回のキッカケ */
No.107 Access サブフォームの明細データを検索、メインを移動 http://www.ken3.org/vba/backno/vba107.html の問い合わせから、 >このメルマガの穴の部分、「穴その1は、鈴木やなた名、メンバー名、同じ人が >いた時、複数データが見つかった時。」の対策を教えていただけないでしょうか。 >この時、メインフォームに別途用意したリストボックスに、該当するバンド名を >全て表示し、どれかをクリックすることで、サブフォームを絞り込むなどしたい >のですが。。また、その場合、DLooUpだと該当した最初の値しか返してくれない >ので、DlookUpは使えないと思うのですが、どのように該当する名前を全て検索 >したらよいのでしょうか。是非ご教授いただきたく。。。よろしくお願いいた >します。m(__)m あらら、三流君の悪いところですね、、、穴をほったらかしにしとくなんて、 バグと虫歯は処置しないと治らないと誰かが言ってたけど、、、 ※痛くなってから処置すればいいや・・・だと、今回みたいに被害が広がるのかなぁ サンプルファイル、 http://www.ken3.org/vba/lzh/vba178.zip を解答して(.zip) 中の db178.mdb を実行しながら確認してみてください。/* * 2.現象を確認・再現するためのデータ作り */
元のサンプルファイル、 http://www.ken3.org/vba/lzh/vba107.lzh のdb107.mdb を db178.mdbに名前を変えて、データを見てみる(現象を再現してみる) テストデータはバンドの検索だけど、音楽系はニガテなので、 ネットで検索し易い ドラマのタイトル(メイン) と 出演者(サブフォーム) にしてデータを作ります。 プロポーズ大作戦 バンドID=4 ^^^^^^^^^^^^^^^^ 山下智久 ケンゾー これが書きたかっただけ? 長澤まさみ レイ 榮倉奈々 エリ 濱田岳 ツル 平岡祐太 ミキオ 重複データを作りたいので、 ドラゴン桜 バンドID=5 ^^^^^^^^^^ 山下智久 矢島 長澤まさみ 水野 中尾明慶 奥野 小池徹平 緒方 新垣結衣 香坂 サエコ 麻紀 クロサギ バンドID=6 ^^^^^^^^ 山下智久 黒崎 堀北真希 氷柱 野ブタ。をプロデュース バンドID=7 ^^^^^^^^^^^^^^^^^^^^^^ 亀梨和也 修二 山下智久 彰 堀北真希 野ブタ 途中テストデータ作りに疲れた(オイオイ)なので、 出演者もっと居るだろとツッコマナイデネ。 このデータから、 山Pを検索後にメインのドラマタイトルを絞り込みたい、そんな感じですね。 現在 [山下智久] を検索すると、 下記の感じだと 確かにDLookupで一番最初に見つかったIDしか移動できませんね・・
Private Sub btn検索_Click() Dim str検索条件 As String Dim str検索されたID As String 'フォームの値を元に検索条件を作成する str検索条件 = "名前 = '" & Me!txt検索 & "'" 'str検索条件を条件にバンドIDをT_メンバーテーブルから検索する str検索されたID = "" & DLookup("バンドID", "T_メンバー", str検索条件) '結果のテスト表示 If str検索されたID = "" Then '検索できなかった? MsgBox Me!txt検索 & "は、見つかりませんでした" Else 'データを移動させる DoCmd.GoToControl "バンドID" 'コントロールをIDへ移動 DoCmd.FindRecord str検索されたID 'データを検索する End If End Sub |
Private Sub btn検索_Click() Dim str検索条件 As String Dim str検索されたID As String Dim strSQL As String '元のSQL strSQL = "" '文字列にSQL文を入れる・・・ strSQL = strSQL & "SELECT Q_メインとサブ.名前, Q_メインとサブ.バンドID, Q_メインとサブ.バンド名称 " strSQL = strSQL & "FROM Q_メインとサブ ORDER BY [バンドID];" '条件なしを判断する If Trim("" & Me!txt検索) = "" Then '条件がなかったら 'そのまま元のSQLを使う Else '条件アリの時、 str検索条件 = "Where [名前] Like '" & Me!txt検索 & "'" 'フォームの値を元に検索条件を作成する 'ORDER BYの前にWhere文を挿入する(せこく置き換えました) strSQL = Replace(strSQL, "ORDER BY", str検索条件 & " ORDER BY") End If 'listボックスの.RowSource を書き換える Me!lstメンバー名.RowSource = strSQL End Sub |
Private Sub lstメンバー名_DblClick(Cancel As Integer) DoCmd.GoToControl "バンドID" 'コントロールをIDへ移動 DoCmd.FindRecord Me![lstメンバー名].Value 'データを検索する '↑リストボックスの値 = 連結されたIDなので、こんな処理ができます。 End Sub |
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]