Dim FSO As FileSystemObject
Dim sDestFile As String
Dim sExt As String
Dim sFileName As String
Dim sPrompt As String
Dim sSourcePath As String
Dim sTitle As String
Function CompactRepair(ByVal sSourceFile As String)
On Error GoTo Error_Handler
If sSourceFile <> Application.CurrentDb.Name Then
'Compact the back end
Set FSO = New FileSystemObject
sFileName = FSO.GetBaseName(sSourceFile)
sExt = "." & FSO.GetExtensionName(sSourceFile)
sSourcePath = FSO.GetParentFolderName(sSourceFile) & "\"
'Delete the previous Temp file if it exists.
If Dir(sSourcePath & sFileName & "_Temp" & sExt) <> "" Then
Kill sSourcePath & sFileName & "_Temp" & sExt
End If
'Compact the Back-End database to a temp file.
DBEngine.CompactDatabase sSourceFile, sSourcePath & sFileName & "_Temp" & sExt
'Delete the previous backup file if it exists.
If Dir(sSourcePath & sFileName & ".bak") <> "" Then
Kill sSourcePath & sFileName & ".bak"
End If
'Rename the current database as backup and rename the temp file to
'the original file name.
Name sSourceFile As sSourcePath & sFileName & ".bak"
Name sSourcePath & sFileName & "_Temp" & sExt As sSourceFile
Kill sSourcePath & sFileName & ".bak"
Set FSO = Nothing
' MsgBox "Compact and repair successful for " & sFileName & ".", vbOKOnly + vbInformation, "IntelAce for ACE Windows"
Else
'Compact the front end
Application.SetOption "Auto Compact", True
'Sets the file name of the batch file to create
Dim BatchFile As String
BatchFile = CurrentProject.Path & "\Compact.cmd"
' creates the Batch file
' Change the ping value to allow for speed.
' 60000 = 60 secs, 30000 = 30secs etc
' I recommend 60 seconds to prevent any overlapping should the compact take time.
' Large databases may require more time and smaller databases may require less
' time. Just be sure you are not trying to open the database while it is still
' compacting.
Open BatchFile For Output As #1
Print #1, "Echo Off"
Print #1, "ECHO Compacting Front End"
Print #1, ""
Print #1, "ping 1.1.1.1 -n 1 -w 60000"
Print #1, ""
Print #1, "CLICK ANY KEY TO RESTART THE ACCESS PROGRAM"
Print #1, "START /I " & """MSAccess.exe"" " & sSourceFile
Print #1, ""
Print #1, "Del %0"
Close #1
' runs the batch file
Shell BatchFile
'closes the current front end and runs the batch file
DoCmd.Quit
End If