在ms-access 2007中,我正在尝试为表创建一个表单。此表具有来自2个父表的外键。所以我想我会让这些字段成为查找。但我无法为每个父表创建单个查找,因为它们是复合键。
我决定创建一个查询,其中为每个父表和子表提供每个复合键的额外字段。这使用未绑定的ComboBox正常形式工作正常...但未绑定的ComboBox在DataSheet子窗体中不起作用。当我在Subform代码中对ComboBox进行更改时,它们也会应用于同一列中的所有其他ComboBox。
我的问题:
有没有办法更改单个未绑定的ComboBox的值?
我应该使用除ComboBox或DataSheet子表单以外的其他控件吗?
这种情况的正常工作是什么?
我无法绑定ComboBox,因为查询中的字段是按照我的说法计算的/ an-expression。
答案 0 :(得分:1)
我自己遇到了这个问题,所以为了后人:
虽然一般来说,建议“不要在这种情况下使用连续表格/数据表”是最好的建议......可以解决这个问题。
但是,访问权限不允许您更新数据表上单个控件的值。在这种情况下可以使用的是临时表,当用作记录源时,它可以成为这些控件的值。每次计算需要更改时,您将需要重新填充表,并重新查询控件(重新查询整个表单也应该起作用)。此外,如果您在控件上启用编辑,则必须在每个控件上编写一些VBA来处理更新事件(更新前),并运行您自己的查询以更新源表,而不仅仅是临时表。或许很烦人,但有效。
还有另一种可能性,也可能有效,但我自己并没有尝试做过这样的事情。组合框的行源可能非常复杂,因此您可能根本不需要使用VBA更新组合框。 rowsource可以依赖于其他控件(例如另一个组合框),使用语法Me.Form!controlName或Forms!FormName!ControlName,它将允许您形成复合键。当然,您也可以选择带有行源的查询。更有趣的是,如果表单是打开的,查询可以引用表单上的控件,如果需要,您应该可以安全地使用VBA修改它。
在这两者之间,您应该能够强制访问,踢和尖叫,显示您希望的任何数据,甚至在数据表上,并允许用户更改该数据(但仅限于您希望它),并使用BeforeUpdate事件,将修改后的数据拖回到它来自的任何表中。
答案 1 :(得分:0)
在需要有条件地更改组合框的情况下,连续表单和数据表不适用于编辑。问题是如果你使用OnCurrent事件来设置组合框的Rowsource,那么该行就可以了,但是会隐藏其他行的存储值。
解决方法是在这种情况下永远不要使用连续表格/数据表来编辑数据(实际上我几乎没有使用它们进行编辑)。您可以创建两个子表单,一个用作列表的连续/数据表子表单,以及一个显示一个记录的详细子表单。使列表子表单不可编辑,并且详细子表单可编辑。您可以使用详细子窗体控件的Link Child / Link Master属性链接其中两个,并将其设置为列表子窗体的PK。
如果您的列表子表单是Me!List并且您的详细信息是Me!Form,并且PK字段是MyID,则详细子表单的链接属性将是:
Master: Me!List.Form!MyID
Child: MyID
当您移动到列表表单中的其他记录时,它将自动加载到子表单中。在记录离开之前,将保存对先前显示的细节的任何编辑。