This article was previously published under Q119112
This article has been archived. It is offered "as is" and will no longer be updated.
If you attempt to access the SQL property of a querydef object of anMicrosoft Access version 2.0 pass-through query, you get a generalprotection fault (GPF) in module MSAJT200.DLL at 0080:239D. The other SQL-specific query types, Union and Data Definition, operate correctly.
This behavior is by design. It is a limitation in the Professional Editionof Microsoft Visual Basic for Windows, version 3.0 and the MicrosoftAccess 2.0/Visual Basic 3.0 Compatibility Layer. We are researching thisproblem and will post new information here in the Microsoft Knowledge Baseas it becomes available.
The Compatibility Layer was intended to make Visual Basic work withMicrosoft Access version 2.0 format databases. It was not designed toexpose all the new functionality in the database engine for MicrosoftAccess version 2.0. Therefore, the Compatibility Layer may permit access tocertain new functionality (such as new SQL syntax and query types) withsome limitations. It may also produce unforeseen errors when you use thesenew features.
The following code demonstrates the problem. First, create a pass-throughquery in Microsoft Access version 2.0:
In the Database window, choose the Query button and then the New button.
In the New Query window, select New Query. Microsoft Access displays an empty Query window in Design view and the Add Table dialog box.
Without adding tables or queries, choose the Close button in the Add Table dialog box.
From the Query menu, choose SQL Specific, and then choose Pass-Through. Microsoft Access displays the SQL Pass-Through Query window.
Choose Properties from the View menu. In the query property sheet, type the ODBC Connect Str property to specify information on the database to which you want to connect.
Note You must change Username= <username> and PWD =<strong password> to the correct values before you run this code. Make sure that Username has the appropriate permissions to perform this operation on the database.
In the query property sheet, set the ReturnsRecords property to Yes if the query will return records, or No if the query will not return records (for our test case, set it to Yes). To close the Properties dialog, double- click its system menu.
To run the query, choose the Run button on the toolbar, or choose Run from the Query menu. (For a pass-through query that returns records, you can choose the Datasheet View button or choose Datasheet from the View menu.)
Save the query as "PassThrough" and exit Microsoft Access.
Now, return to Visual Basic and perform the following operations to showthe problem:
Start an new project in Visual Basic; form1 is created by default.
Place a command button (Command1) on the form, and add the following code to the Click() event:
Sub Command1_Click () Dim db As database Dim qd As querydef 'open the database and querydef objects Set db = OpenDatabase("c:\access2\db1.mdb") Set qd = db.OpenQueryDef("PassThrough") MsgBox "A GP Fault will occur on the next line" 'This line is where the GP Fault will occur Print qd.SQL MsgBox "If you see this, you chose Ignore or the GP Fault did not occur" 'clean up qd.Close db.Close End Sub
Save the project and run it. After you choose OK on the first message box, you get the GPF.