IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP Discussion :

Fonction Récursive --> error '80020009'


Sujet :

ASP

  1. #1
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    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 : 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

  2. #2
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut
    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 : 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
    	<%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%>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. error '80020009'
    Par silvain dans le forum ASP
    Réponses: 8
    Dernier message: 29/09/2005, 10h56
  2. Réponses: 2
    Dernier message: 30/08/2005, 16h08
  3. Message d'erreur ADODB.Field error '80020009'
    Par tonyC dans le forum ASP
    Réponses: 2
    Dernier message: 23/07/2005, 16h00
  4. Error 80020009. Exception occurred
    Par twizell dans le forum ASP
    Réponses: 5
    Dernier message: 14/04/2005, 20h35
  5. error 80020009 une exception s'est produite
    Par Riouxe21 dans le forum ASP
    Réponses: 6
    Dernier message: 21/12/2004, 11h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo