如何使用 Access VBA 将具有默认值的未绑定文本框的值设置为空字符串

Posted

技术标签:

【中文标题】如何使用 Access VBA 将具有默认值的未绑定文本框的值设置为空字符串【英文标题】:How to set the value of an unbound textbox with a default value to an empty string with Access VBA 【发布时间】:2011-12-01 21:26:41 【问题描述】:

我有一个数据库,其中包含有关我们部门访客的信息。这是我的设置:用户从列表框中选择访问者姓名。 Access 将该访问者记录中的值分配给临时变量,并打开一个未绑定的表单,其中这些变量是文本字段中的默认值。当用户更改文本框中的值时,After_Update 事件使用 SQL 更新该访问者记录中的相应字段并将新值分配给临时变量。

After_Update 示例:

Dim strRUN As String
strRUN = updateVisitorOnDirty(Me.txtVisitorTravelMethod, "VisitorTravelMethod", 1)
HideWarnings (strRUN)
TempVars!strVisitorTravelMethod = Nz(Me.txtVisitorTravelMethod.Value, "")

“updateVisitorOnDirty”是一个函数,它返回 SQL 以使用带有第一个参数的访问者信息更新表中的字段(在第二个参数中指定)。 (最后的数字表示它是一个字符串。)“HideWarnings”关闭警告,执行 SQL,然后重新打开警告。

我的问题: 当用户清除文本框时,After_Update 事件使文本框恢复为之前的值。

起初我以为未绑定的文本框在被清除时可能会恢复为默认值,但我在 After_Update 期间触发的 sub 中放置了一个断点:

如果我将 mytextbox 中的值从 a 更改为 b,debug.print 会将 mytextbox 的值显示为 b。如果我将 mytextbox 中的值从 a 更改为(空白或空字符串),debug.print 会显示 mytextbox 的值仍等于 a。

我的解决方法是在文本框附近包含一个小“x”,用户可以单击以 1)清除文本框,2)更新临时变量,以及 3)更新表格。它工作正常,但似乎应该有更好的方法。帮忙?

如果您需要任何其他信息,或者我是否应该重新措辞,请告诉我。我一直来这里寻求答案,但这是我第一次真正提交自己的问题。谢谢!

(我对此进行了编辑以使代码正确显示...之前没有留下一行。)

【问题讨论】:

【参考方案1】:

我发现当用户尝试将未绑定的文本框设为空白时,它们会恢复为默认值。为了阻止他们这样做,我把它放在文本框的 AfterUpdate 中:

Call ResetDefault(Me.textbox1.Text, Me.textbox1)

并定义函数:

Public Sub ResetDefault(ByVal strChange As String, ByRef txtCurrent As TextBox)
If Nz(strChange, "") = "" Then txtCurrent.DefaultValue = ""
End Sub

也就是说,如果用户清除了一个文本框,则该文本框的默认值设置为“”,从而允许文本框实际变为空白。

【讨论】:

【参考方案2】:

我认为最好的方法是取消文本框上的 after_update 事件,而是在未绑定的表单上放置一个保存按钮,以便一次性写入所有更新,或者捕获表单关闭事件并然后更新您的表格.

这是使用未绑定表单的优势,在您完全准备好之前不必提交数据,但使用 after_update 事件您几乎可以模仿绑定表单的行为。

【讨论】:

感谢您的回复。我怀疑我把它弄得比我需要的更复杂——我在为要基于的绑定表单进行可编辑查询时遇到了麻烦(表格在 SharePoint 上,但我不确定这是否与它有关),所以我没有绑定。我最终使用 after_update 而不是保存按钮,因为我希望用户能够一键在表单之间切换。我对使用诸如关闭或失去焦点之类的事件有一种非理性的恐惧,但这确实是一个更好的方法。谢谢!

以上是关于如何使用 Access VBA 将具有默认值的未绑定文本框的值设置为空字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何使用SQL更新VBA Access中包含NULL值的列?

如何更改 VBA 代码/宏结果中使用的默认颜色(红色、绿色)

如何让Access 空文本框参与计算时默认是0,如图碳粉为空,计算时自动变0,别用VB代码,VB我会,请用VBA

VBA-如何选择具有值的列单元格

MS SQL 2008/Access 2002 VBA - 检查数据库的当前记录,如果不存在则输入

VBA Worksheet_Change如何隐藏其中具有特定值的行