2010-08-27 84 views
1

在ms-access 2007中,我试图为表格创建一个表格。此表具有来自2个父表的外键。所以我想我会让这些字段查找。但我无法为每个父表创建一个查找,因为它们是复合键。在DataSheet中MS访问未绑定的组合框?

我决定创建一个查询,其中为每个父表和子表添加每个组合键的额外字段。这可以正常使用未绑定的ComboBox正常窗体工作正常...但未绑定的ComboBox不能在DataSheet子窗体中工作。当我对Subform代码中的ComboBox进行更改时,它们也会应用于同一列中的所有其他ComboBox。

我的问题:

  • 有没有办法来改变个体结合的组合框的值?

  • 是否有不同的控件我应该使用比ComboBox或DataSheet子窗体?

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

我无法绑定ComboBox,因为查询中的字段是按照我所说的计算的/ an-expression。

回答

0

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

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

如果列表子窗体是我的列表和细节是我的表,和PK场是身份识别码,对细节子窗体的链接属性是:

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

当你移动到不同记录在列表中,它会自动加载到子表单中。在记录离开前,任何对以前显示的细节的编辑都将被保存。

1

我碰到这个问题我自己的一种形式跑,所以为后人着想:

虽然一般,建议“不要在这个situtation使用连续纸/数据表”是最好的建议...有可能解决这个问题。

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

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

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