1

在 ms-access 2007 中,我正在尝试为表格制作表格。该表具有来自 2 个父表的外键。所以我想我会查找这些字段。但我无法为每个父表创建单个查找,因为它们是复合键。

我决定为每个父表和子表创建一个查询,其中每个复合键都有一个额外的字段。这适用于使用未绑定 ComboBox 的普通表单...但未绑定 ComboBox 在 DataSheet 子表单中不起作用。当我对子表单代码中的组合框进行更改时,它们也将应用于同一列中的所有其他组合框。

我的问题:

  • 有没有办法改变单个未绑定 ComboBox 的值?

  • 除了 ComboBox 或 DataSheet 子表单之外,我还应该使用其他控件吗?

  • 这种情况的正常工作是什么?

我无法绑定组合框,因为查询中的字段是计算/表达式,正如我所说。

4

2 回答 2

1

我自己遇到了这个问题的一种形式,所以为了后代:

虽然一般来说,“在这种情况下不要使用连续表格/数据表”的建议是最好的建议......可以解决这个问题。

但是,访问不会让您更新数据表上单个控件的值。在这种情况下可以使用的是临时表,当用作记录源时,它可以成为这些控件的值。但是,每次计算需要更改时,您都需要重新填充表,并重新查询控件(重新查询整个表单也可以正常工作)。此外,如果您在控件上启用编辑,则必须在每个控件上编写一些 VBA 来处理更新事件(更新前),并运行您自己的查询来更新源表,而不仅仅是临时表。可能很烦人,但很有效。

还有另一种可能性,它也可能有效,但我自己并没有尝试过这样做。组合框的行源可能非常复杂,因此您可能根本不需要使用 VBA 更新组合框。行源可以依赖于使用语法 Me.Form!controlName 或 Forms!FormName!ControlName 的其他控件(例如另一个组合框),这将允许您形成复合键。当然,您也可以从带有行源的查询中进行选择。更有趣的是,查询可以引用表单上的控件,前提是表单是打开的,并且如果需要,您应该能够安全地使用 VBA 对其进行修改。

在这两者之间,您应该能够强制访问、踢和尖叫,以显示您希望的任何数据,甚至在数据表上,并允许用户更改该数据(但仅在您想要的情况下),并且使用 BeforeUpdate 事件,将修改后的数据拖回它来自的任何表。

于 2011-10-27T22:39:17.683 回答
0

在需要有条件地更改组合框的情况下,连续表单和数据表不适用于编辑。问题是,如果您使用 OnCurrent 事件来设置组合框的 Rowsource,则该行将可以,但随后将隐藏其他行的存储值。

在这种情况下,解决方案是永远不要使用连续的表单/数据表来编辑数据(事实上,我几乎从不使用它们进行编辑)。您可以创建两个子表单,一个用作列表的连续/数据表子表单,以及一个显示一条记录的详细信息子表单。使列表子表单不可编辑,而详细信息子表单可编辑。您可以使用detail subform控件的Link Child/Link Master属性链接它们两者,并将其设置为列表子窗体的PK。

如果您的列表子表单是 Me!List 并且您的详细信息是 Me!Form,并且 PK 字段是 MyID,那么详细信息子表单的链接属性将是:

  Master: Me!List.Form!MyID
  Child:  MyID

当您在列表表单中移动到不同的记录时,它将自动加载到子表单中。对先前显示的详细信息的任何编辑都将在记录出发前保存。

于 2010-08-27T19:44:56.973 回答