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

VBA Access Discussion :

Boucle sur recordset


Sujet :

VBA Access

  1. #1
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut Boucle sur recordset
    bonjour à tous,

    Je n'arrive pas à solutionner mon problème, aussi j'ai besoin de votre aide.

    A partir de 2 recordsets, je veux mettre à jour une table.

    Mon premier recordset "rst" liste les élements de ma table "CompositionTarif"
    Mon second recordset "rst1" liste les éléments de ma table Famille (dont la valeur NvFam est à False)

    Je souhaite mettre à jour une table Tbl_CoeffGamGr et donc je veux ajouter toutes les familles pour chaque tarif.

    Voici ma syntaxe :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Private Sub Commande28_Click()
         Dim db As Database
         Dim rst As Recordset
         Dim rst1 As Recordset
         Dim SqlQuery As String, SqlQuery1 As String
         Dim StrSqlInsert15 As String
         Set db = CurrentDb
     
     
            'sélection des tarifs clients
     
                SqlQuery = ("SELECT N°_Tarif FROM Tbl_CompositionTarif")
                Set rst = db.OpenRecordset(SqlQuery)
    'Debug.Print SqlQuery
     
                SqlQuery1 = ("SELECT Tbl_Famille.Famille FROM Tbl_Famille " & _
                        "LEFT JOIN Tbl_CoeffGamGr ON Tbl_Famille.Famille=" & _
                        "Tbl_CoeffGamGr.FamGamGr WHERE (((Tbl_Famille.NvFam)=False));")
                Set rst1 = db.OpenRecordset(SqlQuery1)
    'Debug.Print SqlQuery1
     
    '====================================================================================================================
            'boucle sur le recordset....sqlQuery = ("SELECT N°_Tarif FROM Tbl_CompositionTarif")
            'On passe en revue tous les tarifs clients
        Do While Not rst1.EOF
     
     
                         Do While Not rst1.EOF
     
                StrSqlInsert15 = "INSERT INTO Tbl_CoeffGamGr ( TARIFS, FamGamGr ) " & _
                        "SELECT '" & rst.Fields("N°_Tarif").Value & "' AS Expr1, " & _
                        "Tbl_Famille.Famille FROM Tbl_Famille LEFT JOIN " & _
                        "Tbl_CoeffGamGr ON Tbl_Famille.Famille = Tbl_CoeffGamGr.FamGamGr " & _
                        "WHERE (((Tbl_Famille.Famille)='" & rst1.Fields("Famille").Value & "'));"
     
            MsgBox rst1.Fields("Famille").Value & " " & rst.Fields("N°_Tarif").Value
     
    'Debug.Print StrSqlInsert15
     
                      'db.Execute (StrSqlInsert15), dbFailOnError
     
                rst1.MoveNext
     
            Loop
     
                rst1.MoveNext
        Loop
    End Sub
    Je sais que ça ne peut pas coller, car évidemment quand j'arrive au bout de mon premier recordset la valeur EOF change.

    Pouvez-vous m'aider.

    Daneil

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Si j'ai bien compris :
    Avec 2 requêtes ça devrait le faire

    requête1 :

    Associe pour chaque tarif les familles dont NvFam=False

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT tbl_CompositionTarif.[N° tarif], tbl_Famille.famille
    FROM tbl_CompositionTarif, tbl_Famille
    WHERE (((tbl_Famille.NvFam)=False));
    requête2

    Ajoute le résultat de la première requête dans la table tbl_CoeffGamGr s'il n'existe pas déjà

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Requête1.[N° tarif], Requête1.famille
    FROM Requête1 LEFT JOIN tbl_CoeffGamGr ON Requête1.famille = tbl_CoeffGamGr.FamGamGr
    WHERE (((tbl_CoeffGamGr.FamGamGr) Is Null));
    Il suffit de lancer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.RunSQL "requête2"

  3. #3
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Pourquoi les deux loop sur le même recordset ?
    Si le code est un copier coller, il y a un problème, c'est deux fois le même record set
    Et il faut définir le second recordset dans la boucle du premier et pas en dehors.

  4. #4
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut
    Merci pour vos réponses,

    Effectivement mon copier coller est érroné


    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Private Sub Commande28_Click()
         Dim db As Database
         Dim rst As Recordset
         Dim rst1 As Recordset
         Dim SqlQuery As String, SqlQuery1 As String
         Dim StrSqlInsert15 As String
         Set db = CurrentDb
     
     
            'sélection des tarifs clients
     
                SqlQuery = ("SELECT N°_Tarif FROM Tbl_CompositionTarif")
                Set rst = db.OpenRecordset(SqlQuery)
    'Debug.Print SqlQuery
     
                SqlQuery1 = ("SELECT Tbl_Famille.Famille FROM Tbl_Famille " & _
                        "LEFT JOIN Tbl_CoeffGamGr ON Tbl_Famille.Famille=" & _
                        "Tbl_CoeffGamGr.FamGamGr WHERE (((Tbl_Famille.NvFam)=False));")
                Set rst1 = db.OpenRecordset(SqlQuery1)
    'Debug.Print SqlQuery1
     
    '====================================================================================================================
            'boucle sur le recordset....sqlQuery = ("SELECT N°_Tarif FROM Tbl_CompositionTarif")
            'On passe en revue tous les tarifs clients
        Do While Not rst1.EOF
     
     
                         Do While Not rst.EOF
     
                StrSqlInsert15 = "INSERT INTO Tbl_CoeffGamGr ( TARIFS, FamGamGr ) " & _
                        "SELECT '" & rst.Fields("N°_Tarif").Value & "' AS Expr1, " & _
                        "Tbl_Famille.Famille FROM Tbl_Famille LEFT JOIN " & _
                        "Tbl_CoeffGamGr ON Tbl_Famille.Famille = Tbl_CoeffGamGr.FamGamGr " & _
                        "WHERE (((Tbl_Famille.Famille)='" & rst1.Fields("Famille").Value & "'));"
     
            MsgBox rst1.Fields("Famille").Value & " " & rst.Fields("N°_Tarif").Value
     
    'Debug.Print StrSqlInsert15
     
                      'db.Execute (StrSqlInsert15), dbFailOnError
     
                rst.MoveNext
     
            Loop
     
                rst1.MoveNext
        Loop
    End Sub
    avec mon code, je boucle sur le premier recordset, mais pas sur le 2ème.

    Je me demandais si avec une syntaxe du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For 1 = 0 to rst1.fiels....
    Next
    çà devrait le faire, mais je n'arrive pas à l'écrire.

    Ta réponse fonctionne, mais pour des raisons pratiques (si c'est possible), je préférerai ma solution.

    Merci pour votre aide, je continue de chercher.

    Daniel

  5. #5
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Je pense que tu devrais dans ta boucle,

    Boucle RST1
    Set RST =
    Boucle RST
    blabla
    Fin de boucle rst
    find de boucle RST1

  6. #6
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut
    Merci Heureux-Oli


    ta solution est la bonne. j'ai compris mon erreur et je te remercie beaucoup pour ton aide.

    Merci encore

    Daniel

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

Discussions similaires

  1. [XL-2007] Double boucle sur objet recordset
    Par Slavo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/03/2014, 15h17
  2. [AC-2003] Boucle Infinie sur RecordSet
    Par aminnio dans le forum VBA Access
    Réponses: 4
    Dernier message: 28/06/2013, 10h55
  3. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  4. [Toutes versions] Problème de boucle sur un Recordset
    Par Roums dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/10/2009, 11h41
  5. [MFC] Boucle sur un bouton
    Par karl3i dans le forum MFC
    Réponses: 6
    Dernier message: 17/02/2004, 11h37

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