MS-Access Cross-Form Support
I'm a .NET / C# software engineer who's been recruited into a temporary job function I'm not thrilled with.
My company uses an MS-Access application for many of it's current functions. The Visual Basic version in use for this is (v6.5). The developer that assembled it (who's on vacation overseas at the moment) has a 'login' form that pops up before going to the 'switchboard' pages. In order to maintain a 'global awareness' of logged in he leaves the form filled out and open -- hiding it from the user, then as he moves into other forms he reaches back into the hidden login form to determine login details.
While this is functional, it makes my OOP-orientated brain hurt a little bit. Is this the right way to simulate a cache of glo开发者_如何学Cbal variables in this edition of MS-Access + VB, or merely one that our MS-Access developer settled for. I found some online references to VBA source implementing global variables using the Global keyword but this doesn't seem to be supported in v6.5 (at least not in that fashion).
Does anyone have any clues on this or some outstanding MS-Access resources they can recommend so I can put this headache behind me?
This method is perfectly functional as global variables can be reset to null given code interruptions and such. Especailly while you the developer are working in the code.
Also if it's working now why change it?
As bugtussle has said you can use "global" variables inside modules. Here's how:
Create a module called LoginCredentials
. Inside that module, you can declare variables as public
, which in effect makes them global variables. For example:
public LoggedInUserId As Integer
public IsUserLoggedIn As Boolean
You can set and access those variables from other forms. I prefer to always use the module name with the variable name in VBA so I know where the globals are declared, like so:
LoginCredentials.LoggedInUserId = 15
If LoginCredentials.IsUserLoggedIn Then
'Do Something '
End If
Granted, global variables only persist for the life of the application, so if it crashes or the user exists the application, you'll lose that data. If you need the login credentials to "live" longer, consider storing the data in a database table.
As a side note, it's not at all uncommon for your OOP-oriented brain to hurt a little when working with VB6 /VBA. The language simply fails to fully implement OOP design features, but it's still possible to write better code when you know what you're doing.
He settled. The correct way to store global variables is to use a module.
http://www.blueclaw-db.com/access_database_global_variable.htm
http://forums.whirlpool.net.au/forum-replies-archive.cfm/528616.html
http://www.google.com/search?q=global+variables+in+vba+access
精彩评论