8

在我正在处理的这个 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
4

5 回答 5

9

我开始使用的替代解决方案(仅 2007 年及以后)TempVars在我“需要”全局的奇怪情况下代替全局变量。它是一个集合,除非您明确释放它,否则它会在应用程序期间持续存在。所以在某些情况下,我觉得它比全局变量更有用,在某些情况下更糟。

TempVars.Add myVarName, myVarValue ' To initialize
TempVars.Item(myVarName) = newVarValue ' To reference and assign a new value
TempVars.Remove(myVarName) ' To release

快速搜索应该会向您显示更多参考资料,但我已包含指向基本参考资料的链接

http://blogs.office.com/b/microsoft-access/archive/2010/09/27/power-tip-maximize-the-user-of-tempvars-in-access-2007-and-2010.aspx

于 2013-07-12T05:05:25.940 回答
6

我确实希望访问者看到这篇文章,因为它提供了一个重要的附加部分。

即使您全局声明一个变量,如果您在表单模块中设置该变量的值,那么当您卸载表单时,该值也会丢失。

解决方案(在我的情况下)就像替换一样简单:

卸载我

...和...

我隐藏

然后,我在该代码模块中设置的变量(和对象)在应用程序实例的整个生命周期中都保留了它们的值。

于 2016-05-18T17:26:14.030 回答
2

这可能会有所帮助: https ://accessexperts.com/blog/2011/01/12/multi-session-global-variables/ Juan Soto 解释了如何使用本地表来保存变量以及如何在需要时调用它们。它可能会在 2000 年达到您的目的,因为 TempVars 不是一个选项。您始终可以删除数据库“关闭时”的变量,以便不保留 UID 和 PWD。

于 2014-12-23T04:06:05.790 回答
1

您可以通过以下方式创建“假”全局变量

  • 创建一个表单(例如名为 frmGlobal)
  • 确保表单始终打开但隐藏
  • 为您想要的每个全局变量创建一个文本框(例如 tVar1)
  • 在您的代码中,引用例如 Form_frmGlobal.tVar1

缺点是未绑定的文本框可能无法为您提供所需的特定数据类型

解决这个问题的两种方法是

  • 在您的代码中,在引用全局变量时将文本框显式转换为数据类型,例如 Clng(Form_frmGlobal.tVar1)

  • 另一种选择是创建一个单行表格并将隐藏表单上的文本框绑定到表格,以便强制执行您的数据类型

这种方法的一个好处是您可以用于会话之间的持久存储警告:确保此表仅对单个用户本地,在前端数据库文件中(由于多-用户互相覆盖)。这假设您正在使用前端 + 后端分离的数据库,并将前端分配到每个用户的工作站。

于 2013-07-13T09:04:20.230 回答
0

我在该声明中看不到任何东西告诉我它是一个全局变量。您可以在模块中的 ALL Subs/Functions 上方和 Options Compare 语句下方设置全局变量,方法是:

PUBLIC X as string

任何其他变量只有在子或函数完成之前才是好的。

此外,必须在 PROPER MODULE 上声明全局变量。您不能在表单的模块上声明它们。

于 2013-07-11T19:40:06.737 回答