Microsoft KB Archive/119112

= PRB: GPF in MSAJT200.DLL Viewing SQL Prop. of Pass-Thru Query =

Article ID: 119112

Article Last Modified on 11/7/2003

-

APPLIES TO


 * Microsoft Visual Basic 3.0 Professional Edition

-



This article was previously published under Q119112



SUMMARY
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.



STATUS
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.



MORE INFORMATION
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 new features.

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= and PWD = 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= ;PWD= ;database=playpen"   Type your pass-through query. For example: SELECT TempTbl.* FROM TempTbl </li> 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.</li> 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.)</li> Save the query as "PassThrough" and exit Microsoft Access.</li></ol>

Now, return to Visual Basic and perform the following operations to show the problem:

<ol> Start an new project in Visual Basic; form1 is created by default.</li>  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 </li> Save the project and run it. After you choose OK on the first message box, you get the GPF.</li></ol>

Additional query words: 3.00 ssvc

Keywords: kbprb KB119112

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.