- 締切済み
ACCESS2013リストから選択してデータの入力
ACCESS2013で下記のような名前の3つのテーブルがあります。 T会社名、T摘要名テーブルには既にデータが入力されており、 この入力された値を元にT支払にデータを入力することを考えています。 T支払で会社名をA社と入力したら、摘要名はT摘要名テーブルを参照して、A社の摘要名の中からだけリスト選択を行いたいのですが、どのような手順を踏めばよいでしょうか? T会社名(フィールド値に会社名を持つ) T摘要名(フィールド値に会社名と摘要名を持つ) T支払(フィールド値に会社名と摘要名を持つ) 選択クエリを使って、抽出条件を使えばできると聞いたことがありますが、いまいち理解できませんでした。どのテーブルで、あるいはクエリ、フォームを新たに作って、どのような操作を行うのか具体的に教えていただきたいです。よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
[T_会社名] ID=1 会社名=AAA 読み=AAA [T_摘要名] ID=1,2,3 T_会社名_ID=1,1,1 摘要名=AAA1,AAA2,AAA3 大抵は、[読み]で検索→表示された会社名一覧の中から選択→[ID]の確定という流れかと思います。が、ここでは、簡略化して[会社名]→[ID]の確定とします。次に、[T_会社名].[ID]を手掛かりに該当する[T_摘要名].[摘要名]をセレクトします。 Me.リスト_摘要名の[値集合タイプ]='値リスト'としておけば、これで街頭の摘要名がリスト形式で表示されます。 Option Compare Database Option Explicit Private Sub テキスト_会社名_BeforeUpdate(Cancel As Integer) Dim lngID As Long Dim strSQL(1) As String ' ------------------------------------------------------- ' [T_会社名]の主キーを取得 ' ------------------------------------------------------- strSQL(0) = "SELECT ID FROM T_会社名 WHERE 会社名='" & Me.テキスト_会社名 & "'" lngID = DBLookup(strSQL(0)) ' ------------------------------------------------------- ' [T_摘要名]から該当する[摘要名]のリストを取得 ' ------------------------------------------------------- strSQL(1) = "SELECT 摘要名 FROM T_摘要名 WHERE T_会社名_ID=" & lngID Me.テキスト_T_会社名_ID = lngID Me.リスト_摘要名.RowSource = DBSelect(strSQL(1)) End Sub または、 Me.リスト_摘要名.値集合タイプ="テーブル/クエリ" Me.値集合タイプ=SELECT T_摘要名.摘要名 FROM T_摘要名 WHERE (((T_摘要名.T_会社名_ID)=Forms!フォーム7!テキスト_T_会社名_ID)); という設定でもOK. Private Sub テキスト_会社名_BeforeUpdate(Cancel As Integer) Dim lngID As Long Dim strSQL As String ' ------------------------------------------------------- ' [T_会社名]の主キーを取得 ' ------------------------------------------------------- strSQL = "SELECT ID FROM T_会社名 WHERE 会社名='" & Me.テキスト_会社名 & "'" lngID = DBLookup(strSQL) Me.テキスト_T_会社名_ID = lngID ' ------------------------------------------------------- ' 単にフォームのリストを更新する ' ------------------------------------------------------- Me.リスト_摘要名.Requery End Sub この場合は、DBSelect()部分をAccessが代行してくれます。 ※Access2013でも考え方は同じかと・・・。 ※DBSelect()はユーザー定義関数。必要ならば補足します。 ※DBLookup()は、DLookup()の引数をSQLにしただけものもの。 その方が判りやすいだろうと思って使ったに過ぎません。 実際には、DLookup()をお使いください。 ※しかし、問題は、テーブル構造。 主キーでリレーションしているかどうか? そこんところが、一番大事かと・・・。