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

Access Discussion :

Exécuter une requête pour chaque enregistrement du formulaire


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 19
    Points : 13
    Points
    13
    Par défaut Exécuter une requête pour chaque enregistrement du formulaire
    Bonjour à tous,

    j'espère que quelqu'un me viendra en aide, ce n'est pas la première fois que j'essaye d'effectuer cette action, et je n'ai jamais rien trouvé sur aucun forum. (Peut être que je cherche mal)

    Mon besoin :
    Dans un formulaire, j'aimerais affecter à un champ la valeur d'une requête pour chaque enregistrement (ligne)
    SAUF que je voudrais que cette requête soit définie en fonction de la valeur d'un autre champ de l'enregistrement.

    Exemple :
    J'ai une table de gestion de planning modulable qui a pour colonnes : ID, phase1, phase2, phase3 etc.
    Il y aura donc dans un mon enregistrement une valeur cachée (de valeur 1, 2,3...), et je voudrais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Dim db As Database
        Dim strSQL As String
        Dim rst As Recordset
        Set db = currentdb    
     
        strSQL = "SELECT phase" + Me.valeurCachee.Value + " FROM Planning WHERE ID = " + Me.ID 
     
        Set rst = db.OpenRecordset(strSQL)
        Me.phase.value = rst(0)
    Concrètement je voudrais séléctionner ma colonne en fonction de Me.valeurCachee

    Le problème c'est que ce code je ne peux l'effectuer qu'à l'ouverture du formulaire, et dans ce cas Access considère que Me.valeurcachee et Me.ID ont pour valeur celles du premier enregistrement, et ce pour tous les enregistrements.

    Ai je été clair? Peut être existe-t-il une manière de contourner ce soucis afin de répondre à mon besoin

  2. #2
    Membre actif
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2016
    Messages : 184
    Points : 275
    Points
    275
    Par défaut
    Dans ta table, tu rajoutes un champs qui équivaut à ton ID automatique ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Ce que je voudrais surtout, c'est pouvoir sélectionner dynamiquement ma colonne.
    Concrètement, pour chaque ligne ça ne soit pas toujours la même colonne qui soit sélectionnée.

    Du coup j'aimerais pouvoir faire SELECT phaseX, avec X qui est la valeur d'un autre champ de l'enregistrement.
    D'où le "SELECT phase" & Me.ValeurCachée.value

    Mais sinon, de manière générale, je ne sais pas comment effectuer une action différente pour chaque enregistrement d'un formulaire :

    Afin d'effectuer mes paramétrages sur mon formulaire, j'utilise l’événement Form_Current. Mais dans ce cas, la valeur de Me.ValeurCachee sera la même pour tous les enregistrement (celle de l'enregistrement qui a le focus), alors que je voudrais qu'elle soit différente pour chaque ligne.

    Je vais vous montrer en image une version simplifiée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub Form_Current()
    Dim strSQL As String
     
        strSQL = "SELECT Process.phase" + CStr(Me.valeurCachee.Value) + _
                " FROM Planning" + _
                " WHERE Planning.ID ='" + Me.ID.Value + "'"
        Me.Requête.value = strSQL
    End Sub
    Et voici le résultat

    Nom : Capture.PNG
Affichages : 298
Taille : 12,1 Ko

    Par exemple pour la ligne où l'ID est 10862001, je voudrais que la requête soit :
    SELECT Process.phase9 FROM Planning WHERE Planning.ID ='10862001'
    et non
    SELECT Process.phase10 FROM Planning WHERE Planning.ID ='1271001'

    Merci beaucoup pour votre aide

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    Bonjour,
    dans un formulaire en mode continu, il est préférable de créer le champ directement dans la propriété Source du formulaire. Si tu utilises une table, il faut partir de cette table pour créer une requête et ensuite ajouter le champ nommé Requete (j'évite l'utilisation des accents dans le nom des champs) qui contiendra :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT Process.phase" & CStr(valeurCachee) & " FROM Planning" & " WHERE Planning.ID =" & ID
    Valeurcachee et ID doivent être des champs de la table je suppose

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Comment ça? la source du formulaire est une requete, je ne peux pas la définir en vba?

    Et quand bien même je ne peux pas faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Recordsource = "SELECT Process.phase" & CStr(valeurCachee) & " FROM Planning" & " WHERE Planning.ID =" & ID
    alors que valeurCachee n'a pas encore été selectionnée. Si?

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    On repart du début :
    pour ce que j'ai compris la Source du formulaire est :
    une table de gestion de planning modulable qui a pour colonnes : ID, phase1, phase2, phase3 etc.
    et tu veux ajouter une colonne contenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT Process.phase" & CStr(valeurCachee) & " FROM Planning" & " WHERE Planning.ID =" & ID
    c'est bien ça ?
    et comment obtiens-tu ValeurCachee ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    La source du formulaire est une requête sur plusieurs table. Je veux faire une jointure entre cette requete et une table de planning (ou intégrer la table de planning dans la requête)

    Les champs de cette table de planning sont ID, phase1, phase2, phase3 .. phase13.

    Sauf que je ne sais pas si pour l'enregistrement X j'aurais besoin de phase1, de phase2 etc. par contre la requete contient cette reponse (valeurCachee).

    du coup je veux selectionné le champ phaseValeurCachee

    si valeurcachee = 3, je veux selectionner phase3

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    Sauf que je ne sais pas si pour l'enregistrement X j'aurais besoin de phase1, de phase2 etc. par contre la requete contient cette reponse (valeurCachee).
    donc, peux-tu poster la requête source ? cela pourrait aider à y voir clair

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Elle est trop complexe, j'ai simplifié au maximum là.

    Ce que je cherche est uniquement comment effectuer une action pour chaque ligne d'un formulaire, et donc en fonction des valeurs de la ligne

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    Elle est trop complexe, j'ai simplifié au maximum là.
    Laisse nous en juger, j'essaie juste d'obtenir des informations complémentaires.
    Ce que je cherche est uniquement comment effectuer une action pour chaque ligne d'un formulaire, et donc en fonction des valeurs de la ligne
    je t'ai répondu qu'il faut le faire dans la requête source car ce n'est pas possible dans un formulaire en mode continu (mode multi-enregistrements)
    Encore une fois, comment obtiens-tu le champ ValeurCache, est-ce un champ calculé dans ta requête source ou dans le formulaire ?
    Si tu refuses de répondre aux questions on va finir par ne plus vouloir t'aider.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Vous avez raison, excusez moi.

    Surtout que je peu simplifier ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ordo.ID, LDP_PLNG_PhaseParType.Ordre
    FROM Article INNER JOIN LDP_PLNG_PhaseParType ON Article.Type_Planning = LDP_PLNG_PhaseParType.Type
    GROUP BY ordo.ID, LDP_PLNG_PhaseParType.Ordre, LDP_PLNG_PhaseParType.Phase
    HAVING (((LDP_PLNG_PhaseParType.Phase)=5));


    Concrètement j'ai une table d'article, une table de phase et une table qui en fonction du type de l'article me donne l'ordre des phase.

    J'ai ensuite une table Process qui, pour chaque article me donne la date de la phase1, de la phase2 etc (mais on ne sait pas quelle est la phase)
    Sauf que je dois connaitre la date d'une certaine phase (la phase controle qui a pour ID 5).

    Du coup, une fois que j'ai récupéré l'ordre X de la phase contrôle pour l'article, je veux faire SELECT phaseX FROM Process

  12. #12
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    Bonjour,
    dernière tentative :
    comment obtiens-tu le champ ValeurCache, est-ce un champ calculé dans ta requête source ou dans le formulaire ?

    après je laisse tomber ...

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Bonjour, le champ Valeur Cache est obtenu par LDP_PLNG_PhaseParType.Ordre.
    Excusez moi pour le dérangement, je suis d'accord que je ne suis pas clair...

    Toujours est il que je suis passé par un autre chemin, j'enregistre la date souhaitée dans la table ordo.

    Après ce que je voulais surtout savoir c'était plus de manière générale, s'il y avait moyen de faire une boucle sur chaque ligne du formulaire

    Merci beaucoup pour votre temps tee_grandbois

  14. #14
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    Bonjour,
    Après ce que je voulais surtout savoir c'était plus de manière générale, s'il y avait moyen de faire une boucle sur chaque ligne du formulaire
    C'est possible mais pas pour un champ indépendant (un champ qui n'a pas de source) dans un formulaire en mode continu (mode multi-lignes).
    C'est pour cela qu'il faut tout calculer dans la requête.

Discussions similaires

  1. Une requête pour chaque ligne de la table
    Par Nasky dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/05/2012, 11h16
  2. [XL-2003] exécuter une macro pour chaque ligne.
    Par visto94 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/07/2010, 13h48
  3. Réponses: 1
    Dernier message: 15/05/2009, 16h01
  4. Réponses: 3
    Dernier message: 10/04/2009, 11h18
  5. Afficher une image pour chaque enregistrements
    Par JLV1975 dans le forum IHM
    Réponses: 5
    Dernier message: 17/03/2008, 11h48

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