Accessでテーブルをリンクさせ、コンボボックスの選択で別のテキストボックスに名称表示する方法について

このQ&Aのポイント
  • Accessで複数のテーブルをリンクさせる方法を解説します。
  • コンボボックスで選択した値に応じて、別のテキストボックスに関連したテーブルの名称を表示する方法を説明します。
  • データベースの関連性を設定し、コンボボックスとテキストボックスを連動させることで目的を達成することが可能です。
回答を見る
  • ベストアンサー

ACCESSでコントロールできますか?

相変わらず、アクセス初心者の者です。 Accessで、以下のテーブルが三つ用意されています。 テーブル1 Aid A名称 テーブル2 Bid Aid B名称 テーブル3 Bid C名 Cid ここで、同一項目名で書いた物は、以下の件数条件でリンクしています。 Aid<Bid<Cid 1<n<n+の関係です テーブル3のC名をコンボボックスCで選択入力できるようにします。 コンボボックスで選択内容を変える毎に、あるいはDBを読み込み表示しているデータが変わる毎に、別に設置したテキストボックスAに、A名称を表示するようにしたいのですが、可能でしょうか? どのようにすれば、実現できますか? ややこしい説明ですが、宜しくお願いします。

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

  • ベストアンサー
noname#140971
noname#140971
回答No.1

tab1: ID__名称 1___A 2___B tab2: ID__tab1_ID__名称 1_________1__A_1 2_________1__A_2 3_________2__B_1 4_________2__B_2 tab3: tab2_ID__ID__名称 ______1___1__A_1_1 ______1___2__A_1_2 ______2___1__A_2_1 ______2___2__A_2_2 ______3___1__B_1_1 ______3___2__B_1_2 コンボ_C.値集合ソース=SELECT [tab3].[tab2_ID], [tab3].[ID], [tab3].[名称] FROM tab3; Private Sub コンボ_C_AfterUpdate()   Dim lngID As Long      If Len(Me.コンボ_C.Value & "") Then     lngID = DBLookup("tab1_ID", "tab2", "ID=" & Me.コンボ_C.Column(0))     Me.名称 = DBLookup("名称", "tab1", "ID=" & lngID)   End If End Sub まあ、これが一番簡単じゃないですかね。 ちなみに、テスト済みです。

groovyreality
質問者

お礼

ありがとうございました。 なんとか実現しました。

その他の回答 (2)

noname#140971
noname#140971
回答No.3

初心者ならば、無理して DBLookup関数を利用する必要はないです。 DLookup関数で十分。 そして、アクセス速度に不満を感じだしたらADOへ進めれたらいいです。

groovyreality
質問者

お礼

最終的には、DAOを使っいました。 ADOとDAOでは、いろいろ異なる部分も多いようですね。 ありがとうございました。

noname#140971
noname#140971
回答No.2

コンボ_C.値集合ソース= SELECT [tab1].[名称], [tab3].[名称] FROM (tab1 INNER JOIN tab2 ON [tab1].[ID]=[tab2].[tab1_ID]) INNER JOIN tab3 ON [tab2].[ID]=[tab3].[tab2_ID]; 名称.コントロールソース=[コンボ_C] このように、プロパティのみの設定で実現することも可。 しかし、「必要なとき必要なだけ情報を取得する」という原則からは逸脱します。 なお、DLookuop関数ではなくDBLookup関数を利用していたので補足しておきます、 Public Function DBLookup(ByVal strField As String, _              ByVal strTable As String, _              Optional ByVal strWhere As String = "", _              Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup    Dim DataValue    Dim strQuerySQL As String    Dim rst     As ADODB.Recordset    Set rst = New ADODB.Recordset    strQuerySQL = "SELECT " & strField & " FROM " & strTable    If Len(strWhere) > 0 Then      strQuerySQL = strQuerySQL & " WHERE " & strWhere    End If    With rst      .Open strQuerySQL, _         CurrentProject.Connection, _         adOpenStatic, _         adLockReadOnly      If Not .BOF Then        .MoveFirst        DataValue = .Fields(0)      End If    End With Exit_DBLookup: On Error Resume Next    rst.Close    Set rst = Nothing    DBLookup = Nz(DataValue, ReturnValue)    Exit Function Err_DBLookup:    MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"    Resume Exit_DBLookup End Function

groovyreality
質問者

お礼

丁寧なコードをありがとうございました。 参考にさせていただいて、試行錯誤しながら、何とか実現しました。 ありがとうございました。

関連するQ&A

  • accessのコンボボックスのことで質問です。

    accessを勉強しているのですが、ちょっとしたことで分からなくなってしまいました・・。 質問の内容なのですが、まずフォーム上にコンボボックスAとコンボボックスBを配置するとします。 レコードソースには仮に[情報テーブル]というテーブルが選択されているとします。 コンボボックスAには[情報テーブル]のフィールド名が、 例えば[顧客NO]、[商品]、[値段]というフィールド名が入っているとし、フィールドにはそれぞれ10件ずつデータが入力されています。 そしてコンボボックスAで[顧客NO]を選択するとコンボボックスBに[顧客NO]の10件のデータが挿入され、選択できるようにしたいのです。 他のフィールド名を選んだときにも同じようにコンボボックスBにフィールドのデータが入るようにしたいと思っています。 コンボボックスAにテーブル名を入れることはできたのですが、 コンボボックスAで選択されたフィールドのデータを、コンボボックスBで選択できるようにするというやり方がわからないのです・・。 accessは2002を使っています。 よろしくお願いします。

  • ACCESS コンボボックス 抽出 テキストボックスに表示

    初めての質問を投稿させていただきます。l ACCESSのVBAにて分からないことがあるので、 質問を投稿させていただきました。 以下のようなテーブルがあります。 名称:番号:管理番号:価格 cake|NO.1|C1|200 cake|NO.2|C2|200 chocolate|NO.1|C3|300 chocolate|NO.2|C4|300 chocolate|NO.3|C5|300 cookie|(空白)|C6|100 フォーム上に、コンボボックスが二つ設置されており 最初のコンボボックスでは、cake、chocolate、cookieを選択することができます。 また、二つ目のコンボボックスでは最初のコンボボックスで選択した名称に対する番号を選ぶことが出来ます。 ------------------以下が疑問点です------------------------- このフォームにはそれ以外にテキストボックスが設定されています。 名称と番号を設定した後に管理番号(重複なし)をテキストボックスに表示。 その後、管理番号を元に価格もテキストボックスに表示したいと考えておりますが、どのようなプログラムを組めばよろしいでしょうか?

  • Accessのコンボボックスの使い方について

    初心者です。 コンボボックスの使い方について教えて下さい。 商品テーブルA 商品名|コードA|コードB|コードC| マスターテーブル A|B|商品名|コードA|コードB|コードC|D|E のような2つのテーブルを作成し、マスターテーブルの「商品名」に コンボボックスで商品テーブルAの商品名を表示させるとします。 そこでコンボボックスで商品名を選択すると同時に 商品テーブルAからほかの「コードA」「コードB」「コードC」の値を マスターテーブルの「コードA」「コードB」「コードC」に入れる方法は ありますでしょうか? また、他の方法はありますでしょうか? 宜しくお願い致します。

  • ACCESSでフォームの明細で他の値を参照させたい

    ACCESS2010でフォームで明細行のコンボボックスを、他のテキストボックスの値を使って 行単位で動的に変更したいのですが、どのようにしたらよろしいのでしょうか 例えば、 1行目のAのコンボボックスで「果物」を選択したら、Bのコンボボックスは「リンゴ・みかん・イチゴ」を表示させたい 2行目のAのコンボボックスで「野菜」を選択したら、Bのコンボボックスは「きゅうり・きゃべつ」を表示したい もちろん、テーブルに下記のように保存されています 【分類】|【名称】 野菜|きゅうり 野菜|きゃべつ 果物|りんご 果物|みかん 果物|イチゴ

  • Accessのフォーム その2

    すいません、以前にも同じ質問をしたのですが、私の質問の仕方が悪くてうまくいきませんでした。 回答してくださった方、ありがとうございました! もう一度、詳しく質問しなおします。 顧客データを登録しているのですが、テーブルを元に登録フォームを作成しました。 商品がたくさんあって、4つのコードに分かれています。フォームの中に[A][B][C][D]と4つのコンボボックスを作成し、絞込み検索ができるようにはしました。 しかし、選んだデータの[A]しかテーブルに表示されません。例えば[A]のコンボボックスの中から[1010]を選択、[B]のコンボボックスから選択しようとしても空っぽです。 テーブルを見ると、[A]で選んだ[1010]だけが表示されています。 非連結のときはうまく出てたんですが・・。 もしかして連結列が間違ってるのでしょうか?? 元になるテーブルは Aコード A  Bコード B Aコード Cコード C Bコード Dコード D Cコード この2列目を表示したいのです。(2列目が[1010]など表示したいデータ) 列数はそれぞれ「2」で連結列は「2」です。 更新後処理は以下の通りです。 Private Sub コンボ0_AfterUpdate() Me!コンボ2.Requery End Sub Private Sub コンボ2_AfterUpdate() Me!コンボ4.Requery End Sub Private Sub コンボ4_AfterUpdate() Me!コンボ6.Requery End Sub ぜひよろしくお願いします。

  • ACCESSのコンボボックスについて

    ACCESSでコンボボックスを使っているときに たまに入力できなくなってしまう時があり困っています。 例えばA,B,Cという3つのデータを選択できるコンボボックスがあり、 現在、Aが選択されていてBに変更しようとした時に コンボボックスの表示部分が突然空欄(または選択されているのに表示されていない)になってしまいます。 その後、どれを選択してもコンボボックスには何も表示されなくなってしまいます。 この現象が起こるとなぜか同じフォーム内のボタンなどにも不都合が起こるようになってしまいます。 (テキストボックスのデータを削除するボタンがあるのですがおしてもなにも起こらなくなってしまいました) いろいろ試しているのですが全く原因がわかりません。 どのようなところに原因がありそうかなどあれば教えてください。 宜しくお願いします。

  • Access2000 コンボボックスで…

    こんにちは。Accessは…初心者です。 フォーム上のコンボボックスについての質問です。よろしくお願いします。 Windows2000/Access2000です。 次のようなテーブルがあるとします。 「作家」…作家ID,作家名 「作品」…作品ID,作家ID(「作家」テーブルから[作家名]を引っ張ってきます)作品名 「許諾」…許諾ID,作家ID(「作家」テーブルから[作家名]を引っ張ってきます),作品ID(「作品」テーブルから[作品名]を引っ張ってきます),許諾情報 「許諾」テーブルを元にして、フォームウィザードから単票形式で「許諾フォーム」を作成しました。 このとき[作家ID]と[作品ID]は自動的にコンボボックスになりますが、[作品ID]コンボボックスに、[作家ID]コンボボックスで選択した作家の作品のみを表示したいのです。 ([作家ID]でAさんを選択したら[作品ID]にAさんの作品だけが表示されるようにしたい、ということです。) 似た内容の質問を参考にしたり、いろいろなAccessのサイトを検索したりして試したのですが、イマイチ???でした。 何かよい方法がありましたらご教示ください。 お願いします。

  • ACCESSのクエリー抽出条件にIIFを使用して

    コンボボックスの値を抽出条件にしたクエリーを作成しています。 コンボボックスにて"ALL"を選択したときに、全レコードを表示したく、 以下の式を入れたのですが全表示がされません。 IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値]) Like "*" の部分がいけないのでしょうか? (偽の場合は選択した値のレコードが抽出されます) どなたか教えてください、よろしくお願いいたします。

  • オフィスアクセスのコンボボックスについて

     オフィスアクセスのコンボボックスについて質問いたします。  課テーブルと係テーブルがあり、それぞれで課番号が共通しています。 フォームでそれぞれをコントロールソースにして、コンボボックスを配置しています。  課テーブルのコンボボックスでCを選んだ時、係テーブルのコンボボックスに表示されるのをC_1だけにしたいと考えています。  このようにするには、どのような設定を行えばよろしいのでしょうか? ご教示のほど、よろしくお願いいたします。

  • group by句

    色々と試行錯誤してやっていますが、なかなか自分の 思うような結果が得られないためご質問させて下さい。 テーブルが全部で3つあります。 テーブルA id name 1 巨人 2   西武 テーブルB id name 1 小笠原 2 ラミレス 3 中島 4  片岡 テーブルC id テーブルAID テーブルBID 背番号 1 1 1 30 2 1 2 10 3 2 3 3 4 2 4 8 テーブルを結合し、テーブルCにある 背番号をテーブルAid,テーブルBidを元に sumしたいのですがうまくいきません。 以下がそのSQLになります。 (1)サブクエリーを使ったSQL この場合値が重複されて表示されてしまいます。 select a.name,b.name,c.name, (select sum(背番号) from tableC c where c.テーブルAId = a.id group by c.テーブルAid ), (select sum(背番号) from tableC c where c.テーブルBid = bid group by c.テーブルBid ) from tableC c inner join tableA a on a.id = c.テーブルAid inner join tableB b on b.id = c.テーブルBid (2) select a.name,b.name,c.name, (select sum(背番号) from tableC c where c.テーブルAId = a.id ), (select sum(背番号) from tableC c where c.テーブルBid = bid ) from tableC c inner join tableA a on a.id = c.テーブルAid inner join tableB b on b.id = c.テーブルBid group by c.テーブルAid 重複はされないのですが、group byが一つのみなので ちゃんとした出力がされません。    他にやり方があるのかもしれませんが、お分かりになる方が    いらっしゃいましたら、ご教授お願い致します。