在Access 2010中,我有通过表Task
建立多对多关系的表Action
和ActionTask
。在Task
的表单中,我想通过Action
联结表为与当前任务相关的所有ActionTask
放置一个子表单。
这本身就是我能做到的。
诀窍是Action
实际上是表的四层层次结构的最低等级。
每个Action
属于Goal
,每个Goal
属于Theme
,每个Theme
属于Strategy
。
我不想只列出列出所有可用Action
的组合框,而是希望为Strategy
/ Theme
/ Goal
/使用级联组合框Action
。
我也可以这样做。
问题是当我在数据表中使用此技术时,如果我选择给定行,则所选行显示正确的Strategy
/ Theme
/ Goal
/ {{1} },但在所有其他行
Action
为空白Action
/ Strategy
/ Theme
设置为当前行的值,而不是该行的值
我尝试使用“连续表单”视图而不是“数据表”视图,但结果几乎相同。
我想我知道为什么(我Goal
回调中的Me.StrategyCombo = ...
内容),但我不知道另一种实现方法。
如何让子窗体正确显示所有行?
Here's the Access file,但所有相关细节应在下面。
Form_Current
答案 0 :(得分:3)
你做不到。任何操作都适用于子窗体当前记录,但似乎会影响所有控件。有各种解决方法。
答案 1 :(得分:2)
据我所知你不能,但你可以通过创建一个连续的表单来处理它,将你的字段放在表格布局中,然后为每个组合框添加一个文本框(如果字段是prodID,那么我命名为文本框txtprodID)。将文本框移到组合框的顶部,但稍微窄一些,只是对组合列表箭头的羞涩,然后编写代码来更新文本框。
答案 2 :(得分:2)
我解决了数据表中依赖(级联)组合框的问题。 本质上,如果组合框1依赖于组合框2中的值,它将把当前行的“行源”应用于数据表中的所有行
解决方案:
1在加载程序或设计器中,定义行源以包括所有行,以便其后的数据值将始终与行源中的一个选项匹配(否则显示空白值)
即:
char
2在从属组合框获取焦点事件中,将行源重新定义为基于前者所依赖的另一个组合框中的值。重新查询控件
Private Sub Form_Load()
Me.cmbProjects.RowSource = "SELECT [Projects].[ProjectPK], [Projects].[ProjectName], [Projects].[PI_ID] FROM [Projects] ORDER BY [ProjectName] "
End Sub
3在从属组合框失去焦点事件中,将行源重新定义为不基于前者所依赖的另一个组合框中的值。
Private Sub cmbProjects_GotFocus()
Me.cmbProjects.RowSource = "SELECT [Projects].[ProjectPK], [Projects].[ProjectName], [Projects].[PI_ID], [Projects].[Status] FROM [Projects] WHERE [PI_ID] = " + CStr(cmbPIs.Value) + " ORDER BY [PI_ID], [ProjectName] "
cmbProjects.Requery
End Sub