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