【问题标题】:How can I update any field value through VBA code in ms access?如何在 ms 访问中通过 VBA 代码更新任何字段值?
【发布时间】:2013-10-02 18:20:27
【问题描述】:

如何在 ms 访问中通过 VBA 代码更新任何字段值?当我在组合框中输入值时,相关表中的某些字段会随着我输入数据而更新。而其他人则没有。我应该怎么做才能解决这个问题?

在一个组合框中,我使用了 me.refresh 命令,它在我输入时更新数据。而在另一个组合框中我做了同样的事情,但我没有得到任何结果。我哪里出错了?

此外,未注册的软件也会出现此类问题,因此它们在不同时间的行为会有所不同。

【问题讨论】:

    标签: vba ms-access combobox ms-access-2007 ms-access-2010


    【解决方案1】:

    当您更改表单上的文本框/组合框/等的值时,表中的记录不会立即更新。 Access 处理它的默认方式是等到记录不再具有焦点,然后使用您所做的任何更改更新表中的记录。

    如果您愿意,可以使用以下命令通过 After Update 事件强制更新表中的记录:

    Private Sub txtMyFieldName_AfterUpdate()
      Me.Dirty = False
    End Sub
    

    但是,我只会在编辑现有记录时这样做。如果您正在输入新记录,那么您不想在每个控件更新后触发Me.Dirty = False。如果您确实在新记录条目上触发了Me.Dirty = False,并且您有尚未填写的必填字段,您将收到一条错误消息,指出必填字段不能包含空值。

    【讨论】:

    • 我无法理解你的最后一句话。如果我要输入新记录,那我该怎么办。
    • ALSO after_update 事件应该适用于绑定和未绑定控件?
    • 未绑定控件将没有任何要更新的数据库字段。所以,Me.Dirty = False 不会对未绑定的控件做任何事情。但是,你不需要它。未绑定的控件是通过对另一个控件的操作或用户交互来控制的。
    【解决方案2】:

    表单上(绑定)控件值的更改与基础字段值的更新之间存在细微的概念差异。在触发 'update' 事件之前,基础字段的值可能不会更新。

    当然,如果您正在处理的控件是未绑定的,则不能有任何字段更新...

    编辑:

    如果您想以编程方式更改未绑定的控件值:

    myForm.controls(myControl).value = "whatever"
    

    如果要更改绑定控件及其基础字段,请在字段方面进行操作

    myForm.recordset.fields(myField).value = "whatever" 
    myForm.recordset.update
    

    然后您可能需要刷新屏幕上的控件以显示更新后的值

    在控制端

    myForm.controls(myControl).value = "whatever" 
    

    然后您可能需要在底层控件上以编程方式触发更新 (recordset.update) 事件

    【讨论】:

    • 那么当 lostfocus 事件触发时我如何更新任何未绑定的控件。
    • 据我记得,这取决于你如何失去焦点:如果是通过 ESC 键,更新可能不会被触发。如果是通过 Enter 或 TAB,它将被解雇。将一些 debug.print 消息添加到您的事件和更新程序之前/之后,并检查如何管理不同的事件。我认为您还可以在事件层次结构上找到一些帮助。
    猜你喜欢
    • 2017-03-20
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2022-12-23
    相关资源
    最近更新 更多