代码之家  ›  专栏  ›  技术社区  ›  symbiont

数据表中的MS Access解除绑定组合框?

  •  1
  • symbiont  · 技术社区  · 16 年前

    在ms access 2007中,我试图为一个表创建一个表单。此表具有来自两个父表的外键。所以我想我会把这些字段作为一个查找。但是我不能为每个父表创建一个查找,因为它们是组合键。

    我决定为每个父表和子表创建一个查询,其中每个复合键都有一个额外的字段。对于使用未绑定组合框的普通窗体,此操作很好。。。但未绑定组合框在数据表子窗体中不起作用。当我更改子窗体代码中的组合框时,它们也将应用于同一列中的所有其他组合框。

    我的问题:

    • 是否有方法更改单个未绑定组合框的值?

    • 除了组合框或数据表子窗体之外,是否应该使用其他控件?

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

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

    2 回复  |  直到 16 年前
        1
  •  1
  •   randomwindowskernel    14 年前

    我自己也遇到过这种问题,所以为了子孙后代:

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

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

    还有另一种可能性,也可能有用,但我自己并没有尝试过这样的事情。组合框的行源可能非常复杂,因此很可能根本不需要用VBA更新组合框。rowsource可以使用语法Me.Form依赖于其他控件(例如另一个组合框)!控件名或窗体!福尔曼!ControlName,它将允许您形成组合键。当然,您也可以使用rowsource从查询中进行选择。更有趣的是,只要窗体是打开的,查询就可以引用窗体上的控件,如果必须这样做,您应该能够安全地使用VBA修改该控件。

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

        2
  •  0
  •   David-W-Fenton    16 年前

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

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

    如果你的列表子窗体是我!名单和你的细节是我!表单的PK字段是MyID,则detail子表单的链接属性为:

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

    当您移动到列表表单中的其他记录时,它将自动加载到子表单中。对先前显示的详细信息所做的任何编辑都将在记录离开前保存。

    推荐文章