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

IHM Discussion :

Afficher le résultat d'une requete parametrée dans un sous formulaire


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 91
    Points : 41
    Points
    41
    Par défaut Afficher le résultat d'une requete parametrée dans un sous formulaire
    Bonjour,

    J'ai une requete avec un paramètre ( c'est à dire que lorsque je clique dessus il me demande la date et en fonction, j'ai le résultat ).

    Et de l'autre coté j'ai un formulaire dans lequel j'aimerai afficher les résultats de cetet requete dans un sous formulaire mais sans me demander la date car je récupère déjà la date en appelant une autre requete dans ce fomulaire. ( Je veux pas qu'il demande la date plusieurs fois ).

    En bref je veux envoyer dans mon sous formulaire le résultat d'une requete où je veux lui donner le paramètre et pas qu'il me le demande.

    J'espère avoir été clair.

    D'avance merci de votre aide.

  2. #2
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    Il est en principle impossible d'utiliser une requête avec parametère non défini comme .Recordset d'un formulaire/sous-formulaire.

    Je te suggère d'essayer ceci:

    1. Créer un formulaire frmInputChose, donc .recordset = "qrySelMesDonnees",
    avec un champs de date txtDateEntree indépendant.

    2. Créer la requête qrySelMesDonnees avec SQL suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM tabMaTable WHERE (tabMaTable.MonChampDate = Forms!frmInputChose!txtDateEntree);
    3 Et ouvrir le formulaire frmInputChose, renseigne la date, et à chaque changement de date, faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Forms!frmInputChose.Requery

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    Je pensais plus à un truc du genre :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim qdf1 As DAO.QueryDef
    Set qdf1 = CurrentDb.QueryDefs("MaRequete")
    qdf1.Parameters("[à quelle date ?]") = LaDate
    Me.Fille24.Form.RecordSource = qdf1.SQL
    Mais le probleme c'est que j'ai un message d'erreur :

    "L'expression entrée fait reference à un objet fermé ou supprimé."

    Je comprends pas.

    Merci de m'aider.

  4. #4
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    Je vois que ta date n'a pas besoin d'être dynamique, ton problème est très simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dim strSQL as string
    strSQL = CurrentDb.QueryDefs("MaRequete").SQL
    strSQL = replace(strSQL, "[à quelle date ?]", "#" & LaDate & "#")
    Me.Fille24.Form.RecordSource = strSQL
    En effet tu n'as probablement même pas beson d'une requête prédefinie. Il suffirait de construire une chaîne SQL complète dynamiquement en utilisant LaDate comme donnée .

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonour,

    Si tu veux rester sur une approche Querydef / Recordset, voilà le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim qdf1 As DAO.QueryDef
    Dim oRS As DAO.Recordset
     
    Set qdf1 = CurrentDb.QueryDefs("MaRequete")
    qdf1.Parameters("[à quelle date ?]") = LaDate
    Set oRS = qdf1.OpenRecordset
    Set Me.Fille24.Form.Recordset = oRS
     
    ' /!\  à partir d'ici,
    ' ne pas fermer le Recordset puisqu'il est utilisé par le formulaire.
    ' Mais on peut fermer le QueryDef
     
    qdf1.Close
    Sinon, la proposition de jacou est très bien, mais attention à respecter le format de date de Jet (le moteur de base de données d'Access), à savoir:
    #mm/dd/yyyy#
    _

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    Merci à vous,

    Mais avec les deux méthodes j'ai toujours le même message d'erreur :

    "L'expression entrée fait reference à un objet fermé ou supprimé."

    Et il surligne :
    Me.Fille24.Form.RecordSource = strSQL

    D'ou cela pourrait bien venir, pourtant la requete existe.

    D'avance merci,

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,
    Citation Envoyé par dinette Voir le message
    Mais avec les deux méthodes j'ai toujours le même message d'erreur :

    "L'expression entrée fait reference à un objet fermé ou supprimé."

    Et il surligne :
    Me.Fille24.Form.RecordSource = strSQL
    Si tu te réfères à ma réponse, le code n'utilise pas la propriété RecordSource mais Recordset.
    Peut-être serait-il mieux que le RecordSource ne soit pas renseigné au départ ?

    Par ailleurs, ce message d'erreur donne l'impression que le sous-formulaire n'est pas accessible, peut-être est-il mal renseigné ?

    _

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    J'ai le même message d'erreur avec Recordset, j'ai aussi l'impression que cela vient du sous formulaire qui ne serait pas accessible pourtant j'appuie sur un bouton du formulaire où le sous formulaire apparait pour lancer le code.

    Le sous formulaire, me semble t il, est bien renseigné. Merci de me préciser à quoi je dois faire attention.

    D'avance merci,

  9. #9
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    Ton erreur n'est pas dans la chaîne SQL mais à l'accès d'un objet sous-formulaire fille à un mauvais moment, car non existant.

    Je devine que tu fais cela dans l'évènement Ouverture du formulaire Me (Nom ?), à ce moment-là le sous-formulaire Fille24 (contrôle accessible), mais son contenu Me.Fille24.Form n'est pas encore construit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Form_Open(Cancel as Integer)
      Me.Fille24.Form.RecordSource = strSQL
    End Sub
    Il te faut changer .RecordSource dans l'évènement Ouverture du sous-formulaire Me.Fille24 lui-même:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Form_Open(Cancel as Integer)
    ...
      Me.RecordSource = strSQL
    ...
    End Sub

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    Merci, mais comment lancer le load du sous formulaire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    strSQL = CurrentDb.QueryDefs("MaRequete").SQL
    strSQL = Replace(strSQL, "[à quelle date ?]", "#" & LaDate & "#")
    Me.RecordSource = strSQL
    End Sub
    Merci de l'aide,

  11. #11
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    Citation Envoyé par dinette Voir le message
    Merci, mais comment lancer le load du sous formulaire :
    Tu as intégré en tant que sous-formulaire Fille24 (nom du contrôle dans le formulaire principal ?), un formulaire normal nommé Fille24 ?

    Alors ouvrir en mode création le formulaire normal Fille24, tu fais [Alt]-[F11], tu met le code dans on évènement d'Ouverture:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Form_Open(Cancel as Integer)
      Dim strSQL as String
      strSQL = CurrentDb.QueryDefs("MaRequete").SQL
      strSQL = Replace(strSQL, "[à quelle date ?]", "#" & Format(LaDate, "yyyy-mm-dd") & "#")
      Me.RecordSource = strSQL
    End Sub

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    Je comprends pa très bien, j'ai un formulaire Les chiffres et à l'intérieur j'ai un controle sous-formulaire Fille 24.

    D'avance merci de votre aide,

  13. #13
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    [Fille 24], avant de devenir sous-formulaire, est un formulaire lui-même, il paraît sur la liste des formulaires dans la fenêtre de BDD, sauf s'il est masqué.

    Voici la méthode précise pour repérer qui est caché sous [Fille 24]:

    1. Ouvrir ton formulaire principal [Les chiffres] en mode création.

    2. Pointe ta souris sur le contrôle [Fille 24] et fais un clic-droit de ta souris, sélectionner Propriétés.

    3. Répère "Source objet", qui est en réalité en langage de programmation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![Les chiffres].Controls("Fille 24").SourceObject
    qui donne le nom du formulaire "escalve", ou sous-formulaire.

    4. Ouvre ce formulaire rendu esclave en mode création, et mettre le code VBA dans son évènement d'Ouverture:
    Open().

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    J'essaye mais j'ai un message d'erreur "Nom de formulaire non conforme aux règles d'appelation".

    Merci de votre aide,

  15. #15
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    Citation Envoyé par dinette Voir le message
    J'essaye mais j'ai un message d'erreur "Nom de formulaire non conforme aux règles d'appelation".
    Bonjour, avant de continuer ton travail de développement, je te conseille de
    renommer toutes tes tables, formulaires, états, macros...

    Certains caractères sont déconseillés pour les noms d'objets Access (tables, formuaires, états, macros, modules), noms de variables Visual Basic, tels que: [Espace], caractères accentués, "-" (signe moins)...

    à lire tout d'abord: http://argyronet.developpez.com/office/vba/convention/

    Ton problème est très simple, mais il te faut d'abord un départ rigoureux dans la programmation quelque soit le langage employé (Basic, FORTRAN, C, C++, PHP, Perl, Java...).

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    Cette erreur a été résorbé. J'ai compris comment fonctionnaient les sous-formulaires.

    Par contre maintenant je dois lancer une requete d'une autre base dans une sous-formulaire, mon code je crois est niquel mais c'est au niveau des propriétés de ce sous formulaire que je n'arrive pas.

    Donc ma question est :

    comment remplir les propriétés d'un sous formulaire lorsqu'on lance une requete d'une autre base.


    Merci de votre aide,

  17. #17
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    Bonsoir,

    Je pense que ta question est beaucoup trop vaque pour nous te répondions. J'ai tourné dans tous les sens, je n'ai pas saisi le bon sens. Essaie d'être plus clair et si possible exemple concret.

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    Bonsoir,

    Je fais appel à une base externe, voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set db = DBEngine.OpenDatabase("E:\AutreBase.mdb")
    strSQL1 = db.QueryDefs("MaRequete").Sql
    strSQL1 = Replace(strSQL1, "[entrez la date]", "#" & Format(LaDate, "yyyy-mm-dd") & "#")
    Et je voudrais envoyer ces résultats dans un sous formulaire, et cela je n'y arrive pas.

    Il me met des résultats de la base dans laquelle je travaille.

    D'avance merci de votre aide,

  19. #19
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    Citation Envoyé par dinette Voir le message
    Il me met des résultats de la base dans laquelle je travaille.
    Logique, le SQL est en syntaxe locale par défaut. Le plus simple est d'adopter la méthode de =JBO= en assignant le Recordset. Ceci charge une requête d'une autre BDD sur un formulaire local.

    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
     
    Sub Form_Open(Cancel as Integer)
     
      dim LaDate as Date
     
      Dim db  As DAO.DataBase
      Dim qdf As DAO.QueryDef
      Dim rst As DAO.Recordset
     
      LaDate = Date
     
      Set db = DBEngine.OpenDatabase("E:\AutreBase.mdb")
      Set qdf = db.QueryDefs("MaRequete")
      qdf.Parameters("[entrez la date]") = LaDate
      Set rst = qdf.OpenRecordset()
      Set Me.Recordset = rst
     
      Set qdf = Nothing
     
      Set rst = Nothing
     
      Set db = Nothing
    End Sub

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    Merci à tous, c'est règlé par contre j'avais encore une dernière petite question:

    dans un load d'un formulaire j'ai un "delete * from Table1" et ensuite un "insert into Table1...", mais le problème c'est que ma Table1 est vide lors de l'affichage du formulaire, pourquoi ?


    D'avance merci de votre aide,

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/06/2009, 14h57
  2. Réponses: 1
    Dernier message: 16/01/2008, 11h32
  3. afficher le résultat d'une requete dans le DBGrid
    Par rommel7 dans le forum Bases de données
    Réponses: 6
    Dernier message: 26/04/2007, 19h07
  4. afficher le résultat d'une requete dans une datagrid
    Par awatif dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/09/2006, 14h57
  5. Réponses: 3
    Dernier message: 25/11/2005, 14h51

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