2016-10-31 1 views
0

J'essaie d'ouvrir un jeu d'enregistrements de sorte que je puisse obtenir une valeur précise pour RecordCount. J'ai un code qui fonctionne avec succès en utilisant Recordset.Open avec les constantes adOpenStatic et adLockReadOnly. Cependant, lorsque j'utilise le code suivant.Impossible de modifier la propriété ActiveConnection d'un objet Recordset

With cmd 
    .ActiveConnection = db 
    .CommandType = adCmdStoredProc 
    .CommandText = "doGetBookingCrewDetails" 

    .Parameters.Append .CreateParameter("@bookingid", adInteger, adParamInput) 
    .Parameters("@bookingid") = 42943 

    .Parameters.Append .CreateParameter("@starttime", adDBTimeStamp, adParamInput) 
    .Parameters("@starttime") = "07/10/2016 00:00" 
End With 

Set rsCr = Server.CreateObject("ADODB.Recordset") 
rsCr.Open cmd, db, adOpenStatic, adLockReadOnly 

Je reçois l'erreur

0x800a0e7b - ADODB.Recordset: Impossible de changer la propriété ActiveConnection d'un objet Recordset qui a un objet de commande comme source.

Le code ci-dessus renvoie le bon jeu de résultats lors de l'utilisation Command.Execute, mais je ne peux pas préciser les constantes qui semblent rendre le nombre de lignes de travail de la propriété.

Comment est-ce que je fais ce travail?

+3

Cette page: https://msdn.microsoft.com/en-us/library/ms675544(v=vs.85).aspx dit ceci: _La propriété ActiveConnection est en lecture seule pour les objets Recordset dont la propriété Source est définie sur un objet Command valide, même si l'objet Recordset n'est pas ouvert._ Il indique également que le paramètre 'activeconnection' est facultatif. Bref, essayez _not_ de passer 'db' dans' rsCr.open'. –

+1

Oui, votre suggestion fonctionne. Je pensais que j'avais essayé ça en fait, devinez non! –

+1

Le lien indique également: «Si vous transmettez un objet Command dans l'argument Source et que vous transmettez également un argument ActiveConnection, une erreur se produit: la propriété ActiveConnection de l'objet Command doit déjà être définie sur un objet Connection ou une chaîne de connexion valide. –

Répondre

1

Voici quelques points de Open Method (ADO Recordset):

La propriété ActiveConnection est en lecture seule pour les objets Recordset dont la propriété Source est définie sur un objet de commande valide, même si l'objet Recordset n'est pas ouvert.

et

le paramètre ActiveConnection est facultative.

également

Si vous passez un objet de commande dans l'argument Source et aussi passer un argument ActiveConnection, une erreur se produit. La propriété ActiveConnection de l'objet Command doit déjà être définie sur un objet de connexion valide ou une chaîne de connexion

Donc en bref, essayez de ne pas passer db dans rsCr.open du tout.

Quelque chose comme ceci:

rsCr.Open cmd, , adOpenStatic, adLockReadOnly