ACCESS BACKUP ROUTINE

By | 2002-06-01

A short routine that backups the tables from an open Access database
George Kinney

Original Author: Newsgroup Posting

Assumptions

Right now it is basic, it assumes that the tables to backup are in the local database (easily changed, just haven’t had a chance to do it.), and just exports EVERYTHING that isn’t filtered out. A number of improvements can (and will eventually) be built in so that it can address attached tables, multiple backups, backup logging, etc. These are all things I need to add anyways for a current project, and when they are done, I’ll b eposting them to. Apologies are in order to a few of the people I sent code. The function relied on a couple of outside functions, not included in the post, and also contained a lot extraneous junk (you who work with large projects full time know how this stuff accumulates, those who don’t, well you’ll find out.). To these people, I’m sorry for that, and hope you don’t take me to be a complete idiot. (3am is a bad time to reply to mail!) I don’t claim to be a programming guru, but I think this example could benefit some people. I recieved a lot of help from others early on, so I intend to give what I can as I can so others can hopefully benefit from me. ‘Just call BackupDatabase() with the name of the backup file ‘you want to create, and sit back.

API Declarations

Const modulename = “MBackup”

Code

Function BackupDataBase (filename$) As Integer
'**********************************************************************************
'* PROCEDURE: BackupDataBase
'* ARGS:   filename$ -- name of new DataBase, defaults to current Dir
'* RETURNS:  TRUE/FALSE
'* CREATED:  7/95
'* REVISED:  8/2/95 GDK Changed to use the App's dir.
'* Comments  Creates newDataBase, and exports ALL existing tables in the
'*       Current database to it.
'* ToDo:   Backup current backup before writing over it. (part of backup
'*       archive system)
'*       Add new backup logging stuff to this function.(Date, location, etc.)
'**********************************************************************************
On Error GoTo BackupDataBase_Err
  Dim newDB As Database, oldDB As Database, oldTable As TableDef
  Dim tempname As String, path As String, intIndex As Integer, numTables As Integer
  Dim intIndex2 As Integer, errorFlag As Integer
  'backup defaults to current directory,...
  path = GetApplicationDir() & filename$
  'replace above line with this one to pass a full path to this function
  'path = filename$
  
  'If database already exists, delete it.
  If MB_FileExists(path) Then
    Kill path
  End If
  
  'create new file
  Set newDB = DBEngine.workspaces(0).CreateDatabase(path, DB_LANG_GENERAL)
  newDB.Close
  
  Set oldDB = DBEngine(0)(0)
  
  'Get number of tables and their names
  numTables = oldDB.tabledefs.count - 1
  
  'Actually export all the tables in the list.
  For intIndex = 0 To numTables
    tempname = oldDB.tabledefs(intIndex).name
    If ValidTableFilter(tempname) Then
      DoCmd TransferDatabase A_EXPORT, "Microsoft Access", path, A_TABLE, tempname, tempname
    End If
  Next intIndex
  
  BackupDataBase = True
BackupDataBase_Exit:
  If errorFlag Then
    BackupDataBase = False
    
    'if we errored out, then destroy the backup, (less risk of using incorrect file).
    If MB_FileExists(path) Then
      Kill path
    End If
  Else
    BackupDataBase = True
  End If
  Exit Function
BackupDataBase_Err:
  MsgBox "Backup Failed! Error: " & Error$, 16, "FUNCTION: BackupDataBase( " & filename$ & " )"
  errorFlag = True
  Resume BackupDataBase_Exit
End Function
Function GetApplicationDir () As String
'***************************************************************************
'* PROCEDURE: GetApplicationDir
'* ARGS:   NONE
'* RETURNS:  App's dir
'* CREATED:  8/2/95 GDK
'* REVISED:
'* Comments  Retrieves App's directory, (actually the current MDB's dir.)
'***************************************************************************
  Dim d As Database, path As String, i%
  Set d = DBEngine(0)(0)
    path = d.name
  d.Close
  For i% = Len(path) To 0 Step -1
    If Mid$(path, i%, 1) = "" Then
      path = Left$(path, i%)
      Exit For
    End If
  Next i%
  GetApplicationDir = path
End Function
'*************************************************************
'* FUNCTION: MB_FileExists
'* ARGUMENTS: strFilename  -- name of file to look for
'* RETURNS:  TRUE/FALSE   -- TRUE = File Exists
'* CREATED:  8/95 GDK Initial Code
'* CHANGED:  N/A
'*************************************************************
Function MB_FileExists (strFileName As String) As Integer
'
'Check to see if file strFileName exists
'
  If Len(Dir$(strFileName)) Then
    MB_FileExists = True
  End If
  
End Function
'***************************************************************
'* FUNCTION: ValidTableFilter
'* ARGUMENTS: tablename$ -- table to OK for export
'* RETURNS:  TRUE/FALSE -- TRUE = OK to export
'* PURPOSE:  Screen out invalid tables by testing them here.
'* CREATED:  2/97 GDK Initial code
'* CHANGES:  N/A
'***************************************************************
Function ValidTableFilter (tablename$) As Integer
On Error GoTo ValidTableFilter_Error:
  If Left$(tablename$, 4) = "MSys" Then
    Exit Function
  End If
  If tablename$ = "" Then
    Exit Function
  End If

  'Add test functions above this line.
  ValidTableFilter = True
ValidTableFilter_Exit:
  Exit Function
ValidTableFilter_Error:
  MsgBox Error, 16, "FUNCTION: ValidTableFilter( " & tablename$ & ")"
  Resume ValidTableFilter_Exit
End Function

Author: dwirch

Derek Wirch is a seasoned IT professional with an impressive career dating back to 1986. He brings a wealth of knowledge and hands-on experience that is invaluable to those embarking on their journey in the tech industry.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.