• 締切済み

ACCESS2013リストから選択してデータの入力

ACCESS2013で下記のような名前の3つのテーブルがあります。 T会社名、T摘要名テーブルには既にデータが入力されており、 この入力された値を元にT支払にデータを入力することを考えています。 T支払で会社名をA社と入力したら、摘要名はT摘要名テーブルを参照して、A社の摘要名の中からだけリスト選択を行いたいのですが、どのような手順を踏めばよいでしょうか? T会社名(フィールド値に会社名を持つ) T摘要名(フィールド値に会社名と摘要名を持つ) T支払(フィールド値に会社名と摘要名を持つ) 選択クエリを使って、抽出条件を使えばできると聞いたことがありますが、いまいち理解できませんでした。どのテーブルで、あるいはクエリ、フォームを新たに作って、どのような操作を行うのか具体的に教えていただきたいです。よろしくお願いします。

みんなの回答

回答No.1

[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()をお使いください。 ※しかし、問題は、テーブル構造。  主キーでリレーションしているかどうか?  そこんところが、一番大事かと・・・。