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 19/06/2007, 11h50   #1
Membre du Club
 
Avatar de mattyeux
 
Étudiant
Inscription : décembre 2006
Messages : 167
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2006
Messages : 167
Points : 64
Points : 64
Par défaut Fonction Récursive --> error '80020009'

Bonjour à tous,

J'ai eu besoin de developper une fonction récursive qui permet de : quand on efface un élément, il faut supprimer tous ses sous élément récursivement.
Ces éléments sont tous classés dans une base de données avec un numéro, et un numéro père.
Ma fonction récursive fait :
-si un élément n'a pas de fils, alors on le delete de la BD
-sinon on cherche ses éléments fils et on appelle récursivement la fonction sur ces derniers.

Voici mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
<%Sub suppressionRepertoire(numElmt)
		'récupération du nombre de fils du répertoire
		requete = "SELECT num as nbFils FROM FS_Partage WHERE pere = "&numElmt
		Response.Write("Comptage du nombre de fils pour "&numElmt&"<br/>")
		query oConn, oRS, requete
		If Not oRS.EOF Then
			nbFils = oRS.recordcount
			Response.Write("NB fils pour "&numElmt&" : "&nbFils&"<br/>")
		End IF
		'si le répertoire n'a pas de fils c'est que l'on peut l'effacer
		if nbFils = 0 then
			'effacement de l'élément
			requete2 = "DELETE from FS_Partage WHERE num ="&numElmt
			Response.Write("Suppression du répertoire numéro "&numElmt)
			query oConn, oRS, requete2
		'sinon
		else 
			Response.Write("Répertoire num "&numElmt&" en recherche"&"<br/>")
			'on recherche tous les sous éléments du répertoire
			requete3 = "SELECT num FROM FS_Partage WHERE pere = "&numElmt
			query oConn, oRS, requete3
			nbRow = oRS.recordcount
			'pour chacun d'entre eux, on recommence.
			for i=1 to nbRow
				Response.Write("Recherche dans repertoire numéro "&oRS.fields("num")&"<br/>")
				suppressionRepertoire(oRS.fields("num"))
				oRS.movenext
			next
		end if
 
End Sub%>
Cependant, j'ai une erreur à un moment donné que je ne comprend pas (n'étant pas habitué à l'ASP).
Voici les affichages que j'ai :

Comptage du nombre de fils pour 2
NB fils pour 2 : 2
Répertoire num 2 en recherche
Recherche dans repertoire numéro 3
Comptage du nombre de fils pour 3
error '80020009'

/IntraGDC/TESTPROD/partage.asp, line 50


La ligne 50 correspond à la ligne suivante :

Code :
	requete2 = "DELETE from FS_Partage WHERE num ="&numElmt
Donc selon les affichages, le début fonctionne bien, l'algorithme trouve bien que l'éléments à 2 fils. Il appelle donc récursivement la procédure et au moment ou il doit compter le nombre de fils de cet élément, il fait cette erreur sans une once d'explication...

J'aimerai savoir si l'un d'entre vous pouvait m'expliquer d'où vient le problème : niveau ASP, niveau BD ou niveau algorithmique ?

Merci beaucoup

A+

Matthieu
mattyeux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 12h35   #2
Membre du Club
 
Avatar de mattyeux
 
Étudiant
Inscription : décembre 2006
Messages : 167
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2006
Messages : 167
Points : 64
Points : 64
Bon ben finallement, j'ai trouvé le problème ... C'était a priori une erreur de portée.

Ma variable nbElmt ne semblait pas avoir une portée suffisante pour ma fonction récursive ...

J'ai donc mis en place une variable locale.

Voici mon nouveau code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
	<%Sub suppressionRepertoire(numElmt)
		NbreElements=numElmt
		'récupération du nombre de fils du répertoire
		requete = "SELECT num FROM FS_Partage WHERE pere = "&NbreElements
		query oConn, oRS, requete
		nbFils = oRS.recordcount
		if nbFils = 0 then
			'effacement de lélément
			requete2 = "DELETE from FS_Partage WHERE num ="&NbreElements
			Response.Write("Suppression du répertoire numéro "&NbreElements)
			query oConn, oRS, requete2
		'sinon
		else 
			'on recherche tous les sous éléments du répertoire
			requete3 = "SELECT num FROM FS_Partage WHERE pere = "&NbreElements
			query oConn, oRS, requete3
			nbRow = oRS.recordcount
			'pour chacun d'entre eux, on recommence.
			for i=1 to nbRow
				suppressionRepertoire(oRS.fields("num"))
				oRS.movenext
			next
		end if
	
End Sub%>
mattyeux 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 22h14.


 
 
 
 
Partenaires

Hébergement Web