Access 2007 未绑定控制在一个记录中更改对所有其他记录的影响

Posted

技术标签:

【中文标题】Access 2007 未绑定控制在一个记录中更改对所有其他记录的影响【英文标题】:Access 2007 unbound control changed in one record impacts on all others 【发布时间】:2012-03-30 14:55:51 【问题描述】:

在记录患者数据时,需要的两个要素是主要顾问和其他顾问。名为consultant_list 的表存储ID、名称、代码和专业。组合允许选择顾问名称,控件将该顾问的 ID 作为顾问 ID 存储在表中。选择自动在表单上的绑定控件中显示顾问的代码和专业,txtConsultantCode 和 txtSpeciality。

问题来自另一位顾问。顾问代码和专业的附加绑定控件自动完成顾问下选择的数据。所以我使用了未绑定的控件 txtOtherConsultantCode 和 txtOtherSpeciality 并为 cboOtherConsultant 设置 AfterUpdate 事件来执行 DLookup() 并填写值。以为效果很好,直到我发现虽然它填写的值正常,但为当前记录输入的值也填写在表单上的任何先前记录中,留下不一致的数据。此外,如果其他顾问名称被清除,未绑定控件中的值仍然存在,因此我在 LostFocus 事件上编写代码以检查 cboOtherConsultant 是否为 Null,如果是,则将关联值也设置为 Null,但这当然也会影响其他记录。救命!

【问题讨论】:

【参考方案1】:

您描述了连续表单上的未绑定控件通常会发生什么。由于它们未绑定,因此控件不绑定到当前记录。但是,您可以通过使用 DLookup() 表达式作为这些控件的控件源属性将它们绑定到当前记录。使用这种方法,控件将不再是未绑定的。

但是,我不相信这是最好的方法。在我看来,您表单的记录源可能是加入 consultant_list 的查询。那么你就不需要DLookUp() 表达式来提取 txtOtherConsultantCodetxtOtherSpeciality 的值;它们已经出现在表单的记录源中。您可以将这 2 个文本框的属性设置为 Enabled = NoLocked = Yes,以便它们仅显示...用户可以通过在 cboOtherConsultant 中进行不同的选择来更改它们。

【讨论】:

一如既往地感谢您的帮助。您将 DLookup 表达式放在控制源中的建议对我来说效果很好,而且我也锁定了文本框 - 没想到。 在空白表单上,以 DLookup 作为控制源的文本框显示为 #ERROR,直到您为其他顾问选择一个值,然后它们才完成。有没有办法解决这个问题? =DLookUp("code","consultant_list","ID=" & Nz([cboOtherConsultant], 0))

以上是关于Access 2007 未绑定控制在一个记录中更改对所有其他记录的影响的主要内容,如果未能解决你的问题,请参考以下文章

更新取消事件之前的 MS Access 不适用于未绑定的组合框

MS ACCESS - 如何在更改事件中获取未绑定组合框的当前列值

MS Access 使用绑定表单更新未绑定表单

数据表中的 MS-Access 未绑定组合框?

MS-Access 2007 - 如何在点击事件中以编程方式访问子表单列数据

用于添加记录的表单设计中的 Access 2007 空白表单