Tip: Wrap API Calls So They'll Work in All Versions of Access

  Previous topic Next topic JavaScript is required for the print function  

The Access WorkbenchData Mining Tool In AccessThe Toolbox - Access KBThe Smart Access PDFs and DownloadsLoad Basecamp Backup XML to Access or SQLServerWe are good at Access and Excel Programming and UpgradesourProducts

Jeff Kryzer

 

When I wrote a database that needed to exist in versions 2.0, 95, and 97, I wrote it to the least common denominator (Access 2.0).

In order to reduce bugs and ease the conversion from Access 2.0 to 95 and 97, I write my functions a certain way when they make API calls. For each function, I create a wrapper function that first checks the version of Access, then calls a different function depending on which version is being used, like this:

 

Function GetFileName (ByVal hWnd As Long) As String

    Dim varVersion As Variant

    varVersion = SysCmd(SYSCMD_ACCESSVER)

    Select Case varVersion

       Case 2

           GetFileName = GetFileName16(CInt(hWnd))

       Case >= 7

            GetFileName = GetFileName32(hWnd)

   End Select

End Function

 

 

 

Now, in any form I can just call the GetFileName() function and I don't have to worry about which version of Access I'm using. The window handle is passed in as a Long and then converted to an Integer only if I know I'm in Access 2.0. If I have to make a change to any part of the database, I make it in the version 2.0 copy, then convert the database to 95 and 97. No code change is necessary! Also, Access 2.0 doesn't seem to care whether I have 32-bit declarations in the module (as long as they're never called) and Access 95/97 doesn't care if I have 16-bit declarations in the module, so all the versions are happy!