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 :

Boucles sur requêtes [AC-2007]


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Dessinateur industriel
    Inscrit en
    Décembre 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dessinateur industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2010
    Messages : 61
    Par défaut Boucles sur requêtes
    Bonjour,

    Je possède la table [AttributsFamille] suivante:

    |IDAttribut|IDFamille|
    __________________
    | 1 | 2 |
    | 2 | 2 |
    | 3 | 2 |
    | 6 | 5 |
    | 8 | 5 |
    | 9 | 5 |
    | 1 | 6 |
    | 5 | 6 |
    __________________

    Je souhaiterais pouvoir récupérer le nombre de chaque IDFamille présent ainsi que l'IDattribut correspondant.
    Le but de ma manoeuvre, est de réussir à récupérer ces données dans un module afin de créer dynamiquement autant de combobox que d'attributs présent pour une famille donnée, et de les remplir en conséquence. Or pour le moment je bloque sur la manière me permettant de récupérer mes données d'entrée.

    Avec mes connaissances actuelles, je me suis dit que je pourrais peut être décomposer le problème. D'une part en créant une requête qui m'afficherait uniquement le nombre d'occurences d'une famille donnée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    req = "SELECT IDattribut, IDfamille FROM AttributsFamille WHERE IDfamille = " + famille
    Auquel cas si famille = 2 j'obtiendrai ceci:

    |IDAttribut|IDFamille|
    __________________
    | 1 | 2 |
    | 2 | 2 |
    | 3 | 2 |
    __________________

    Je souhaite donc dans un premier temps en déduire le nombre de lignes (ici 3):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dcount("IDFamille", "AttributsFamille", "IDfamille =" + famille)
    Jusque la, pas trop de soucis. Seulement maintenant c'est la ou je me perds.
    Je sais donc que j'ai 3 lignes mais comment puis-je faire une boucle qui me renverrait via un Dlookup par exemple, chaque IDAttribut trouvés?

    Voila le code sur lequel je suis en train de travailler:

    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
    Sub CreateAttrib()
     
    Dim i As Integer, j As Integer, ligne As Integer, colonne As Integer
    Set CollAttrib = New Collection
    Dim Cls As AttribEvents
    Dim Cls2 As KitEvents
     
    '##### Ajout CBox des attrib #####
    i = 0
    'Résultat de ma requête permettant de trouver le nombre d'attributs:
    j = Dcount("IDFamille", "AttributsFamille", "IDfamille =" + famille)
     
    'Do While i<> j
        Dim ReqValue as string
    'Je ne sais pas encore comment récupérer l'IDattribut en cours à la place de x:
        ReqValue = "SELECT IDAttribut, Valeur FROM ValeurAttributPossible WHERE IDAttribut = " + x + ";"
        Set CboxAttribut = Form_GPE.Controls.Add("Forms.combobox.1", "", True)
            With CboxAttribut
                .Name = 'récupérer le nom de l'IDattribut en cours
                .Height = 0.556
                .Left = 14
                .Top = 1.698 + (1 * i)
                .Width = 4
    '            .Tag = i
                .RowSource = ReqValue
            End With
    Petite question subsidiaire:
    J'avais déjà fait quelque chose de similaire sous Excel avec un UserForm. Et les valeurs données pour positionner ou dimensionner un control n'était pas en cm. Or Access ne semble utiliser que les cm. J'ai donc pour le moment entré les valeurs en cm. Est-ce correct?

    Merci d'avance pour votre aide.
    Mickaël

    ps: après rédaction et réflexion, je me demande si je n'aurais pas dû mettre ce sujet dans VBA pour Access. Si un modérateur passe par la, et qu'il juge préférable de le déplacer, je l'en remercie par avance.

  2. #2
    Membre Expert
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Par défaut
    Bonjour,
    Cela pourrait se traduire par
    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
    Sub CreateAttrib()
     
    Dim i As Integer, j As Integer, ligne As Integer, colonne As Integer
    Set CollAttrib = New Collection
    Dim Cls As AttribEvents
    Dim Cls2 As KitEvents
    Dim t As DAO.RecordSet
     
    '##### Ajout CBox des attrib #####
    i = 0
    'Résultat de ma requête permettant de trouver le nombre d'attributs:
    j = Dcount("IDFamille", "AttributsFamille", "IDfamille =" + famille)
     
    'Do While i<> j
        Dim ReqValue as string
        Set t = CurrentDB.OpenRecordset("SELECT AttributsFamille.IDAttribut FROM AttributsFamille WHERE AttributsFamille.IDFamille=""" & famille & """")
    
    'Je ne sais pas encore comment récupérer l'IDattribut en cours à la place de x:
        ReqValue = "SELECT IDAttribut, Valeur FROM ValeurAttributPossible WHERE IDAttribut = " + t!IDAttribut + ";"
        Set CboxAttribut = Form_GPE.Controls.Add("Forms.combobox.1", "", True)
        With CboxAttribut
                .Name = 'récupérer le nom de l'IDattribut en cours
                .Height = 0.556
                .Left = 14
                .Top = 1.698 + (1 * i)
                .Width = 4
    '            .Tag = i
                .RowSource = ReqValue
        End With 
        t.Close    
    Ajouter la référence Microsoft DAO au besoin

  3. #3
    Membre confirmé
    Homme Profil pro
    Dessinateur industriel
    Inscrit en
    Décembre 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dessinateur industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2010
    Messages : 61
    Par défaut
    Bonjour,

    Effectivement la solution que tu m'as proposée fonctionne très bien
    J'ai par contre dû modifier 2/3 petites choses suite à des erreurs d'incompatibilité de type qui m'étonnent un peu mais bon. L'essentiel est que ça marche.

    Voici le code modifié:

    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
    Sub CreateAttrib()
     
    Dim i As Integer, ligne As Integer, colonne As Integer
    Dim frmName As String
    Dim t As DAO.Recordset
    Dim Cbbx As Control
     
    i = 0
    'Résultat de la requête permettant de trouver le nombre d'attributs:
    j = DCount("IDFamille", "AttributsFamille", "IDfamille =" + CodeFamille)
     
    Do While i <> j
        Dim ReqValue As String
        Dim IdAttrib As String
        Set t = CurrentDb.OpenRecordset("SELECT AttributsFamille.IDAttribut FROM AttributsFamille WHERE AttributsFamille.IDFamille= " & CodeFamille)
     
        IdAttrib = t!IDAttribut
        ReqValue = "SELECT ValeurAttributPossible.Valeur FROM ValeurAttributPossible WHERE ValeurAttributPossible.IDAttribut =" + IdAttrib
        frmName = "GPE"
     
        DoCmd.OpenForm frmName, acDesign
     
        Set Cbbx = Access.CreateControl(frmName, acComboBox, acDetail)
        With Cbbx
            .Name = t!IDAttribut
            .Height = 0.556
            .Left = 14
            .Top = 1.698 + (1 * i)
            .Width = 4
    '        .RowSource = ReqValue
        End With
        t.Close
        DoCmd.Close acForm, frmName, acSaveYes
        DoCmd.OpenForm frmName, acNormal
    Loop
     
    End Sub
    On peut remarquer que j'ai changé la manière pour créer les contrôles en dynamique. Mais ce n'est pas encore concluant. Je vais créer un sujet spécifique sur ce point.

    Encore merci Helas

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

Discussions similaires

  1. [MySQL] Boucle sur requête JOIN et doublons
    Par gambic dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/01/2012, 15h18
  2. Boucle sur une requête SQL
    Par Sitting Bull dans le forum Pentaho
    Réponses: 4
    Dernier message: 19/05/2010, 14h31
  3. Réponses: 23
    Dernier message: 31/05/2007, 16h09
  4. [MySQL] 2 boucles sur une requête, pourquoi ça marche pas?
    Par MisterMacPhisto dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/04/2007, 12h32
  5. requête qui boucle sur une autre requête
    Par super_dz dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/09/2006, 20h02

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