代码之家  ›  专栏  ›  技术社区  ›  Hardryv

MS Access跨表单支持

  •  1
  • Hardryv  · 技术社区  · 15 年前

    我是一个.NET/C软件工程师,被招募到一个我不喜欢的临时工作岗位。

    我的公司使用MS Access应用程序实现许多当前功能。用于此的Visual Basic版本是(V6.5)。组装它的开发人员(目前正在海外度假)有一个“登录”表单,在进入“总机”页面之前会弹出该表单。为了保持对登录的“全局意识”,他将填写好的表单留下并打开--对用户隐藏它,然后在他进入其他表单时,他返回隐藏的登录表单以确定登录详细信息。

    虽然这是功能性的,但它使我面向OOP的大脑有点受伤。这是在这个版本的MS Access+VB中模拟全局变量缓存的正确方法,还是仅仅是我们的MS Access开发人员解决的方法。我发现了一些使用global关键字实现全局变量的vba源的在线引用,但在V6.5中似乎不支持这种引用(至少不支持这种方式)。

    有没有人知道这方面的任何线索,或者他们可以推荐一些优秀的MS访问资源,这样我就可以把这个头疼的问题抛在脑后了?

    3 回复  |  直到 13 年前
        1
  •  0
  •   Community CDub    8 年前

    AS bugtussle has said 您可以在模块内使用“全局”变量。以下是如何:

    创建一个名为 LoginCredentials . 在该模块中,可以将变量声明为 public 使它们成为全局变量。例如:

    public LoggedInUserId As Integer
    public IsUserLoggedIn As Boolean
    

    您可以从其他窗体设置和访问这些变量。我更喜欢在VBA中始终使用模块名和变量名,这样我就知道全局变量的声明位置,如:

    LoginCredentials.LoggedInUserId = 15
    
    If LoginCredentials.IsUserLoggedIn Then
        'Do Something    '
    End If
    

    当然,全局变量只在应用程序的生命周期中存在,因此如果它崩溃或用户存在应用程序,您将丢失该数据。如果您需要登录凭证来延长“寿命”,请考虑将数据存储在数据库表中。

    作为旁注,在使用vb6/vba时,面向OOP的大脑受到轻微伤害并不罕见。该语言无法完全实现OOP设计特性,但当您知道自己在做什么时,仍然可以编写更好的代码。

        2
  •  2
  •   Tony Toews    15 年前

    这个方法是完美的功能,因为全局变量可以在给定的代码中断等情况下重置为空。尤其是当开发人员在代码中工作时。

    如果它现在有效,为什么要改变它?