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()
表达式来提取 txtOtherConsultantCode 和 txtOtherSpeciality 的值;它们已经出现在表单的记录源中。您可以将这 2 个文本框的属性设置为 Enabled = No
和 Locked = Yes
,以便它们仅显示...用户可以通过在 cboOtherConsultant 中进行不同的选择来更改它们。
【讨论】:
一如既往地感谢您的帮助。您将 DLookup 表达式放在控制源中的建议对我来说效果很好,而且我也锁定了文本框 - 没想到。 在空白表单上,以 DLookup 作为控制源的文本框显示为 #ERROR,直到您为其他顾问选择一个值,然后它们才完成。有没有办法解决这个问题?=DLookUp("code","consultant_list","ID=" & Nz([cboOtherConsultant], 0))
以上是关于Access 2007 未绑定控制在一个记录中更改对所有其他记录的影响的主要内容,如果未能解决你的问题,请参考以下文章
更新取消事件之前的 MS Access 不适用于未绑定的组合框
MS ACCESS - 如何在更改事件中获取未绑定组合框的当前列值