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

VBA Access Discussion :

Lien entre un formulaire et un recordset DAO


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 5
    Par défaut Lien entre un formulaire et un recordset DAO
    Bonjour à tous,
    je développe actuellement une application professionnelle sensée gérer des entreprises clientes. J'ai conçu l'application de sorte qu'il y ait la base dans un fichier (Entreprises_Base.mdb) et l'application avec les formulaires dans un autre (Entreprises_App.mdb). J'utilise donc largement les objets DAO pour faire le lien entre l'appli et la base. Et c'est là que ca me bloque aussi. Voici le topo:
    J'ai un formulaire avec une liste des entreprises. Lorsqu'on sélectionne une entreprise, des données "basiques" s'affichent dans un cadre à coté de la liste, dans le même formulaire. Lorsqu'on clique sur un bouton que j'ai créé, je récupère la clé primaire de l'entreprise selectionnée et la fait passer à un nouveau formulaire qui affichera toutes les infos.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "entreprise", acNormal, , , acFormReadOnly, acDialog, Me.LstEntreprises.Column(0, Me.LstEntreprises.ListIndex)
    Ensuite, dans la procédure Open du formulaire Entreprise, je récupère cette valeur (si elle existe), j'ouvre un recordset avec une requête conditionnée sur la clé et j'attribue le recordset à la propriété Recordset de mon 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
    If Len(Me.OpenArgs) > 0 Then
     
            Set odb = OpenDatabase(AppPath & "Entreprises_Base.mdb", False, False)
     
            rsQuery = "SELECT * FROM ENTREPRISE WHERE ENTREPRISE_CLE=" & Me.OpenArgs
            Set rstEts = odb.OpenRecordset(rsQuery, dbOpenDynaset)
     
            Set Me.Form.Recordset = rstEts
            Me.Form.Requery
     
            Me.ENTREPRISE_CLE.Value = rstEts.Fields("ENTREPRISE_CLE").Value
            Me.ENTREPRISE_CP.Value = rstEts.Fields("ENTREPRISE_CP").Value
     
            rstEts.Close: Set rstEts = Nothing
            odb.Close: Set odb = Nothing
        Else
            MsgBox "Nombre de paramètres insuffisants, l'ouverture des détails est impossible."
            DoCmd.Close
        End If
    Ce que je n'ai pas et que je souhaiterai avoir, c'est un remplissage "automatique" des champs de mon formulaire. Je m'explique: dans les propriétés d'un champ texte on trouve la Source qui peut être un champ et qui est très utile si la source du formulaire est une table. Mais ca ne fonctionne pas si la source du formulaire est définie sur un recordset.

    Alors ma question est la suivante: comment remplir mes champs texte sans avoir à taper pour chacun (j'en ai un bonne centaine) la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.NOM_DU_CHAMP.Value = rstEts.Fields("NOM_DU_CHAMP").Value
    Merci beaucoup de votre aide et n'hésitez pas si vous avez des questions!

  2. #2
    Membre Expert
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 946
    Par défaut
    Bonjour

    Question bête :
    Pourquoi passez-vous un recordset comme source du formulaire et pas la requête SQL (qui sert à ouvrir le recordset)?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rsQuery = "SELECT * FROM ENTREPRISE WHERE ENTREPRISE_CLE=" & Me.OpenArgs
            Set rstEts = odb.OpenRecordset(rsQuery, dbOpenDynaset)
     
            Set Me.Form.Recordset = rstEts
    Il est tout à fait possible d'ouvrir le formulaire ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rsQuery = "SELECT * FROM ENTREPRISE WHERE ENTREPRISE_CLE=" & Me.OpenArgs
     
     
            Set Me.RecordSource = rsQuery
    Ensuite, il suffit que votre formulaire contienne des contrôles ayant comme source les différents champs de la requête source.

    Pierre

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 5
    Par défaut
    Merci pier.antoine pour votre réponse. C'aurait été si simple de faire comme vous le dites! Mais comme j'ai pu l'expliquer, mes données sont dans un autre fichier que celui de l'application. Donc impossible de faire une requête directement sur une table sachant qu'il n'y a pas de tables physiquement dans ma partie applicative.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 5
    Par défaut
    En fait j'ai trouvé la solution à force de bidouiller. Il faut que le recordset à utiliser dans le formulaire soit déclaré en public et non directement dans la procédure d'ouverture du formulaire.

    Voilà, merci encore à pier.antoine d'avoir proposé son aide.

  5. #5
    Membre Expert
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 946
    Par défaut
    On pouvait sans doute contourner le problème en important les données de la table externe dans une table locale (à détruire ensuite).

    Pierre

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

Discussions similaires

  1. Lien entre un formulaire et un état
    Par b_steph_2 dans le forum Access
    Réponses: 4
    Dernier message: 02/02/2006, 11h19
  2. lien entre un formulaire et un état
    Par artnquaist dans le forum Access
    Réponses: 1
    Dernier message: 02/01/2006, 09h34
  3. Réponses: 4
    Dernier message: 25/10/2005, 11h23
  4. Réponses: 5
    Dernier message: 12/10/2005, 11h29
  5. liens entre sous formulaires
    Par delpiero10 dans le forum Access
    Réponses: 1
    Dernier message: 07/09/2005, 23h09

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