- ベストアンサー
Accessでテーブルをリンクさせ、コンボボックスの選択で別のテキストボックスに名称表示する方法について
- Accessで複数のテーブルをリンクさせる方法を解説します。
- コンボボックスで選択した値に応じて、別のテキストボックスに関連したテーブルの名称を表示する方法を説明します。
- データベースの関連性を設定し、コンボボックスとテキストボックスを連動させることで目的を達成することが可能です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
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 まあ、これが一番簡単じゃないですかね。 ちなみに、テスト済みです。
その他の回答 (2)
初心者ならば、無理して DBLookup関数を利用する必要はないです。 DLookup関数で十分。 そして、アクセス速度に不満を感じだしたらADOへ進めれたらいいです。
お礼
最終的には、DAOを使っいました。 ADOとDAOでは、いろいろ異なる部分も多いようですね。 ありがとうございました。
コンボ_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
お礼
丁寧なコードをありがとうございました。 参考にさせていただいて、試行錯誤しながら、何とか実現しました。 ありがとうございました。
お礼
ありがとうございました。 なんとか実現しました。