如何通过ms access中的VBA代码更新任何字段值?

如何通过ms access中的VBA代码更新任何字段值?,vba,ms-access,combobox,ms-access-2007,ms-access-2010,Vba,Ms Access,Combobox,Ms Access 2007,Ms Access 2010,如何通过ms access中的VBA代码更新任何字段值?当我在combobox中输入值时,相关表格中的一些字段会在我输入数据时更新。而其他人则不然。我该怎么解决这个问题 在一个组合框中,我使用了me.refresh命令,它在我输入时更新数据。而在另一个组合框中,我也做了同样的操作,但没有得到任何结果。我在哪里犯错 此外,未注册的软件也出现了此类问题,因此它们在不同的时间表现不同。表单上(绑定)控件值的更改与基础字段值的更新在概念上略有不同。在触发“update”事件之前,可能不会更新基础字段的值

如何通过ms access中的VBA代码更新任何字段值?当我在combobox中输入值时,相关表格中的一些字段会在我输入数据时更新。而其他人则不然。我该怎么解决这个问题

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


此外,未注册的软件也出现了此类问题,因此它们在不同的时间表现不同。

表单上(绑定)控件值的更改与基础字段值的更新在概念上略有不同。在触发“update”事件之前,可能不会更新基础字段的值

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

编辑:

如果要以编程方式更改未绑定的控件值,请执行以下操作:

myForm.controls(myControl).value = "whatever"
如果要更改绑定控件及其基础字段,请在字段侧工作

myForm.recordset.fields(myField).value = "whatever" 
myForm.recordset.update
然后,您可能需要刷新屏幕上的控件,以便它显示更新后的值

和在控制侧

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

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

在表单上更改(绑定)控件的值和更新基础字段的值之间,在概念上略有不同。在触发“update”事件之前,可能不会更新基础字段的值

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

编辑:

如果要以编程方式更改未绑定的控件值,请执行以下操作:

myForm.controls(myControl).value = "whatever"
如果要更改绑定控件及其基础字段,请在字段侧工作

myForm.recordset.fields(myField).value = "whatever" 
myForm.recordset.update
然后,您可能需要刷新屏幕上的控件,以便它显示更新后的值

和在控制侧

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

然后,当您更改表单上文本框/组合框/etc的值时,可能需要在基础控件上以编程方式触发更新(recordset.update)事件。表中的记录不会立即更新。Access处理它的默认方式是等待记录不再具有焦点,然后使用您所做的任何更改更新表中的记录

如果需要,可以使用以下命令通过After update事件强制更新表中的记录:

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

但是,我只会在编辑现有记录时执行此操作。如果要输入新记录,则不希望在每个控件更新后触发
Me.Dirty=False
。如果您在新记录输入时触发
Me.Dirty=False
,并且您有尚未填写的必填字段,您将收到一个错误,指出必填字段不能包含空值。

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

如果需要,可以使用以下命令通过After update事件强制更新表中的记录:

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

但是,我只会在编辑现有记录时执行此操作。如果要输入新记录,则不希望在每个控件更新后触发
Me.Dirty=False
。如果您在新记录条目上触发
Me.Dirty=False
,并且您有尚未填写的必填字段,您将收到一个错误,指出必填字段不能包含空值。

那么,当lostfocus事件触发时,我如何更新任何未绑定控件。据我所知,这取决于你是如何失去焦点的:如果是通过ESC键,更新可能不会被触发。如果通过回车或制表符,则会被激发。将一些debug.print消息添加到事件和更新过程之前/之后,并检查如何管理不同的事件。我想你也可以在事件层次结构上找到一些帮助。那么,当lostfocus事件触发时,我如何更新任何未绑定控件。据我所知,这取决于你是如何失去焦点的:如果是通过ESC键,更新可能不会触发。如果通过回车或制表符,则会被激发。将一些debug.print消息添加到事件和更新过程之前/之后,并检查如何管理不同的事件。我想你也可以在事件层次结构上找到一些帮助。我无法理解你的最后一句话。如果我正在输入新记录,那么我应该怎么做。此外,在\u更新事件之后,绑定控件和未绑定控件都应该工作?未绑定控件将没有任何要更新的数据库字段。因此,
Me.Dirty=False
对未绑定控件没有任何作用。但是,你不需要它。未绑定控件通过另一个控件的操作或用户交互进行控制。我无法理解您的最后一句话。如果我正在输入新记录,那么我应该怎么做。此外,在\u更新事件之后,绑定控件和未绑定控件都应该工作?未绑定控件将没有任何要更新的数据库字段。因此,
Me.Dirty=False
对未绑定控件没有任何作用。但是,你不需要它。未绑定控件通过对另一个控件的操作或用户交互进行控制。