在我正在处理的这个Access表单上,我有一个全局变量,它在Form_Load事件中从另一个表单获取其值。由于某些原因我不知道变量“失去它的值”(变成=“”)经过一段时间后或某些事件发生。我无法注意到触发此行为的任何特定内容。在表单上“不活动”一段时间后全局变量是否重置?
以下是我如何设置我正在讨论的全局变量:
Private Sub Form_Load()
'...
Set prev_form = Form_Identification.Form
PasswordSybase = prev_form.Password.Value & vbNullString
UserSybase = prev_form.UserID.Value & vbNullString
'...
End Sub
答案 0 :(得分:8)
另一种解决方案(仅限2007及之后)我开始使用的是TempVars
而不是全局数,而奇怪的情况是我“需要”全局的东西。它是一个集合,它会在应用程序持续时间内持续存在,除非您明确发布它。因此,在某些情况下,我认为它比全局变量更有用,在某些情况下更糟糕。
TempVars.Add myVarName, myVarValue ' To initialize
TempVars.Item(myVarName) = newVarValue ' To reference and assign a new value
TempVars.Remove(myVarName) ' To release
快速搜索应该会显示更多批次参考,但我已经包含了基本链接的链接
答案 1 :(得分:6)
我希望访客看到这篇文章,因为它提供了一个重要的附加部分。
即使你全局声明一个变量,如果你在表单模块中设置了该变量的值,它就会显示 - 当你卸载表单时该值会丢失。
解决方案(在我的情况下)就像更换一样简单:
卸载我
...与...
Me.Hide
我在该代码模块中设置的变量(和对象)然后在应用程序实例的整个生命周期中保留它们的值。
答案 2 :(得分:2)
这可能会有所帮助: https://accessexperts.com/blog/2011/01/12/multi-session-global-variables/ Juan Soto解释了如何使用本地表来保存变量以及如何在需要时调用它们。它可能在2000年服务于你的目的,因为TempVars不是一个选择。您可以随时删除数据库“关闭”的变量,以便不保留UID和PWD。 p>
答案 3 :(得分:1)
您可以通过
创建“假”全局变量缺点是未绑定的文本框可能无法为您提供所需的特定数据类型
这两种方式是
在您的代码中,在引用全局变量时显式地将文本框转换为数据类型 例如Clng(Form_frmGlobal.tVar1)
另一个选项是创建一个单行表并将隐藏表单上的文本框绑定到表中,以便强制执行数据类型
此方法的一个好处是可以用于会话之间的持久存储 警告:确保此表仅在单个用户的本地,在前端数据库文件中(由于多用户相互覆盖,因此不希望将其放在后端数据库中)。这假设您正在使用前端+后端分离的数据库,并将前端分配给每个用户的工作站。
答案 4 :(得分:0)
我在那个声明中没有看到任何告诉我它是全局变量的声明。您可以通过声明:
将全局变量设置在模块中的所有子/函数和选项比较语句下方PUBLIC X as string
任何其他变量只有在子或函数完成之后才有效。
此外,全局变量必须在PROPER MODULE上声明。您无法在表单模块中声明它们。