ID: Q181888
The information in this article applies to:
While debugging your code that uses Automation to control Microsoft Access, you may receive one of the following errors.
When automating Microsoft Access 95:
MSACCESS caused an Invalid Page Fault in
module MSACCESS.EXE at 0137:5000f878
-or-
MSACCESS caused an Invalid Page Fault in
module KERNEL32.DLL at 0137:bff78040
When automating Microsoft Access 97:
VB5 caused an invalid page fault in
module OLEAUT32.DLL at 0137:65345949.
This problem only occurs when you run your code in Break mode (Debug mode).
The cause of the problem depends on the version of Microsoft Access that you are automating.
When automating Microsoft Access 95, this problem may occur when all of the following conditions apply:
When automating Microsoft Access 97, this problem may occur when all of the following conditions apply:
Microsoft has confirmed this to be a problem in the Microsoft products listed at the beginning of this article.
The following examples show how to reproduce this problem under each version of Microsoft Access. A workaround is provided for each example.
Sub TestAccess95()
Dim objAccess As Object
Dim objForm As Object
Set objAccess = CreateObject("Access.Application")
objAccess.Visible = True
objAccess.OpenCurrentDatabase _
objAccess.SysCmd(acSysCmdAccessDir) & "Samples\Northwind.mdb"
objAccess.DoCmd.OpenForm "Employees"
Set objForm = objAccess.Forms("Employees")
objAccess.DoCmd.Close acForm, "Employees"
Stop 'Enters Break Mode, pausing code execution
End Sub
You should establish a reference to the "Microsoft Access for Windows 95"
library in your project before running the code. When you run this
procedure and get to the Stop statement, which enters Break mode, switch
over to Microsoft Access and close the startup form if it is open. Then
switch back to your code and press F8 to continue past the Stop statement
and again past the End Sub.
Result: Microsoft Access will close automatically because the object variables lose scope and no forms and reports are open in the database. This is by design. However, you then receive an Invalid Page Fault error.
Workaround:
Set all procedure-level form and report object variables to Nothing before ending the procedure. For this example, add the following lines at the end of the procedure:
Set objForm = Nothing
Set objAccess = Nothing
Sub TestAccess97()
Dim objAccess As Access.Application
Dim objForm As Access.Form
Set objAccess = CreateObject("Access.Application")
objAccess.Visible = True
objAccess.OpenCurrentDatabase _
objAccess.SysCmd(acSysCmdAccessDir) & "Samples\Northwind.mdb"
objAccess.DoCmd.OpenForm "Employees"
Set objForm = objAccess.Forms("Employees")
Stop 'Enters Break Mode, pausing code execution
MsgBox objForm.Name
End Sub
Be sure to establish a reference to the "Microsoft Access 8.0 Object
Library" in your project before running the code. When you run this
procedure and get to the Stop statement, which enters Break mode, press F8
to continue to the MsgBox line.
Result: An Invalid Page Fault error occurs, causing the client application to terminate.
Workaround:
Dim all procedure-level form and report object variables as Object. For this example, Dim objForm as Object instead of Access.Form. Another workaround is to Dim the variable as Access.Form at the module level.
For additional information, please see the following articles in the Microsoft Knowledge Base:
ARTICLE-ID: Q147816
TITLE : ACC: Using Microsoft Access as an Automation Server
ARTICLE-ID: Q167223
TITLE : Microsoft Office 97 Automation Help File Available on MSL
Additional query words: access violation gpf crash
Keywords : kberrmsg kbAccess97 kbAutomation KbVBA
Version : WINDOWS:5.0,7.0,97
Platform : WINDOWS
Issue type : kbprb
Last Reviewed: May 18, 1999