• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access2002で力をお貸しください)

Access2002でTEXTBOXに値を表示させる方法

このQ&Aのポイント
  • Access2002で、コンボボックスの入力値に応じてテキストボックスに値を表示させる方法を教えてください。
  • テーブルAとテーブルBのリレーションを利用して、コンボボックスの選択値に応じてテキストボックスに関連する値を表示させる方法を教えてください。
  • Access2002で、コンボボックスAとコンボボックスBの入力値に応じてテキストボックスに関連する値を表示させる方法を教えてください。

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

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

補足: 仮にコンボボックスを2つ配置するもんだと仮定すると問題があります。 コンボ_A=SELECT [項目A1] FROM A GROUP BY [項目A1]; コンボ_B=SELECT [項目A2] FROM A GROUP BY [項目A2]; このように GROUP BY を使う必要があります。 (が、ここが質問に明記されていないです!) 仮に、GROUP BY を使うことを意図しているのであれば、テキストボックスの更新は次のようです。 Private Sub コンボ_A_AfterUpdate()    テキスト0_Update End Sub Private Sub コンボ_B_AfterUpdate()    テキスト0_Update End Sub Public Sub テキスト0_Update()   Dim strSQL As String   strSQL = "SELECT B.項目B2 " & _        "FROM A INNER JOIN B ON A.項目A3 = B.項目B1 " & _        "WHERE A.項目A1='" & Me.[コンボ_A] & "' AND A.項目A2='" & Me.[コンボ_B] & "'"   Me.テキスト0 = DBLookup(strSQL) End Sub Access の DLookup関数は、単純なSelect文しか実行できません。 ですから、機能を拡張した DBLookup関数の類を用意し利用することになります。 ちなみに、テキストボックスには'ああ'か'いい'が表示されることになります。 <33=>30 のミスだとすると・・・> 'うう'を表示するには、また、別途に、複数レコードを取得する関数 DBSelect などが必要となります。 Public Sub テキスト0_Update()   Dim strSQL As String   strSQL = "SELECT B.項目B2 " & _        "FROM A INNER JOIN B ON A.項目A3 = B.項目B1 " & _        "WHERE A.項目A1='" & Me.[コンボ_A] & "' AND A.項目A2='" & Me.[コンボ_B] & "'"   Me.テキスト0 = Replace(DBSelect(strSQL, True), ";", "") End Sub まあ、このようにケースによってやり方は色々。 DBLookup関数、DBSelect関数をここで紹介しても構わないのですが、いずれにしろ、仮定の上での話しなので・・・。

groovyreality
質問者

お礼

ご丁寧にありがとうございました。 チャレンジしてみます。

その他の回答 (1)

noname#140971
noname#140971
回答No.1

質問に曖昧な点があります。 >画面から、二つのコンボボックス項目 リスト0.値集合ソース= SELECT [B].[項目B2] FROM A INNER JOIN B ON [A].[項目A3]=[B].[項目B1] WHERE [A].[項目A1]=[Forms]![フォーム1]![コンボ0]; ここでは、コンボボックスに二つの項目と解釈。 二つのコンボボックスのそれぞれの値に応じても、要は、この値集合ソースが変わるだけ。 さて、仮に、テキストボックスではなくリストボックスに表示することとします。 Private Sub コンボ0_AfterUpdate()   Me.[リスト0].Requery End Sub これでOKです。 どうしても、テキストボックスに表示したい時は、 Private Sub コンボ0_AfterUpdate() On Error Resume Next   Dim I As Integer   Dim N As Integer   Dim T As String      Me.[リスト0].Requery   N = Me.[リスト0].ListCount - 1   For I = 0 To N     T = T & Me.[リスト0].ItemData(I) & vbCrLf   Next I   Me.テキスト0 = Left(T, Len(T & "") - 1) End Sub この場合、リストボックスは単なるデータの中継をしていますので非表示に。 On Error Resume Next は、表示が空文の時のLeft関数のエラー対策です。 ※二つのコンボボックスのそれぞれの値に応じての<値集合ソース>は、多分、クエリを利用すれば・・・。

関連するQ&A

専門家に質問してみよう