DOCUMENT:Q314746 02-JAN-2002 [vbwin] TITLE :BUG: Access Violation Occurs in ADO When You Run Executable File PRODUCT :Microsoft Visual Basic for Windows PROD/VER::2.1,2.5,2.6,2.7,6.0 OPER/SYS: KEYWORDS:kbGrpDSVBDB kbGrpDSMDAC kbDSupport ====================================================================== ------------------------------------------------------------------------------- The information in this article applies to: - Microsoft Visual Basic Enterprise Edition for Windows, version 6.0 - Microsoft Visual Basic Professional Edition for Windows, version 6.0 - ActiveX Data Objects (ADO), versions 2.1, 2.5, 2.6, 2.7 ------------------------------------------------------------------------------- SYMPTOMS ======== You receive an access violation in ADO under the following circumstances: 1. Call the Debug.Print method on certain properties of the ADO Recordset object. 2. Compile the project. 3. Run the file as an executable (.exe) file. CAUSE ===== This problem occurs because the compiler does not remove the Debug.Print statement correctly. RESOLUTION ========== To resolve this problem, use one of the following methods: - Remove the Debug.Print statement from the code. - Store the property value in a variable. STATUS ====== Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. MORE INFORMATION ================ Steps to Reproduce Behavior --------------------------- 1. Create a new Standard EXE project in Visual Basic. 2. Add two CommandButton controls to the form. Specify the caption "Open Recordset" for Command1. Specify the caption "Close Application" for Command2. 3. On the Project menu, click Reference, and then select the "Microsoft ActiveX Data Object 2.x" check box. 4. Add the following code to the form: Option Explicit Dim cn As ADODB.Connection Private Sub Command1_Click() Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset rs.Open "Select * from Customers", cn, adOpenDynamic, adLockBatchOptimistic Debug.Print "Update: " & rs.EOF rs.Close Set rs = Nothing End Sub Private Sub Command2_Click() Unload Me End Sub Private Sub Form_Load() Set cn = New ADODB.Connection cn.Open "User ID=sa;password=sa;Initial Catalog=pubs;Data Source=mySQLServer" End Sub 5. Modify the connection string as appropriate for your environment. 6. Compile and run the executable file. 7. Click Open Recordset. 8. Click Close Application. Notice that an access violation occurs. 9. To resolve this problem, use one of the following methods: - Comment out the Debug.Print line of code, and then repeat steps 5 through 7. - Replace the code Debug.Print "Update: " & rs.EOF with the following code: Dim b as boolean b = rs.eof Debug.Print "Update: " & b Additional query words: ====================================================================== Keywords : kbGrpDSVBDB kbGrpDSMDAC kbDSupport Technology : kbVBSearch kbAudDeveloper kbADOsearch kbADO210 kbADO210sp1 kbADO210sp2 kbADO250 kbADO260 kbZNotKeyword6 kbZNotKeyword2 kbVB600Search kbVB600 kbVB600SP3 kbVB600SP4 kbVB600SP5 kbADO260SP1 kbADO270 Version : :2.1,2.5,2.6,2.7,6.0 Issue type : kbbug Solution Type : kbnofix ============================================================================= THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY. Copyright Microsoft Corporation 2002.