首页 文章

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

提问于
浏览
1

我有一个数据库,其中包含有关我们部门访客的信息 . 这是我的设置:用户从列表框中选择访问者名称 . 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期间触发的子区域中放置了一个断点:

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

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

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

(我编辑了这个以使代码正确显示...之前没有留下任何一行 . )

2 回答

  • 0

    我发现当用户试图将它们留空时,未绑定的文本框将恢复为默认值 . 为了阻止他们这样做,我把它放在文本框的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
    

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

  • 1

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

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

相关问题