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 :

Dupliquer des enregistrements en fonction d'une variable [Toutes versions]


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2018
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Dupliquer des enregistrements en fonction d'une variable
    bonjour à tous,

    j'ai une table "commande" avec 2 colonnes: Référence et quantité
    par exemple:
    ref A qté: 2
    ref B qté: 3

    je voudrais obtenir une table qui contienne le nombre d'enregistrements de chaque reference en fonction des quantités commandées (comme suit):
    ref A
    ref A
    ref B
    ref B
    ref B

    merci pour votre aide.
    bonne journée.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 323
    Points : 23 758
    Points
    23 758
    Par défaut
    Bonjour.

    Une solution en VBA possible :

    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
    33
    34
    35
    36
    37
    38
    public sub CreerLigneCommande(prmNumCommande as long)
       dim db as dao.database:set db=currentdb
       dim critere as string:critere="[NumCommande]=" & prmNumCommande
     
       '=== Supprime les lignes qui pourraient exister
       dim SQl as string:SQl="Delete * from [tblLigneCommande] where " & critere
       call db.execute(sql, dbFailOnErrror)
       '--- Supprime les lignes qui pourraient exister
     
       '=== Cree les lignes de commandes
       dim rCommande as dao.reccordset:set r=db.openrecordset("tblCommande", dbOpenSnapshot)
       dim rLigne as dao.recordset: set rLigne=db.openrecordset("tblLigneCommande", dbOpenDynaset)
     
       call rCommande.FinddFisrt(critere)
     
       dim i as long
     
       do while not rCommande.NoMatch 
     
           '=== Cree autant de ligne que de quantite commadee
           for i=1 to rCommande![Qte]
               rLigne.addNew
               rLigne![NumCommande]=rCommande![NumCommande]
               rLigne![Ref]=rCommande![Ref]
               rLigne.Update
           next i
           '--- Cree autant de ligne que de quantite commadee
     
           call rCommande.FindNext(critere)
     
       loop
     
       rLigne.close:set rLigne=nothing
       rCommande.Close: set rCommande=nothing
       '--- Cree les lignes de commandes
     
       db.close:set db=nothing   
    end sub
    Ou prm est une abreviation perso pour "Parametre".

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 323
    Points : 23 758
    Points
    23 758
    Par défaut
    Re-Bonjour.

    On peut aussi le faire en SQL, c'est une solution que j'ai piquee dans une formation pour Ms-SQL Server.
    Cela te prends une table (tblNumero) qui contient au moins autant d'enregistrement que tu as de repetition a faire (ex : 1000 lignes).
    Ces enregistrements doivent etre numerotes de 1 a 1000.
    Apres tu fais un produit croise entre ta table avec les quantites (tblCommande) et tblNumero avec comme critere [tblNumero].[Numero]<=[tblCommande].[Qte].
    Tu utilises ensuite cette requete comme source dans une requete d'ajout.

    Je ne sais pas si c'est plus interressant que la VBA car si on a beaucoup de lignes dans le produit croise on risque d'exploser les 2 Go, taille max d'une BD Access mais pour de petits volumes c'est assez eleguant comme solution.
    En 2 requetes, tu remplaces une vingtaine de lignes de code.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Candidat au Club
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2018
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    salut Marot,

    super ta solution SQL!

    c'est tout simple, mais fallait y penser...

    un grand merci!

    bonne journée.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/10/2014, 15h15
  2. Réponses: 6
    Dernier message: 03/02/2010, 15h00
  3. [E-07] Modifier des Label en fonction d'une variable
    Par DarkGenius dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/12/2008, 19h44
  4. [MySQL] classer des ID en fonction d'une variable
    Par gemça dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/12/2007, 11h18
  5. Réponses: 2
    Dernier message: 27/07/2006, 08h46

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