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 :

Tester si un sous-formulaire affiche des données


Sujet :

IHM

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Points : 129
    Points
    129
    Par défaut Tester si un sous-formulaire affiche des données
    Bonjour !

    Une question complémentaire... dans l'optique de résoudre le problème décrit ici.

    Voici un contexte simplifié :
    - Formulaire principal : 1 champ "Article"
    - Sous-formulaire : 1 champ "Total"
    => Fonctionnement : lorsque je saisis une valeur dans le champ "Article", le sous-formulaire apparaît avec le champ "Total" à jour grâce à la relation père/fils.

    Le problème : dans une procédure, je fais référence au champ "Total" comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub test()
        MsgBox Nz(Me.Ss_Form.Form.Total.Value, 0)
    End Sub
    Mais lorsqu'il n'y a pas de valeur correspondant à l'article (champ père) dans la source de données du sous-formulaire, on obtient l'erreur '2427 : Expression sans paramètre'.

    Est-il possible tester directement (c'est-à-dire sans recordset) si le sous-formulaire affiche des données ?

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 548
    Points
    24 548
    Par défaut
    Bonjour,

    Intercepte l'erreur 2427 tout simplement...

    Cordialement,

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Points : 129
    Points
    129
    Par défaut
    Bonjour,

    Effectivement ça parait logique mais je cherche s'il n'y a pas une autre solution car cette erreur se produit dans 2 cas de figure :
    - cas 1 : lorsqu'il n'y a pas de données à afficher dans le sous-formulaire (cas dont je parle ici)
    - cas 2 : lorsque le sous-formulaire va bien contenir des données mais n'a pas encore eu le temps de s'actualiser (cas dont je parle dans ce post)

    J'essaie donc de trouver un moyen de distinguer le traitement de ces 2 situations :
    - cas 1 : on arrête la procédure et on renvoie un message d'erreur
    - cas 2 : on patiente (avec une boucle DoEvents) jusqu'à ce que le sous-formulaire s'actualise

  4. #4
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Bonjour,

    J'avais trouvé cet exemple dans l'aide Acces e Microsoft (rubrique "comment faire ... dans Acces 2007)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Form_Current()
     
        With Me![Orders_Subform].Form
     
            ' Check the RecordCount of the Subform.
            If .RecordsetClone.RecordCount = 0 Then
     
                ' Hide the subform.
                .Visible = False
     
            End If
        End With
    End Sub
    Tu devrait pouvoir adapter ce code pour empêcher l'exécution de ton instruction.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Points : 129
    Points
    129
    Par défaut
    Bonjour et bon début de semaine !
    Je ne suis qu'à moitié convaincu car cette méthode implique un recordset (mes sources de données sont des requêtes parfois compliquées et longues à exécuter) mais en l'absence de meilleure proposition, je vais voir ce que ça donne...

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    Si le problème est d'obtenir une valeur correcte ou "quelque-chose-par-défaut quoi-qu'il-arrive" , j'utilise ceci plutôt que Nz :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function NullToZero(anyValue As Variant) As Variant
    On Error GoTo error
        If IsNull(anyValue) Then
            NullToZero = 0
        Else
            NullToZero = anyValue
        End If
    Exit Function
    error:
    NullToZero = 0
    End Function
    Ici, quoi qu'il arrive, j'obtiens une réponse.
    Nz() fonctionne pour une valeur "Null" mais pas si cette valeur n'existe pas ou, dans ton cas, si elle n'existe pas encore.
    Ps A utiliser en connaissance de cause !

  7. #7
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 548
    Points
    24 548
    Par défaut
    Bonjour,

    Pas d'interception d'erreur, pas d'utilisation de recordset.

    Concernant la solution proposée par Dumas-lbr je la trouve parfaitement valable.
    Elle ne te convainc pas et pourtant si on analyse les objets utilisés on s'aperçois qu'il utilise le recordset du formulaire. Donc l'argument selon lequel cela pourrait poser des problèmes (de lenteurs ?) avec des requetes complexes ne tient pas trop la route.

    En effet le recordset du formulaire est déjà ouvert, et ces propriétés sont déjà intialisées.

    Cordialement,

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par loufab Voir le message
    Bonjour,

    Pas d'interception d'erreur, pas d'utilisation de recordset.
    Ouais je sais c'est pas très pratique...

    Citation Envoyé par loufab Voir le message
    Concernant la solution proposée par Dumas-lbr je la trouve parfaitement valable.
    Elle ne te convainc pas et pourtant si on analyse les objets utilisés on s'aperçois qu'il utilise le recordset du formulaire. Donc l'argument selon lequel cela pourrait poser des problèmes (de lenteurs ?) avec des requetes complexes ne tient pas trop la route.

    En effet le recordset du formulaire est déjà ouvert, et ces propriétés sont déjà intialisées.

    Cordialement,
    Je n'avais pas percuté cette subtilité en ce qui concerne le clone du recordset. C'est bon à savoir et je retiens pour plus tard.
    Malheureusement, la solution de dumas.blr ne fonctionne pas dans le cas 2 (lorsque le sous-formulaire va bien contenir des données mais n'a pas encore eu le temps de s'actualiser).

    N'ayant toujours pas de solution, en attendant je fonctionne avec des recordsets... La question reste néanmoins en suspend et je ne mets pas le flag "Résolu" au cas où quelqu'un ait une solution à proposer à l'avenir.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/03/2008, 20h52
  2. jsp+afficher des données sous forme de graphes
    Par oasma dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 25/03/2007, 13h24
  3. afficher des données dans un sous formulaire
    Par issam16 dans le forum Access
    Réponses: 3
    Dernier message: 26/06/2006, 15h36
  4. Deux sous formulaires dans Formulaire: Maj des données
    Par capitaine dans le forum Access
    Réponses: 4
    Dernier message: 24/05/2006, 12h09
  5. Réponses: 3
    Dernier message: 03/01/2006, 21h43

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