OVH Cloud OVH Cloud

Requête et récurrence

2 réponses
Avatar
Buddy
Bonsoir

Je souhaiterai créer une requête récurrente dans access mais je rame.
Je souhaiterai supprimer dans une table des enregistrements qui s'appellent les uns les autres via
un champs.

Ma table ressemeble à ceci:

Id | Texte1 | IdLigneSup
1 A 0
2 B 1
3 C 1
4 D 2
5 E 4

Je souhaiterai supprimer par exemple Id=1, il faudrait que la requête supprime aussi tous les
enregistrements qui y sont reliés directement et indirectement. Dans l'exemple, la requête devra
tout supprimer.

Si vous avez une idée lumineuse je serai preneur

Merci d'avance
Buddy

2 réponses

Avatar
BM
D'aprés moi, il n'est pas possible de faire des itérations
avec des requêtes! Forget it!
Ton problème est un problème classique de parcours d'arbre
dans lequel on ne sait pas à priori combien il y a de
niveaux de ramification à explorer.
Le souci est que pour supprimer une branche, tu dois
supprimer également toutes les ramifications qui en
découlent (OK?).

Il faut écrire une procédure VBA itérative qui va
supprimer tous les 'fils' du niveau (n) qu'on lui indique
(comme paramètre lors de l'appel), avec la structure
suivante:
Chercher un par un les enregistrements pour lesquels
IDLSUP correspond à n (ce sont les 'fils' de n)

a) s'il n'y en a aucun, tu peux supprimer l'enregistrement
ID = n et quitter la procédure (Exit).
b) pour chacun de ceux qui seront trouvés, appeler la même
procédure en donnant ID comme niveau à traiter.

Lorsque ces itérations seront terminées, il restera à
supprimer l'enregistrement pour lequel ID = n.

Attention 1 : mettre des sécurités ou utiliser
intensivement les points d'arrêt dans le debogueur car le
risque est grand de faire tourner des boucles sans fin et
de se retrouver bloqué sans pouvoir reprendre la main.
Attention 2 : à chaque nouvelle ramification qui appelle
la même procédure, l'ordinateur doit empiler des données
dans une zone qui a une limite. il y a un risque potentiel
d'aboutir à un blocage s'il y a un trop grand nombre de
ramifications successives.

-----Message d'origine-----
Bonsoir

Je souhaiterai créer une requête récurrente dans access
mais je rame.

Je souhaiterai supprimer dans une table des
enregistrements qui s'appellent les uns les autres via

un champs.

Ma table ressemeble à ceci:

Id | Texte1 | IdLigneSup
1 A 0
2 B 1
3 C 1
4 D 2
5 E 4

Je souhaiterai supprimer par exemple Id=1, il faudrait
que la requête supprime aussi tous les

enregistrements qui y sont reliés directement et
indirectement. Dans l'exemple, la requête devra

tout supprimer.

Si vous avez une idée lumineuse je serai preneur

Merci d'avance
Buddy


.



Avatar
Buddy
Salut

Merci, c'est ce que je craignais.
Vu la taille de l'arbre et le partage en réseau : bonjour les performances.

Bah j'vais faire avec.
Buddy

"BM" a écrit dans le message de
news:2e5501c3fced$0e54e800$
D'aprés moi, il n'est pas possible de faire des itérations
avec des requêtes! Forget it!
Ton problème est un problème classique de parcours d'arbre
dans lequel on ne sait pas à priori combien il y a de
niveaux de ramification à explorer.
Le souci est que pour supprimer une branche, tu dois
supprimer également toutes les ramifications qui en
découlent (OK?).

Il faut écrire une procédure VBA itérative qui va
supprimer tous les 'fils' du niveau (n) qu'on lui indique
(comme paramètre lors de l'appel), avec la structure
suivante:
Chercher un par un les enregistrements pour lesquels
IDLSUP correspond à n (ce sont les 'fils' de n)

a) s'il n'y en a aucun, tu peux supprimer l'enregistrement
ID = n et quitter la procédure (Exit).
b) pour chacun de ceux qui seront trouvés, appeler la même
procédure en donnant ID comme niveau à traiter.

Lorsque ces itérations seront terminées, il restera à
supprimer l'enregistrement pour lequel ID = n.

Attention 1 : mettre des sécurités ou utiliser
intensivement les points d'arrêt dans le debogueur car le
risque est grand de faire tourner des boucles sans fin et
de se retrouver bloqué sans pouvoir reprendre la main.
Attention 2 : à chaque nouvelle ramification qui appelle
la même procédure, l'ordinateur doit empiler des données
dans une zone qui a une limite. il y a un risque potentiel
d'aboutir à un blocage s'il y a un trop grand nombre de
ramifications successives.

-----Message d'origine-----
Bonsoir

Je souhaiterai créer une requête récurrente dans access
mais je rame.

Je souhaiterai supprimer dans une table des
enregistrements qui s'appellent les uns les autres via

un champs.

Ma table ressemeble à ceci:

Id | Texte1 | IdLigneSup
1 A 0
2 B 1
3 C 1
4 D 2
5 E 4

Je souhaiterai supprimer par exemple Id=1, il faudrait
que la requête supprime aussi tous les

enregistrements qui y sont reliés directement et
indirectement. Dans l'exemple, la requête devra

tout supprimer.

Si vous avez une idée lumineuse je serai preneur

Merci d'avance
Buddy


.