Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Mike Lewis on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

ADODC connection not working on all workstations

Status
Not open for further replies.

oldjags

Technical User
Feb 4, 2002
7
0
0
US
I have a VB6 app that uses ADODC to pull data from an Access database. The app and database is located on a W2K server, and is run from various workstations. All workstations have the same ODBC connection defined on them, and the connection has been tested for it's ability to import/export data from Access using Excell. Problem is that some workstations work fine, but on others the data fields on the screen are empty when the program loads. All machines have the latest MDAC files loaded. What to check next?
 
Are there any error messages?

You could switch tracing on in the "ODBC Data Source Administrator" in the control panel and then run your app and see what it says in the trace file.

Is it the ado control that you are using? I have some information on error handlng and ado - you could use it to write a dummy app that may come back with some more helpful error messages.

Best of luck

SUMMARY
When ActiveX Data Objects (ADO) encounter an error, often the Errors Collection is filled with details on the cause of the error. This article provides sample code for extracting the maximum possible information on any errors raised by ADO using Visual Basic.

If ADO itself encounters an error, it does not populate the Errors Collection, but instead you have to use a native error mechanism to catch and display the error, in this case the Visual Basic Err object. If the provider or underlying components generate error, then these will be populated in the ADO Errors Collection. So you need to check both the Visual Basic Error object and the ADO Errors Collection. However, you may want to preserve the values of the Err collection, because if you Error handling is too complex, in the process of examining and displaying the Errors collection, you could end up resetting the Err object.
MORE INFORMATION
The documentation for the ADO Error object indicates that the Errors Collection will be populated if any error occurs within ADO or it's underlying provider. This is somewhat incorrect. Depending on the source of the error, or even bug, in the underlying provider to ADO (OLE-DB) or within ADO itself, the errors collection may not be populated. You need to check both the Visual Basic Error object as well as the ADO Errors collection.

The Errors Collection is only available from the Connection object, so you need to initialize ADO off of a Connection object. Following is sample code that demonstrates how to open a connection and report any errors encountered.

Often the Errors Collection returns an HRESULT in either hexadecimal format (for example, 0x80004005) or as a long value (for example, 2147467259). These HRESULTS can be raised by underlying components such as OLE-DB or even OLE itself. When this is the case, it may be confusing since these codes are not documented in the ADO online documentation. However, frequently encountered HRESULTS can be found in the Microsoft Knowledge Base article listed in the REFERENCES section.
Private Sub cmdTemplate_Click()

Dim Conn1 As Connection
Dim Errs1 As Errors
Dim i As Integer
Dim StrTmp

On Error GoTo AdoError

Set Conn1 = CreateObject("ADODB.Connection")

' Open connection to Bogus ODBC Data Source for BIBLIO.MDB
Conn1.ConnectionString = "DBQ=BIBLIO.MDB;" & _
"DRIVER={Microsoft Access Driver (*.mdb)};" & _
"DefaultDir=C:\Bogus\Directory\Path;" & _
"UID=admin;PWD=;"
Conn1.Open

' Remaining code goes here.

Done:

' Close all open objects.
If Conn1.State = adStateOpen Then
Conn1.Close
End If

' Destroy anything not destroyed yet.
Set Conn1 = Nothing

' We're done.
Exit Sub

AdoError:

Dim errLoop As Error
Dim strError As String

i = 1

' Process
StrTmp = StrTmp & vbCrLf & "VB Error # " & Str(Err.Number)
StrTmp = StrTmp & vbCrLf & " Generated by " & Err.Source
StrTmp = StrTmp & vbCrLf & " Description " & Err.Description

' Enumerate Errors collection and display properties of
' each Error object.
Set Errs1 = Conn1.Errors
For Each errLoop In Errs1
With errLoop
StrTmp = StrTmp & vbCrLf & "Error #" & i & ":"
StrTmp = StrTmp & vbCrLf & " ADO Error #" & .Number
StrTmp = StrTmp & vbCrLf & " Description " & .Description
StrTmp = StrTmp & vbCrLf & " Source " & .Source
i = i + 1
End With
Next

MsgBox StrTmp

' Clean up Gracefully

On Error Resume Next
GoTo Done

End Sub
 
Thanks Tom,
No, there are no error messages. I created a small VB project with one form and one adodc connection on it, and it displays the same behavior. On one PC, the text filed appears with data in it. On another, the field appears empty. If I remove the ODBC connection on the misbehaving PC, the program returns an error just like it should. When I restore the ODBC connection, the error goes away, but no data appears in the field. So, it's obviously able to see the connection.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top