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 :

Recordset vide à partir d'une requête [AC-2010]


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Webdesigner
    Inscrit en
    Avril 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2017
    Messages : 19
    Points : 15
    Points
    15
    Par défaut Recordset vide à partir d'une requête
    Bonjour,

    J'explique rapidement un problème insoluble qui m'a causé une calvitie précoce :

    J'ai un formulaire qui contient deux sous-formulaires

    Le premier se présente sous forme table et son recordsource vient d'une requête select basique qui se trouve côté VB
    Le deuxième quand à lui est en mode formulaire et doit prendre la recordsource du premier formulaire.

    Mon but c'est que l'utilisateur ait le premier formulaire en mode table où il peut sélectionner son enregistrement et sur le deuxième formulaire à l'aide d'un findfirst il se positionne sur le même enregistrement où là l'utilisateur modifie ce qu'il veut.
    la présence de ce deuxième formulaire est donc purement pratique.

    Mon soucis : Le deuxième formulaire est complètement vide !
    au moment où l'utilisateur clique sur son enregistrement, côté VB j'affecte la même recordsource au deuxième formulaire j'ouvre un recordset et ce recordset fait un findfirst pour retrouver l'enregistrement du premier formulaire sélectionné par l'utilisateur.
    J'ai utilisé cette méthode sur tout mon projet et ça marche très bien à part sur ce formulaire je ne sait pas pourquoi.

    La requête SQL du premier formulaire marche pourtant très bien c'est juste quand j'affecte cette mème requête au deuxième que le recorset du deuxième formulaire est complètement vide pourtant ça ne devrait pas être le cas.

    Je m'arrache un peu les cheveux avec ça je n'arrive pas à comprendre la logique d'access dans tout ça ^^.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut
    Bonjour.

    Sais-tu que Access offre des formulaires double affichage qui font cela pour toi ?
    Il y a quelques limitations mais c'est peut-être une solution.

    Sinon, as-tu vérifié que la source de données de ton sous-formulaire "Fiche" est bonne (et pas seulement que tu penses qu'elle est bonne) ?

    Est-ce que si tu ouvres ton sous-formulaire fiche, indépendamment du reste, tu vois des données ?
    Si non, est-ce que si tu ouvres la source de données du formulaire "Fiche" à part de tout, tu vois des données ?

    A+

  3. #3
    Membre à l'essai
    Homme Profil pro
    Webdesigner
    Inscrit en
    Avril 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2017
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    Salut marot_r

    Je ne sait pas si au début de ton post tu parles des champs père/fils dans un formulaire, j'ai d'abord pensé à cette méthode pour que les deux sous formulaire traite le même enregistrement.
    Malheureusement j'utilise une clé primaire composite sur ma table elle est constitué de 3 champs différents pour garantir l'unicité et à mes essais access ne m'offrait pas la possibilité de faire une relation père/fils sur 3 valeurs.

    Si j'ouvre mon formulaire fiche indépendamment du reste il n'y a rien car c'est l’événement click sur un enregistrement du formulaire table qui lui affecte sa source côté VB cela dit la requête qui doit normalement lui être affectée elle fonctionne très bien les données s'affiche d'ailleurs dans le 1 er formulaire.

    Voici un bout de code pour affecter la source au formulaire fiche ce code se trouve donc dans l’événement click du formulaire table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ' J'affecte la source du formulaire table 
    Forms![Form_principal]![form_fiche].Form.RecordSource = Forms![Form_principal]![Form_table].Form.RecordSource
     
    Set Rst = Forms![Form_principal]![Form_fiche].Form.Recordset
     
    'Je fais ensuite un findfirst pour trouver l'enregistrement cliqué sur le formulaire table

    Ce que je comprends pas bien c'est que cette méthode à déjà fonctionner sur d'autre formulaires, une piste que j'ai c'est qu'auparavant la source du formulaire fiche était une vue SQL server ( j'utilise des tables linkées ).
    J'ai complètement changé cette source qui traite maintenant une autre table et c'est depuis lors que le bug se produit.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonjour,

    Sans passer par un recordset mais en utilisant les propriétés Pères/Fils, c'est possible.

    1- soit ton formulaire principal F
    2- ton sous-formulaire tabulaire SF1 avec les données identifiés uniquement par Idfiche_FK1.
    3- ton sous-formulaire fiche SF2 non lié avec SF1 mais ayant les mêmes données donc un champ IdFiche_FK2.

    Tu crées une zone de texte dans ton formulaire F nommé "txtFiche1" ayant comme source SF1.Form.IdFiche_FK1.
    Tu définis les propriétés Pères/Fils de ton sous-formulaire SF2 par :
    Pères : txtFiche1
    Fils : IdFiche_FK2

    L'affichage de ton sous-formulaire SF2 sera synchronisé avec ton sous-formulaire SF1.

    Un tuto a été créé ICI pour utiliser cette méthode dans un formulaire de recherche.

    Cordialement.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut
    Bonjour.

    Sais-tu que Access offre des formulaires double affichage qui font cela pour toi ?
    Là je parle d'un nouveau type d'affichage dans Access disponible au moins depuis 2010.
    D'un côté tu as une liste et de l'autre côté tu as une fiche.
    C'est comme marier un formulaire en mode feuille de données et un formulaire en mode individuel dans le même formulaire sans sous-formulaire.
    Pas de programmation, Access s'occupe de tout.

    Access ne m'offrait pas la possibilité de faire une relation père/fils sur 3 valeurs.
    Access peut le faire mais l'assistant ne l'offre pas.
    Il faut faire la liaison soi-même en mettant la liste des champs concernés.
    Quelque chose comme père : [Champ1]; [Champ2]; [Champ3] et fils [Champ1]; [Champ2]; [Champ3].

    A+

  6. #6
    Membre à l'essai
    Homme Profil pro
    Webdesigner
    Inscrit en
    Avril 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2017
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    Aaaah le fait qu'on puisse établir une relation père/fils avec 3 champs m'intéresse beaucoup.

    Cela dit vu que je suis chiant mes formulaires au départ n'ont pas de recordsource, les requêtes source se font sur l’événement afterupdate d'une combobox qui sert de filtre.
    Du coup si j'essaye d'indiquer à Access que je veux une liaison père/fils je reçois illico un message d'erreur : " Can't build a link between unbound forms "

    La solution serait donc de passer via le code VB après que les requêtes sources aient été affectée mais est il possible de configurer la relation père/fils via le code VB ?

    Ps : Je passe toutes mes requêtes via VB car la plupart de mes tables sont énormes et Access étant plutôt lent c'est SQL server qui traite le tout.

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut
    Bonjour.

    La solution serait donc de passer via le code VB après que les requêtes sources aient été affectée mais est il possible de configurer la relation père/fils via le code VB ?
    Bonne question, je n'ai jamais essayé.

    C'est les propriétés :
    • Père : LinkMasterFields
    • Fils : LinkChildFields


    L'aide ne dit pas qu'elles sont accessibles uniquement en mode création donc il est peut-être possible de le faire par code à l'ouverture, probablement une fois les sources précisées.

    A+

  8. #8
    Membre à l'essai
    Homme Profil pro
    Webdesigner
    Inscrit en
    Avril 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2017
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    Je suis en train de faire le test car cela pourrait débloquer mon soucis mais bon peut être je suis nul mais après moulte tentative je ne trouve pas de syntaxe correcte.

    J'ai trouvé qu'on peut utiliser le VB de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonSousFormulaire.LinkMasterFields = "MonChampFormulairePrincipal" 'champ père 
    MonSousFormulaire.LinkChildFields = "MonChampSousFormulaire" ' champ fils
    Alors j'ai tenté quasiment tout ce que je pouvais mais à chaque changement de syntaxe de ma part c'est la même erreur 424 " object required ".
    Y'aurait il un aventurier en VBA qui aurait déjà utilisé ce genre de code ?

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    mes formulaires au départ n'ont pas de recordsource, les requêtes source se font sur l’événement afterupdate d'une combobox qui sert de filtre
    Crée trois champs indépendant IdPere1, IdPere2 et IdPere3 (à adapter) dans ton formulaire principal. Ils te permettront d'utiliser le relation Pere/Fils sans problème.
    Après mise à jour de ton combobox tu les mets à jour et tu actualise ton sous formulaire.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Webdesigner
    Inscrit en
    Avril 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2017
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    Bon alors déjà en premier lieu merci à marot_r, madefemere et DMboup pour vos conseils ça m'a déjà permis d'utiliser les père/fils qui sont moins contraignant que ma méthode de départ.

    Mal grès tout le problème persistait toujours ce sous-formulaire vide sans raison.
    Cela m'a légèrement énervé surtout après avoir fait plusieurs message box et constaté qu'il prenait bien correctement sa requête source mais qu'il s'obstinait à rien m'afficher.
    J'ai donc supprimé le sous form et je l'ai refait de A à Z et là surprise cela fonctionne parfaitement.

    Du coup le mystère reste entier je ne saurais probablement jamais ce qu'il s'est passé mais peu importe ça fonctionne !

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/09/2011, 18h14
  2. Copier à partir d'une requète
    Par Sendo dans le forum Access
    Réponses: 3
    Dernier message: 28/09/2005, 20h13
  3. Réponses: 4
    Dernier message: 16/09/2005, 14h49
  4. Récupérer le code SQL à partir d'une requête
    Par Edith_T dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 23/11/2004, 14h10
  5. Réponses: 2
    Dernier message: 02/11/2004, 12h38

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