Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Langages serveur > ASP
ASP Forum sur la programmation ASP. Avant de poster : Cours ASP, FAQ ASP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/06/2007, 18h17   #1
Invité de passage
 
Inscription : mars 2003
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 5
Points : 3
Points : 3
Par défaut Mettre une requete SQL dans une fonction

Bonjour,

J'aimerais écrire une fonction qui execute une requete passée en argument.
L'objectif c'est d'éviter de réécrire à chaque fois les chaines de connexion.

Ma fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
<%
function ExecuteSqlServer(sql) ' Pour les requêtes de sélection
 
	dim SqlConn : set SqlConn = Server.CreateObject("ADODB.Connection")
	SqlConn.Open Application("DataBase"), Application("DBLogin"), Application("DBPwd")
	dim rs : set rs = Server.CreateObject("ADODB.Recordset")
	rs.Open sql, SqlConn, 3, 1 ' adOpenStatic, adLockReadOnly
	ExecuteSqlServer = rs
end function
 
%>
Ensuite j'appelle la fonction depuis la page :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
Dim MonRS2
 
sSQL = "SELECT * FROM mabase;"
set MonRS2= ExecuteSqlServer(sSQl)
While not (rsMonRS2.eof OR MonRS2.Bof)
	Response.Write MonRS2("Nom") & "<br>" & vbcrlf
	MonRS2.MoveNext
Wend
MonRS2.Close
Set MonRS2= Nothing
Mais voila que j'obtiens cette erreur :
Code :
1
2
3
Erreur d'exécution Microsoft VBScript error '800a01b6' 
 
Cet objet ne gère pas cette propriété ou cette méthode: 'EOF'
Je ne peux plus utiliser EOF, BOF, recordcount...

Une idée ? Peut être qu'on ne peut tout simplement pas faire ça... (mais manifestement c'est possible en .net)
yenna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 22h23   #2
Membre actif
 
Inscription : mai 2004
Messages : 166
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2004
Messages : 166
Points : 178
Points : 178
Déjà ça m'étonne qu'il ne rale pas si lors du renvoi d'un objet par ta fonction tu n'emploies pas le mot clef set :
Code :
1
2
3
4
5
6
7
8
9
function ExecuteSqlServer(sql) ' Pour les requêtes de sélection
 
	dim SqlConn : set SqlConn = Server.CreateObject("ADODB.Connection")
	SqlConn.Open Application("DataBase"), Application("DBLogin"), Application("DBPwd")
	dim rs : set rs = Server.CreateObject("ADODB.Recordset")
	rs.Open sql, SqlConn, 3, 1 ' adOpenStatic, adLockReadOnly
	set  ExecuteSqlServer = rs
end function
Ensuite peut être qu'avec le test rs.bof en moins ça marcherait mieux
Code :
1
2
3
4
 
While not (rsMonRS2.eof)
......
Wend
Enfin une dernière idée : déclarer explicitement dans le code que c'est un objet recordset qu'on va alimenter avec une fonction
Code :
1
2
3
4
5
 
Dim MonRS2 : set MonRS2 = Server.CreateObject("ADODB.Recordset")
.....
set MonRS2= ExecuteSqlServer(sSQl)
...
amar00 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2007, 08h10   #3
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 2 810
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 2 810
Points : 3 011
Points : 3 011
Bonjour,

Autre chose :

Code :
1
2
3
 
set MonRS2= ExecuteSqlServer(sSQl)
While not (rsMonRS2.eof OR MonRS2.Bof)
Tu initialises MonRS2
et tu testes rsMonRS2

Y a pas un truc là ?
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2007, 10h21   #4
Invité de passage
 
Inscription : mars 2003
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 5
Points : 3
Points : 3
Merci pour vos conseils, ca marche !!!
yenna est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h05.


 
 
 
 
Partenaires

Hébergement Web