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