• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESSでコントロールできますか?)

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

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

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

  • ベストアンサー
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