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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
	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