If you attempt to access the SQL property of a querydef object of an
Microsoft Access version 2.0 pass-through query, you get a general
protection 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 Edition
of Microsoft Visual Basic for Windows, version 3.0 and the Microsoft
Access 2.0/Visual Basic 3.0 Compatibility Layer. We are researching this
problem and will post new information here in the Microsoft Knowledge Base
as it becomes available.
The Compatibility Layer was intended to make Visual Basic work with
Microsoft Access version 2.0 format databases. It was not designed to
expose all the new functionality in the database engine for Microsoft
Access version 2.0. Therefore, the Compatibility Layer may permit access to
certain new functionality (such as new SQL syntax and query types) with
some limitations. It may also produce unforeseen errors when you use these
The following code demonstrates the problem. First, create a pass-through
query 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.
ODBCConnectStr = "odbc;dsn=texas;Username=<username>;PWD=<strong password>;database=playpen"
- Type your pass-through query. For example:
SELECT TempTbl.* FROM TempTbl
- 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
- Save the query as "PassThrough" and exit Microsoft Access.
Now, return to Visual Basic and perform the following operations to show
- 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
MsgBox "If you see this, you chose Ignore or the GP Fault did not
- Save the project and run it. After you choose OK on the first message
box, you get the GPF.
Article ID: 119112 - Last Review: September 13, 2013 - Revision: 2.0
- Microsoft Visual Basic 3.0 Professional Edition
|kbnosurvey kbarchive kbprb KB119112|