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 :

paramètre d'une requête paramétrée


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut paramètre d'une requête paramétrée
    Bonjour,

    Est-il possible de se servir du paramètre d'une requête paramétrée dans une expression findrecord comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Open(Cancel As Integer)
    DoCmd.FindRecord forms![frmSaisieContrat]![frmPointage].form![N__SEMAINE] = [Tapez un n° de semaine de 1 à 52]
    End Sub
    C'est pour ouvrir un sous-formulaire directement sur l'enregistrement souhaité. Ca ne marche pas. Je dois avoir un problème de syntaxe.

    Merci.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    J'ai testé aussi ça. Il me dit qu'il ne trouve pas le champ [Tapez un n° de semaine de 1 à 52]. quelle est la syntaxe pour nommer le champ paramétrée d'une requête ??????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With Forms![frmSaisieContrat]![frmPointage]
            .SetFocus
            ![N__SEMAINE].SetFocus
            DoCmd.FindRecord Forms![frmSaisieContrat]![Tapez un n° de semaine de 1 à 52]
        End With

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    Excusez moi. J'ai u mal à formaliser ma demande : quelle est la syntaxe pour nommer le résultat choisi du paramètre d'une requête paramétrée ?

    Ce résultat doit alimenter une macro.

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Rien compris désolé

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    Je vais essayer d'être plus clair mais le truc est tordu.

    Prenons un formulaire et un sous-formulaire lié. Le formulaire est basé sur une requête paramétrée. Voici le code SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PARAMETERS [Tapez un n° de semaine de 1 à 52] Short;
    SELECT Contrat.N__CONTRAT, Point.n°pointage, Point.N__SEMAINE, Point.DU, Point.AU, Intérim.NOM__PR_NO
    FROM Intérim INNER JOIN (Contrat INNER JOIN Point ON Contrat.N__CONTRAT = Point.N__CONTRAT) ON Intérim.n°Interim = Contrat.N°Interim
    WHERE (((Point.N__SEMAINE)=[Tapez un n° de semaine de 1 à 52]));
    A l'ouverture du formulaire basé sur la requête paramétrée, on doit être positionné sur l'enregistrement dont le N° de semaine est égal au paramètre de la requête ?

    Par exemple, le formulaire principal (contrat n°10 par exemple) peut contenir plusieurs pointages dans sous-formulaire (pointage semaine12, pointage semaine 13, ...). Ma requête paramétrée me fait ressortir tous les contrats qui comportent un pointage correspondant à la semaine que j'ai demandé (ex : pointage semaine 13). Je voudrais qu'il se positionne automatiquement sur le pointage correspondant à la bonne semaine.

    Pour ce faire, j'ai utilisé le code qui est dans les messages supérieurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Open(Cancel As Integer)
    DoCmd.FindRecord forms![frmSaisieContrat]![frmPointage].form![N__SEMAINE] = [Tapez un n° de semaine de 1 à 52]
    End Sub
    Vu que la requête est à l'ouverture du formulaire principal, je ne sais pas comment écrire le champ paramétré dans mon code ci-dessus pour qu'il comprenne que ce n'est pas un champ classique :

    [Tapez un n° de semaine de 1 à 52]

    ou

    forms![frmSaisieContrat]![frmPointage].form![Tapez un n° de semaine de 1 à 52]

    ou autre ...

    J'espère que c'est un peu plus clair.

    Je veux juste pouvoir me servir dans un code VBA du résultat du champ paramétré d'une requête.

  6. #6
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Pourquoi ne pas tout simplement utiliser la notion de champs pères/champs fils du formulaire.

    Là ce qui fait le lien entre les deux, ce n'est pas ce que tu as saisis mais le champ "N__SEMAINE". Apparement tu fais l'amalgame entre données et interface utilisateur.

    Pour résumer (dans les propriétés du cadre de sous formulaire) :

    Champ père : N__semaine de la table (ou requête) du formulaire principal
    Champ Fils : N__Semaine de la table du sous-formulaire

  7. #7
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    GENIAL !!!!!!!!!!!!!!!!

    Merci infiniment. C'était tout simple mais ça fait trois jours que j'ai le nez dedans et je ne vois plus rien.

    Félicitations pour ce que vous faites pour nous.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    J'y ai cru ... Malheureusement en faisant les tests, vu que mon sous-formulaire est lié à la requête, il fonctionne très bien mais n'a plus aucun rapport avec le formulaire principal.

    Je vais me chercher une corde ..

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    Je précise qu'un contrat comporte plusieurs pointages, c'est à dire qu'un enregistrement du formulaire a plusieurs enregistrements différents (semaine différente) dans le sous-formulaire.

    Je dois pouvoir sortir tous les gens qui travaillaient la semaine 32.

    Les contrats vont sortir dans mon formulaire principal (avec chacuns plusieurs pointages) et je veux voir apparaitre en premier les pointages de la semaine 32 pour chaque contrat.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    J'ai remis le champ père et fils du sousformulaire comme avant. Cela remarche. Mais vu qu'il me sort plusieurs pointages (semaines) par contrat (dont le bon), je veux pouvoir afficher ce bon en premier.

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    ajoute un select[nosemaine] dans tes champs

  12. #12
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    Excuse moi mais ou ? dans quels champs ?

  13. #13
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    Tout marche. Il faut juste que l'enregistrement du sous-formulaire qui apparait en premier soit celui qi est demandé à louverture du formulaire.

    Ex : on ouvre le formulaire. Une box s'ouvre "Taper un n° de semaine entre 1 et 52". Le formulaire s'ouvre sur tous les gens qui ont un contrat durant cette période. Pour chaque contrat, il y a plusieurs semaines de travail qui chacune sont distinctes et appelées POINTAGES. Il va me sortir pour la semaine 30 :
    - contrat 1 : pointage.semaine 12, pointage.semaine 30, pointage.semaine 45
    - contrat 5 : pointage.semaine 30, pointage.semaine 10, pointage.semaine 15
    - contrat 7 : pointage.semaine 26, pointage.semaine 30, pointage.semaine 11

    Bref tous les gens qui ont travaillés la semaine du 30. Ca je l'obtiens. Maintenant ce qu'il me faut c'est faire apparaitre en premier, pour chaque contrat, le pointage.semaine 30.

    Ainsi quand je vais faire défiler les contrats, j'aurai :

    - contrat 1 : pointage.semaine 30, pointage.semaine 12, pointage.semaine 45
    - contrat 5 : pointage.semaine 30, pointage.semaine 10, pointage.semaine 15
    - contrat 7 : pointage.semaine 30, pointage.semaine 26, pointage.semaine 11

    Est-ce qu'avec ça on peut y arriver ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DoCmd.GoToRecord , , acFirst

  14. #14
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    A l'ouverture de mon formulaire, la requête paramétrée qui sert à le construire me demande le n° de semaine que je veux afficher.
    Suivant ce que je tape, le formulaire s'ouvre avec tous les enregistrements

    Je ne veux voir en premier que les enregistrements du n° de semaine que j'ai tapé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.FindRecord [N__SEMAINE] = rqtContrat2![Tapez un n° de semaine de 1 à 52]
    La syntaxe est-elle bonne ? Il me dit qu'il manque un objet.

    Pourquoi ???

  15. #15
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Points : 27
    Points
    27
    Par défaut
    Je dois vraiment mal me faire comprendre car ma demande est toute simple.
    Prenez le résultat de ma requête : J'avais demandé admettons la semaine 10.
    3 contrats sortent :

    M.PAUL, contrat n°100, pointage semaine 10
    M.PIERRE, contrat n°20, pointage semaine 9, pointage semaine 10
    M.LUC, contrat n°21, pointage semaine 10, pointage semaine 11

    Les pointages sont en fait le sous-formulaire du formulaire contrat : un contrat peut avoir plusieurs pointages.

    Ma requête m'a sorti 3 résultats corretcs car chacun comporte la semaine 10.
    Mais quand je les fais défiler avec des boutons flèches "enregistrement suivant", pour M.PAUL pas de soucis il n'a qu'un pointage.
    Pour M.LUC, pas de soucis car on voit le pointage semaine 10 en premier.
    Par contre, mon soucis est sur M.PIERRE, qui a deux pointages et on voit le pointage semaine 9 en premier.

    J'essaie désespérement de lui dire d'afficher en premier les pointages semaine 10 (la semaine que je demande à l'ouverture du formulaire grâce à la requête paramétrée qui lui sert de source).

    Sur l'ouverture du sous-formulaire frmPointage, voilà ce que j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DoCmd.FindRecord rqtContrat2![Tapez un n° de semaine de 1 à 52]
    With Forms![frmSaisieContrat]![frmPointage]
            .SetFocus
           ![N__SEMAINE].SetFocus
            DoCmd.FindRecord rqtContrat2![Tapez un n° de semaine de 1 à 52]
    End With
    Il me dit : "objet requis". Il ne voit pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rqtContrat2![Tapez un n° de semaine de 1 à 52]
    . Je suppose que c'est à cause de la syntaxe. Et je vous demande comment écrire ceci.

    Merci pour tout.

    Fred

Discussions similaires

  1. Afficher paramètre d'une requête paramétrée
    Par F.ORTIZ dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 18/07/2013, 22h38
  2. [WD10] Afficher le résultat d'une requête paramétrée dans une tabe
    Par Menadel dans le forum WinDev
    Réponses: 8
    Dernier message: 23/05/2012, 17h58
  3. Réponses: 3
    Dernier message: 27/01/2010, 14h29
  4. [OpenOffice][Base de données] Afficher des paramètres d'une requête paramétrée dans un formulaire
    Par ggnore dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 02/09/2009, 11h37
  5. Réponses: 2
    Dernier message: 30/12/2007, 15h31

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