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

Requêtes et SQL. Discussion :

Requête récursive pour parcourir une nomenclature


Sujet :

Requêtes et SQL.

  1. #1
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut Requête récursive pour parcourir une nomenclature
    Bonjour,

    Est-il possible de faire sous Access, une requête récursive permettant d'extraire des listes chainées d'une Nomenclature(BOM en anglais!)
    J'ai la table suivante, qui est un sous-ensemble de nomenclature:
    Nom : Capture04.jpg
Affichages : 887
Taille : 25,0 Ko
    le BOM_Number=2000022 est la tête de nomenclature.
    Je cherche tous les chemins menant, par exemple, de l'article 2000022 à l'article 2002005.
    Le résultat à obtenir est le suivant:
    2000246, 2003496, 2002395, 2002292, 2000506, 2000246, 2002005
    2000246, 2003495, 2002875, 2002566, 2002565, 2000837, 2000246, 2002005
    2000246, 2001770, 2001771, 2001772, 2001780, 2000246, 2002005
    2000246, 2001527, 2001528, 2001533, 2000246, 2002005

    Pour créer la table BOM5:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE [BOM5](
    	[BOM Number] int NULL,
    	[Item] int NULL,
    	[Mat Number] int NULL,
    	[Qty] int NULL
    )
    Pour la remplir:
    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
    INSERT INTO [BOM5]([BOM Number], [Item], [Mat Number], [Qty])
    SELECT 2000022, 20, 2001770, 1 
    SELECT 2000022, 30, 2003496, 1 
    SELECT 2000022, 50, 2001527, 1 
    SELECT 2000022, 60, 2003495, 1 
    SELECT 2000246, 2, 2002005, 1 
    SELECT 2000506, 1, 2000246, 4 
    SELECT 2000837, 1, 2000246, 7 
    SELECT 2001527, 10, 2001528, 1 
    SELECT 2001528, NULL, 2001533, 1 
    SELECT 2001533, 10, 2000246, 14 
    SELECT 2001770, 10, 2001771, 1  
    SELECT 2001771, NULL, 2001772, 1  
    SELECT 2001772, NULL, 2001780, 1  
    SELECT 2001780, 10, 2000246, 4  
    SELECT 2002292, 8, 2000506, 1  
    SELECT 2002395, 1, 2002292, 1  
    SELECT 2002565, 2, 2000837, 1  
    SELECT 2002566, 1, 2002565, 1  
    SELECT 2002875, 1, 2002566, 1  
    SELECT 2003495, 10, 2002875, 1  
    SELECT 2003496, 10, 2002395, 1
    Attention: lancer autant d'INSERT INTO qu'il y a de SELECT!

    Merci d'avance.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour,

    Autant que je sache on ne peut pas faire de recusivite en Access avec du SQL.

    Ce que tu peux faire :
    1. Creer une fonction VBA qui simule la recusivite lors de ta requete (generalement c'est lent a mourrir :-( )
    2. Si ta profondeur maximale est connue (ex maxiimum 3 niveaux), creer autant de requetes que de niveau et faire un union des resultats.
    3. Enregistrer ta hierarchie dans un champ memo complete a la creation et aux modifications. C'est aussi lent que le choix 1 mais 1 morceau a la fois comme cela ca parait moins :-(.
      Quand tu as juste besoin d'afficher la hierarhie, tu utilise le champ qui a ete deja calcule.


    A+

  3. #3
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut
    Bonjour René,

    Merci pour ta réponse.
    Je suis en train de tester la solution VBA avec une requête récursive. Pour l'instant ça ne ma parait pas trop lent.
    Je teste aussi une solution par requête récursive en Transact-sql, sous sql server, mais c'est une solution plus complexe.
    Bonne journée,
    Philippe

Discussions similaires

  1. Requête récursive pour parcourir une nomenclature (Suite)
    Par Philippe PONS dans le forum Développement
    Réponses: 4
    Dernier message: 03/07/2014, 14h09
  2. [2012] Requête récursive pour parcourir une nomenclature
    Par Philippe PONS dans le forum Développement
    Réponses: 3
    Dernier message: 03/07/2014, 09h36
  3. [MySQL] Requête SQL pour charger une structure récursive
    Par FMaz dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/07/2009, 05h00
  4. Fonctions récursives pour parcourir un arbre
    Par mikedavem dans le forum C
    Réponses: 4
    Dernier message: 05/06/2006, 12h00
  5. Requête SQL pour insérer une donnée BINAIRE ?
    Par Najdar dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/05/2006, 10h21

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