首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在动态加载引用后保存全局变量值?

如何在动态加载引用后保存全局变量值?
EN

Stack Overflow用户
提问于 2011-08-17 21:12:29
回答 2查看 2.3K关注 0票数 1

我有一个Access 2003数据库,它将动态加载MDB数据库作为库引用。这是因为该数据库是60+应用程序数据库的菜单前端。菜单前端将在用户进行选择时动态引用所需的内容,而不是永久引用所有这些数据库。我正在将这个数据库移动到Access 2010并创建自定义功能区。当ribbon加载时,我开始使用here的技术在全局变量中捕获ribbon对象。然后我遇到了一个问题,我可以验证代码正在运行,并且全局变量被正确地分配了ribbon引用,但在数据库运行完它的启动例程后,全局变量将被重置为零。

为了验证发生了什么,我创建了一个用于测试的简单数据库。在这个数据库中,我有一个带有全局变量的模块:

代码语言:javascript
运行
复制
Public obj as Object

然后我有一个函数,如下所示:

代码语言:javascript
运行
复制
Public Function SetObj()

Set obj = Application

Debug.Print "IsNothing=" & (obj Is Nothing)

References.AddFromFile "Test.mdb"

Debug.Print "IsNothing=" & (obj Is Nothing)

End Function

显然,在我的代码中,"Test.mdb“指的是一个实际的文件。如果我运行这段代码,对于两个实例,Debug.Print都会给出"IsNothing=False“,但是在函数完成之后,如果我等待几秒钟,Debug.Print就会给出"IsNothing=True”。如果我注释掉References.AddFromFile,无论我等多久,Debug.Print都会给我"IsNothing=False“。

这对我来说是有意义的,因为Access必须在加载库之后重新编译VBA代码,所有全局变量都会被重置。我已经尝试过将全局变量移动到类中,但是因为我需要一个类的全局变量,所以类变量随后会被重置。我尝试在函数中使用局部变量来保存全局变量的值,但看起来Access在代码运行完成后需要等待几秒钟才能进行重新编译,因此这也不起作用。有没有人有其他的想法来实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-18 04:38:42

我真的不知道这是否能解决这类引用的问题,但一般来说,我不会使用公共变量来处理这类事情,而是在函数中使用静态变量。它应该是这样的:

代码语言:javascript
运行
复制
  Public Function SetObj() As Object
    Static obj As Object

    If (obj Is Nothing) Then
       Set obj = Application
    End If
    Set SetObj = obj
  End Function

然后,您只需使用SetObj作为对象来使用您的应用程序。在生产应用程序中,您也需要拆卸代码,但我在这里省略了这一点。

我怀疑这是否有帮助,但你的代码给我的印象是相当低效和不完整。

票数 1
EN

Stack Overflow用户

发布于 2011-08-18 19:50:58

我找到了我的问题的解决方案,感谢@David-W-Fenton,因为你的回答给了我这个想法。我在库数据库中使用您的方法来缓存频繁访问的值,这些值存储在表中,但在初始启动后不会更改。这些值并不是每次引用更改时都会丢失,这时灯泡就亮了。

解决方案是将全局变量放入库数据库中。Access看起来只是在将引用加载到的数据库中重置全局变量--仔细想想,这是有意义的。因此,由于库数据库不是正在重新编译的数据库,所以它不会重置全局(或私有或静态)变量。

我最终做的是在现有的库数据库中创建一个新模块。它有一个私有变量和两个方法-一个用于设置变量,另一个用于检索变量值。在我的菜单前端数据库中,当ribbon加载并调用我的回调函数时,我不是将ribbon对象保存在前端数据库中,而是将其传递给此模块进行保存。现在,无论何时将新数据库动态添加到库引用中,我都不再丢失功能区引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7093458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档