<Access サブフォームの明細データを検索、メインを移動>
どうも、三流プログラマーのKen3です。 今回は、 読者よりもらった質問の続きを、処理してみたいと思います。 内容は、サブフォーム内のデータを検索して、 メインのデータを移動、そんな感じです。 いつものように、たいした解説、回答内容じゃないので、 暇つぶしに休み時間などに拾い読みしてください。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba107.lzh にdb107.mdb(Access2000版)が保存されています。/* * 1.今回のキッカケ */
メールで下記の質問をもらいました。 ---- >例としまして(本当はもっとドロドロしたデータベースなんですが、 > 違う例えで書いてみました。) > >親フォームが音楽のバンド名が記載されてます。 >サブフォームには、 >そのバンドのメンバーと出身県と楽器と年齢などが記載されています。 > >そこで、親フォームには、そのバンドのメンバーの出身県が出るテキスト >ボックスがあります。 > >例えば・・・バンド名(BOOWY)−−−−−−−−−−親フォーム > メンバー(氷室、布袋、松井、高橋)−−サブフォーム > 出身県(群馬、群馬、群馬、福島)−−−サブフォーム > >●質問1 > >で、このサブフォームに記載されている、出身県を親のフォームの >任意に作成したテキストボックスの中に「群馬、福島」とだけ表示したいのです。 > >「群馬、群馬、群馬、福島」と表示するのは、ちょっと・・・。 >群馬がだぶっているので、群馬の表示は1つとしたいのです。 > > >●質問2 > >また、沢山のバンドや歌手をこのデータベースに入力します。 >そこで、「布袋」と検索すると、親フォームの「BOOWY」が表示されるようにしたい >のです。 > >まず親フォームのバンド名には >「バンドID」と云う名のフィールド名の主キー(オートナンバー)がありまして > >それをサブフォームの中にもフィールド名で、 同じ「バンドID」という >固有のデータで繋がっているです。 > >こんな説明で分かってもらえるんでしょうか・・・。 >すごく不安です。 ----- 2つの親子テーブルが存在して、 バンドIDでつなげた、フォーム・サブフォームが存在する。 前回、サブフォームを作成して、 出身地をまとめる処理までやりました。 http://www.ken3.org/backno/backno_vba22.html#106 詳細は、↑を見てください。 今回は、サブフォーム(明細的子データ)のバンドのメンバー名を探して、 親フォーム、バンド名(台帳的親データ)を探して、移動してみたいと思います。/* * 2.調べごと、下準備 */
親テーブル名:T_バンド名 バンドID オートナンバー バンド名称 テキスト 備考 メモ型 子テーブル名:T_メンバー 個人ID オートナンバー バンドID 長整数型(親テーブルとリンクする) 名前 文字型 楽器 文字型 出身地 文字型 生年月日 日付型 *今回関係ないけど 備考 文字型 *今回関係ないけど なんて、テーブル構成にして、フォームを作成しました。 この親フォームに 検索用の非連結のフィールドと検索ボタンを追加します。 メンバー名検索[ ______ ] 検索 (txt検索 ) (btn検索)/* * 3.DLookUp関数でデータを探す */
まずは、固定処理でテストする。 >●質問2 > >また、沢山のバンドや歌手をこのデータベースに入力します。 >そこで、「布袋」と検索すると、親フォームの「BOOWY」が表示されるようにしたい >のです。 子テーブル名:T_メンバー の 名前が「布袋」のデータを検索して、 バンドID 長整数型(親テーブルとリンクした) を検索したいので、 DLookUP関数を使ってみました。
Private Sub コマンド19_Click() Dim str検索されたID As String 'メンバー名を条件にバンドIDをT_メンバーテーブルから検索する str検索されたID = "" & DLookup("バンドID", "T_メンバー", "名前 = '布袋'") 'テスト表示 MsgBox str検索されたID End Sub |
Private Sub コマンド19_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 MsgBox "検索されたのは" & str検索されたID & "です" End If End Sub |
Private Sub コマンド20_Click() On Error GoTo Err_コマンド20_Click Screen.PreviousControl.SetFocus DoCmd.FindNext Exit_コマンド20_Click: Exit Sub Err_コマンド20_Click: MsgBox Err.Description Resume Exit_コマンド20_Click End Sub |
Private Sub コマンド20_Click() DoCmd.GoToControl "バンドID" 'コントロールをIDへ移動 DoCmd.FindRecord "2" '2のデータを検索する End Sub |
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 |
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]