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 :

Problème avec l'ajout d'un champ à une table qui résulte d'une requête [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Février 2014
    Messages : 75
    Points : 49
    Points
    49
    Par défaut Problème avec l'ajout d'un champ à une table qui résulte d'une requête
    Bonjour,

    Je rencontre un problème en voulant améliorer un code qui fonctionne déjà bien:

    Je dispose d'une table initiale "VolumesReels" avec les champs "Client", "Volume", "Ligne" et "Semaine" où je sais quel client a demandé tel volume lors de telle semaine.

    Je remplis une table "tableSommeVolume" avec les champs "sommeVolume", "Semaine" et "Ligne"

    Mon code actuel est capable de me renvoyer le volume total pour chaque semaine (tous clients confondus). Cependant je rencontre un problème au niveau de la ligne quand il y en a des différentes.

    Voici de quoi illustrer mon propos:

    voici mes données:Nom : tableVolumesReels.png
Affichages : 150
Taille : 17,4 Ko
    **VT signifie Vêtements de travail et Ligne = ligne d'une usine**
    Ainsi je devrais avoir:
    -pour la semaine 1 : un enregistrement avec (sommeVolume = 15; semaine = 1 et ligne=Ligne Restauration)
    et un enregistrement avec (sommeVolume = 12; semaine = 1 et ligne=Ligne VT)

    -pour la semaine 2: un enregistrement avec (sommeVolume = 20+13=33; semaine = 2 et ligne=Ligne VT)

    -pour la semaine 3: un enregistrement avec (sommeVolume = 15+10=25; semaine = 3 et ligne=Ligne Restauration)

    Cependant ma table se remplit ainsi:
    Nom : tablesommevolumeAvecLigne.png
Affichages : 91
Taille : 4,3 Ko

    Je pense que le problème vient peut-être du fait que dans la table tableSommeVolume, le champ "semaine" est une clé primaire (ce qui explique pourquoi la Ligne VT de la semaine 1 n'est pas affichée), mais en mettant un ID [numéroAuto] en plus et en retirant la clé primaire de Semaine, j'obtiens le même résultat donc...

    Voilà mon code (exécuté à partir d'un bouton dans un formulaire):

    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
    Private Sub Commande0_Click()
    ' Quelques variables
        Dim rst_2 As DAO.Recordset
        Dim rst As DAO.Recordset
        Dim i As Long
        Dim strsql As String
        ' Ouvrir la table en lecture/écriture
        Set rst = CurrentDb.OpenRecordset("tableSommeVolume", dbOpenDynaset)
        ' Boucler sur le nombre de semaines
        '
        With DoCmd
            .SetWarnings False   'Désactive les alertes
            .RunSQL ("delete * from [tableSommeVolume];")       ' effacement global de toutes les semaines
            .SetWarnings True
        End With
        '
        For i = 1 To 52
            ' Créer un enregistrement dans la table
     
     
            rst.AddNew
            ' Alimenter les champs
        rst("semaine") = i
        '
        strsql = "SELECT  Sum(VolumesReels.Volume) AS SommeDeVolume, VolumesReels.Semaine, VolumesReels.Ligne FROM VolumesReels  GROUP BY VolumesReels.Semaine,VolumesReels.Ligne HAVING VolumesReels.Semaine =" & i & ";"
        '
        Set rst_2 = CurrentDb.OpenRecordset(strsql)
        'Debug.Print strSQL
        '
        If rst_2.RecordCount <> 0 Then
            rst("sommeVolume") = rst_2.Fields(0)    'renvoie le premier argument de la requête
            rst("Ligne") = rst_2.Fields(2)
        Else
            rst("sommeVolume") = 0                  ' si aucun enregistrement alors 0 dans sommeValue
            rst("Ligne") = ""
        End If
     
        ' Valider
        rst.Update
        rst_2.Close
        Next
        rst.Close
        Set rst = Nothing
        Set rst_2 = Nothing
     
        MsgBox "Opération terminée !", vbInformation
    End Sub
    Si quelqu'un a une petite idée je l'en remercie grandement,

    En vous remerciant d'avance de vos réponses,

    Ostrich95

  2. #2
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 878
    Points : 3 467
    Points
    3 467
    Par défaut
    Bonjour ostrich95,

    C'est parce que tu ne boucles pas sur rst_2. Tu te trouves à enregistrer seulement le premier enregistrement puis tu passes à l'autre semaine.

    Bonne journée

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Février 2014
    Messages : 75
    Points : 49
    Points
    49
    Par défaut
    Bonjour Robert1957,

    Je suis désolé mais je ne comprends pas très bien ce que tu veux dire.

    Peux-tu détailler un peu plus ta remarque?

  4. #4
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 878
    Points : 3 467
    Points
    3 467
    Par défaut
    Bonjour ostrich95,

    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
    For i = 1 To 52
            ' Créer un enregistrement dans la table
              rst.AddNew
            ' Alimenter les champs
            '*****Ici tu crées une première ligne
             rst("semaine") = i
            strsql = "SELECT  Sum(VolumesReels.Volume) AS SommeDeVolume, VolumesReels.Semaine, VolumesReels.Ligne FROM VolumesReels  GROUP BY VolumesReels.Semaine,VolumesReels.Ligne HAVING VolumesReels.Semaine =" & i & ";"
     
        Set rst_2 = CurrentDb.OpenRecordset(strsql)
        '*****Ici tu vérifie s'il y a des données
        If rst_2.RecordCount <> 0 Then
            rst("sommeVolume") = rst_2.Fields(0)    'renvoie le premier argument de la requête
            rst("Ligne") = rst_2.Fields(2)
        Else
            rst("sommeVolume") = 0                  ' si aucun enregistrement alors 0 dans sommeValue
            rst("Ligne") = ""
        End If
        '*****Tu viens d'enregistrer le premier record de ta requête
        ' Valider
        rst.Update
        '*****Tu fermes mais comme il y avait plus d'un enregistrement tu as donc perdu l'enregistrement # 2 de la semaine 1.
        rst_2.Close
        Next
    Voici un exemple, à adapter:
    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
    For i = 1 To 52
         strsql = "SELECT  Sum(VolumesReels.Volume) AS SommeDeVolume, VolumesReels.Semaine, VolumesReels.Ligne FROM VolumesReels  GROUP BY VolumesReels.Semaine,VolumesReels.Ligne HAVING VolumesReels.Semaine =" & i & ";"
         Set rst_2 = CurrentDb.OpenRecordset(strsql)
            While rst_2.EOF = False
                rst.AddNew
                ' Alimenter les champs
                rst("semaine") = i
                rst("sommeVolume") = rst_2.Fields(0)    'renvoie le premier argument de la requête
                rst("Ligne") = rst_2.Fields(2)
                ' Valider
               rst.Update
               rst_2.MoveNext
           Wend
        rst_2.Close
        Next
    Bonne journée

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Février 2014
    Messages : 75
    Points : 49
    Points
    49
    Par défaut
    Ok Robert1957 j'ai compris mon erreur! ça marche nickel maintenant!

    Je te remercie grandement et je passe le sujet en résolu!

    Je te souhaite (peut-être) à très bientôt pour un nouveau sujet!

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/06/2010, 04h18
  2. recupérer les info d'une table X pour alimenter une table Y
    Par lemerite dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/09/2008, 12h31
  3. JOIN avec une table qui est dans une AUTRE base access
    Par bastringue dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 30/05/2008, 15h41
  4. [MySQL] Incrémenter la valeur d'un champ (1,2,3 etc)d'une table dés appel d'une page PHP
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/11/2007, 18h08
  5. Réponses: 1
    Dernier message: 12/04/2007, 18h08

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