Consultor Eletrônico



Kbase P111550: Excel DAO Error: 3146 ODBC ? call failed.
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   07/12/2005
Status: Unverified

FACT(s) (Environment):

Windows
OpenEdge 10.0B

SYMPTOM(s):

Excel DAO Error: 3146 ODBC ? call failed.

[DataDirect][ODBC OPENEDGE driver][OPENEDGE]Cursor not opened (7511).

Connection structure is: Excel 2000 (VBA) -> Access 2000 (linked tables) -> OpenEdge 10.0B.

Code fails on the invocation of the Recordset2.Addnew command in the
following code:
Dim DBSODBC as Database
Dim Recordset1 as Recordset
Dim Recordset2 as Recordset
Set DBSODBC = OpenDatabase("C:\NewbidDB\ODBC.mdb")
Set Recordset1 = DBSODBC.OpenRecordset("PUB_TABLE1")
Set Recordset2 = DBSODBC.OpenRecordset("PUB_TABLE2")
Recordset1.Addnew
Recordset1.Fields("Field1").Value = "Value1"
Recordset1.Fields("Field2").Value = "Value2"
Recordset1.Fields("Field3").Value = "Value3"
Recordset1.Update
Recordset2.Addnew
Recordset2.Fields("Field1").Value = "Value1"
Recordset2.Fields("Field2").Value = "Value2"
Recordset2.Fields("Field3").Value = "Value3"
Recordset2.Update
Recordset1.Close
Recordset2.Close
DBSODBC.Close

CAUSE:

Recordset1 needs to be closed before Recordset2 is opened.

FIX:

Modify the code to close the first recordset before a new one is opened:
Dim DBSODBC as Database
Dim Recordset1 as Recordset
Dim Recordset2 as Recordset
Set DBSODBC = OpenDatabase("C:\NewbidDB\ODBC.mdb")
Set Recordset1 = DBSODBC.OpenRecordset("PUB_TABLE1")
Set Recordset2 = DBSODBC.OpenRecordset("PUB_TABLE2")
Recordset1.Addnew
Recordset1.Fields("Field1").Value = "Value1"
Recordset1.Fields("Field2").Value = "Value2"
Recordset1.Fields("Field3").Value = "Value3"
Recordset1.Update
' **** new code ****
Recordset1.Close
DBSODBC.Close
Set DBSODBC = OpenDatabase("C:\NewbidDB\ODBC.mdb")
Set Recordset2 = DBSODBC.OpenRecordset("PUB_TABLE2")
'**** end new code ****

Recordset2.Addnew
Recordset2.Fields("Field1").Value = "Value1"
Recordset2.Fields("Field2").Value = "Value2"
Recordset2.Fields("Field3").Value = "Value3"
Recordset2.Update
Recordset1.Close
Recordset2.Close
DBSODBC.Close