à hugo et tout interesse par asp et sql server

gladiator - 23 août 2001 à 12:04
 Hugo - 24 août 2001 à 14:19
salut c'est moi encore
j'ai le code suivant
<%set conn=Server.CreateObject("ADODB.Connection")
conn.open "teste","kamal","kamal"

set rs=Server.CreateObject("ADODB.RecordSet")
rs.open "select * from TABLE1",conn,adOpenStatic%>




nom,
prenom,

<%do%>
----

<%=rs.fields("nom")%>,
<%=rs.fields("prenom")%>,

<%rs.MoveNext
loop until rs.eof%>

<%rs.close
set rs=nothing
conn.close
set conn=nothing%>

</html>
est le message d'erreur suivant:
ADODB.Recordset erreur '800a0e78'
Cette opération n'est pas autorisée si l'objet est fermé.

mais je ne trouve pas de solution
svp aider moi

3 réponses

je te conseille aspfr où tu trouveras probablement plus d'aide...
0
Ben j'ai pas de solution :-) c'est une erreur assez fréquente...

ELle arrive souvent lorsque la base de donénes en face renvois deux recorset l'un derrière l'autre ou que la connexion à la base de données est de type asynchrone et que la connexion est toujours en train de rapatrier des données au moment où tu la ferme.

L'erreur se présentait fréquemment sur ADO 2.1 et un peu moins sur 2.5.

J4ai tester ton code source etil fonctionne bien sur mon serveur. Quelle base de donnée utilises tu et quelle version d'ADO ? Si ton environnement te le permet upgrade vers ADO 2.6 si nécessaire.

bon courage :-)

petite remarque sur ton code :
IL vaudrait mieux inverser ta boucle de facon à te prémunir d'un recordset vide et donc préférer un do while... cela même si tu es persuadé que le recordset ne sera jamais vide :-)

Avec les tableaux images de recorset arrivent généralement les pb de perf... donc voilà deux petits conseils :

Pour ASP Il est plus efficace si tu concatènes la ligne en une seul insruction response.write.

ex response.write "<TR><TD" + rs("nom")+"</TD>" etc...

Si tu as beaucoup d'enregistrement c'est l'itération sur l'objet rs qui va commencer à prendre du temps. Dans ce cas tu peux utiliser la commande getrows du recordset qui va te permettre de transformer autoamtiquement le recordset en tableau de variant (NB il faut avoir un peu plus de mémoire) Dans ce cas les accès son bien plus rapide et tu peux obtenir le nombre d'enregistrement en testant UBound du tableau.

voilà pas de réponse même quelques tips tout de même :)
0
Bon faut que je me réveille moi... Tu as marqué quelle base de données ! J'ai une excuse il y a pas la version :-)

Avec SQL Server quant tu es un peu short en treme de possibiité d'upgrade ou de changement tu peux parfois corriger l'erreur en changeant le type d'accès :
- soit en utilisant le driver ODBC
- soit en utilisant le driver OLEDB.

Dans ce cas la gesion de la connexion n'est pas tout à fait la même et ça permet parfois de contourner l'erreur.
0
Rejoignez-nous