Access 2010 にはテーブルがTask
ありAction
、 table を介して多対多の関係がありますActionTask
。のフォームに、ジャンクション テーブルを介して現在のタスクに関連するTask
すべての のサブフォームを配置したいと考えています。Action
ActionTask
これ自体は、私ができることです。
秘訣は、それAction
が実際にはテーブルの 4 層階層の最下位であるということです。それぞれAction
が に属しGoal
、それぞれがGoal
に属しTheme
、それぞれがTheme
に属しStrategy
ます。
コンボ ボックスに利用可能なすべての をリストするだけではなく、 / / /Action
にカスケード コンボ ボックスを使用したいと考えています。Strategy
Theme
Goal
Action
これは私にもできます。
問題は、データシートでこの手法を使用する場合です。特定の行を選択すると、選択した行には適切なStrategy
/ Theme
/ Goal
/Action
が表示されますが、他のすべての行では
- は
Action
空白です Strategy
/Theme
/は、Goal
その行の値ではなく、現在の行の値に設定されます
「データシート」ビューではなく「連続フォーム」ビューを使用してみましたが、結果はほとんど同じです。
理由(コールバックの内容)はわかっていると思いますMe.StrategyCombo = ...
がForm_Current
、それを達成する別の方法はわかりません。
サブフォームにすべての行を正しく表示させるにはどうすればよいですか?
Access ファイルは次のとおりですが、関連するすべての詳細は以下のとおりです。
Tables:
Strategy : (ID, Desc)
Theme : (ID, StrategyID, Desc)
Goal : (ID, ThemeID, Desc)
Action : (ID, GoalID, Desc)
Task : (ID, Desc, ...)
ActionTask : (ActionID, TaskID)
Form Settings:
[Forms]![Task]![ActionTaskSub]:
Link Master Fields: ID
Link Child Fields : TaskID
[Forms]![Task]![ActionTaskSub].[Form]:
On Current:
Private Sub Form_Current()
' when the form loads a record, should reverse propegate
' action > goal > theme > strategy
Dim goalID, themeID, strategyID
' figure out the goal, theme, and strategy that go with this action
If (Me.ActionID) Then
goalID = DLookup("[GoalID]", "Action", "[ID] = " & CStr(Me.ActionID))
themeID = DLookup("[ThemeID]", "Goal", "[ID] = " & CStr(goalID))
strategyID = DLookup("[StrategyID]", "Theme", "[ID] = " & CStr(themeID))
End if
' populate the combo boxes and make the appropriate selections
Me.StrategyCombo = strategyID
Me.ThemeCombo.Requery
Me.ThemeCombo = themeID
Me.GoalCombo.Requery
Me.GoalCombo = goalID
Me.ActionCombo.Requery
Me.ActionCombo = Me.ActionID
End Sub
[Forms]![Task]![ActionTaskSub].[Form]![StrategyCombo]:
Row Source : SELECT [Strategy].[ID], [Strategy].[Desc] FROM [Strategy];
After Update:
Private Sub StrategyCombo_AfterUpdate()
Me.ThemeCombo = Null
Me.ThemeCombo.Requery
Call ThemeCombo_AfterUpdate
End Sub
[Forms]![Task]![ActionTaskSub].[Form]![ThemeCombo]:
Row Source : SELECT [Theme].[ID], [Theme].[Desc] FROM [Theme] WHERE
[Theme].[StrategyID] = [Forms]![Task]![ActionTaskSub].[Form]![StrategyCombo];
After Update:
Private Sub ThemeCombo_AfterUpdate()
Me.GoalCombo = Null
Me.GoalCombo.Requery
Call GoalCombo_AfterUpdate
End Sub
[Forms]![Task]![ActionTaskSub].[Form]![GoalCombo]:
Row Source : SELECT [Goal].[ID], [Goal].[Desc] FROM [Goal] WHERE
[Goal].[ThemeID] = [Forms]![Task]![ActionTaskSub].[Form]![ThemeCombo];
After Update:
Private Sub GoalCombo_AfterUpdate()
Me.ActionCombo = Null
Me.ActionCombo.Requery
End Sub
[Forms]![Task]![ActionTaskSub].[Form]![ActionCombo]:
Row Source : SELECT [Action].[ID], [Action].[Desc] FROM [Action] WHERE
[Action].[GoalID] = [Forms]![Task]![ActionTaskSub].[Form]![GoalCombo];