Microsoft KB Archive/154510

= How To Get More Information on the ODBC Call Failed Error =

Article ID: 154510

Article Last Modified on 3/14/2005

-

APPLIES TO


 * Microsoft Visual Basic 4.0 Standard Edition
 * Microsoft Visual Basic 4.0 Professional Edition
 * Microsoft Visual Basic 4.0 Professional Edition
 * Microsoft Visual Basic 4.0 16-bit Enterprise Edition
 * Microsoft Visual Basic 4.0 32-Bit Enterprise Edition

-



This article was previously published under Q154510



SUMMARY
This article describes how to get more information on the ODBC Call Failed error. When errors occur using ODBC databases, Visual Basic will provide an "ODBC Call Failed" error message. This generic error message provides no specific detail so you must cycle through the Errors collection to get additional information. This can be done with both the Visual Basic 16-bit and 32-bit editions. Below is a code sample that shows the difference in behavior.



MORE INFORMATION
The DBEngine has an Errors collection that can be manipulated by the FOR- EACH construct. The JET Engine can store multiple errors in the DBEngine Errors collection. In Visual Basic 3.0, it was possible to parse the string using the routine shown on Page 175 of the Visual Basic 4.0 Professional Features Book under the "Guide to Data Access Objects" section. The # symbol was used to separate the "ODBC Call Failed" message from the detailed ODBC description in Visual Basic 3.0 but this is not necessary under Visual Basic 4.0.

For the example below, a two-field table called MyTable has been set up on an ODBC Source and a primary key set on the ID Field. Two records have been added as below:

  Field      ID      Description ===============================  Record 1    1      Hello Record 2   2      World

The code below will generate an error by trying to add a record with a duplicate primary key value to test the code:

 Start a new project in Visual Basic. Form1 is created by default. Add a Command button to Form1.  Add the following code to the General Declarations section of Form1: Option Explicit

Private Sub Command1_Click Dim db As Database Dim rs As Recordset On Error GoTo trap: Set db = OpenDatabase("") Set rs = db.OpenRecordset("Select * from MyTable") rs.AddNew rs.Fields(0).Value = 2 rs.Update Exit Sub trap: MsgBox Errors.Count MsgBox Err.Number & " " & Err.Description End Sub

 Press the F5 key to run the project. Click on the Command button and you should receive Error message 3146 stating "ODBC Call Failed." Although the Error count is greater than one, only one message will be displayed.  Remove the code from within the error trap and replace it with the following code: Dim MyError As Error MsgBox Errors.Count For Each MyError In DBEngine.Errors With MyError MsgBox .Number & " " & .Description End With Next MyError

 Press the F5 key to run the project. You should see a detailed message and then the 3146 Error for "ODBC Call Failed."</li></ol>

<div class="references_section">