2010-08-19 21 views
0

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 

Répondre

0

à la fin les gars Sybase nous envoyer un nouveau pilote et résolu le problème

0

Est-ce que le changement de suspentes

objRs.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly 

et

objRs2.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly 

aide?

+0

il n'a pas aidé, montre la même erreur –

+0

Quels types que vous avez essayé? – Kaniu

+0

Tous, à la fin, les gars de Sybase nous ont envoyé un nouveau pilote et cela a réglé le problème –