Nous avons de très anciennes applications VB6 se connectant à une base de données Sybase. Aujourd'hui, ils fonctionnent correctement avec les pilotes Open Client 12 via ODBC se connectant à un serveur Sybase ASE 15.Erreur Sybase Ase 15 sur plusieurs jeux d'enregistrements et transaction active
Il y a un plan sur la mise à OpenClient 15 pilotes et avec cette version que je reçois cette erreur:
Run-time error '-2147467259(80004005)'
Transaction cannot have multiple recordsets with this cursor type.
Change the cursor type, commit the transaction, or close one of the recordsets.
Comme je comprends la recherche Internet, le problème est dans les Curseurs.
Dans les anciens pilotes dans le gestionnaire de configuration ODBC il y avait un onglet Performance et nous avons la Sélectionner la méthode dans le curseur, mais avec les nouveaux pilotes cet onglet est parti et tout ce que nous avons obtenu sur les curseurs est une section dans le Général onglet nommé Comportement du curseur, là, nous avons l'option Utilisez les curseurs cochée.
Voici un petit extrait de code où je peux reproduire le problème. Toute aide est appréciée.
Dim conObj As ADODB.Connection
Dim objRs As ADODB.Recordset
Dim objRs2 As ADODB.Recordset
Set conObj = New ADODB.Connection
conObj.ConnectionTimeout = 10
conObj.CommandTimeout = 5
conObj.Provider = "MSDASQL"
conObj.Open "DSN=cdbur32;UID=***;PWD=***;Database=dbsait;WSID=Test;APP=Test"
conObj.CursorLocation = adUseClient
conObj.BeginTrans
Set objRs = New ADODB.Recordset
Set objRs.ActiveConnection = conObj
objRs.Source = "select id_estatus_aplicacion from dbo.cat_sait_estatus_aplicaciones"
objRs.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly
objRs.LockType = ADODB.LockTypeEnum.adLockReadOnly
objRs.Open
objRs.MoveNext
Debug.Print objRs("id_estatus_aplicacion")
Set objRs2 = New ADODB.Recordset
Set objRs2.ActiveConnection = conObj
objRs2.Source = "select * from dbo.cat_sait_estatus_aplicaciones"
objRs2.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly
objRs2.LockType = ADODB.LockTypeEnum.adLockReadOnly
objRs2.Open 'error here
objRs.MoveNext
Debug.Print objRs("id_estatus_aplicacion")
conObj.RollbackTrans
objRs.Close
objRs2.Close
Set conObj = Nothing
il n'a pas aidé, montre la même erreur –
Quels types que vous avez essayé? – Kaniu
Tous, à la fin, les gars de Sybase nous ont envoyé un nouveau pilote et cela a réglé le problème –