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 :

Formulaire vide quand requête sans résultat dans RecordSource [AC-2003]


Sujet :

IHM

  1. #1
    FMJ
    FMJ est déconnecté
    Membre averti
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    416
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 416
    Points : 356
    Points
    356
    Par défaut Formulaire vide quand requête sans résultat dans RecordSource
    Semi-résolu disons --> solution de contournement : le plus utiliser le recordset lié au recordsource du formulaire et les champs liés aux contrôles mais utiliser un nouveau recordset déclaré au niveau du formulaire, laissé ouvert, et dont VBA utilise les enregistrements pour remplir (ou non) les contrôles au gré de la navigation de l'utilisateur.
    Bonjour,

    J'ai un problème équivalent à celui décrit dans ce thread :
    http://www.developpez.net/forums/d15...uete-resultat/

    J'ai un formulaire qui se base sur un RecordSource. La requête sous-jacente est calculée dynamiquement en fonction des choix et saisies de l'utilisateur sur des contrôles de filtrage.

    Le problème intervient lorsque le choix de l'utilisateur aboutit à une requête sans enregistrement. Dans ce cas, le comportement d'Access consiste à afficher le formulaire complètement vide, sans aucun contrôle. Bref l'utilisateur ne peut plus modifier son choix, est bloqué et ne peut plus que fermer le formulaire.

    La solution de contournement consiste à vérifier préalablement que la requête renvoie bien des enregistrements et à alors modifier le RecordSource.

    Le problème est que la requête sous-jacente est déjà très lourde et que cela m'emm... de devoir la faire tourner une seconde fois pour pas grand chose.

    Une autre solution consiste à ne plus passer par un RecordSource mais à peupler directement chaque champ. En fait, j'ai testé comparativement. Avec le RecordSource, l'affichage du 1er enregistrement est plus long du fait de l'exécution de la requête "complète" mais ensuite la navigation entre enregistrement est beaucoup plus fluide. Or le mode d'utilisation de l'appli correspond à peu d'actions de filtrage pour beaucoup d'actions de navigation. Donc c'est la solution avec la RecordSource qui est la plus efficace.

    Connaîtriez-vous une autre solution à ce problème ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,
    Citation Envoyé par FMJ Voir le message
    Le problème intervient lorsque le choix de l'utilisateur aboutit à une requête sans enregistrement. Dans ce cas, le comportement d'Access consiste à afficher le formulaire complètement vide, sans aucun contrôle. Bref l'utilisateur ne peut plus modifier son choix, est bloqué et ne peut plus que fermer le formulaire.
    Et si tu déplaces les contrôles par l'intermédiaire desquels l'utilisateur fait ses choix, de la zone détail vers la zone en-tête de formulaire ?

    A+

  3. #3
    FMJ
    FMJ est déconnecté
    Membre averti
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    416
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 416
    Points : 356
    Points
    356
    Par défaut
    Salut

    D'une part, du point de vue design du formulaire, cela ne me conviendra pas bien (il s'agit d'un formulaire d'achat extrêmement condensé) et d'autre part je pense pas que cela ai un impact sur la problème.

    Les contrôles de filtrage sont totalement décorrélés des champs du recordset du formulaire. Ils ne servent qu'à construire la chaîne de caractères correspondant au recordsource du formulaire.


    Autrement j'ai eu une autre idée.

    1. Enregistrement de la chaîne courante du recordset (avant le filtrage) dans un controle caché
    2. A partir des choix de l'utilisateur, construction de la chaîne du recordset
    3. Application de la nouvelle chaîne du record
    4. Si Me.recordcount=0, réapplication de l'ancienne chaîne avec un message d'avertissement "Aucun enregistrement"
    Mais je sais pas si réexécuter une fois le premier recordset coûtera moins de temps et de ressources que d'exécuter sous VBA un nouveau recordset correspondant au nouveau filtrage, recordset qui sera vide ???


    Autrement, si je pouvais avoir directement accès en DAO ou ADO au recordset créé par la chaîne du recordsource, au lieu de lier les contrôles aux champs du recordset, j'appliquerais moi-même les valeurs aux contrôles, lorsque le recordset n'est pas vide. Mais je me suis jamais pencher sur cette question.


    Enfin, ça m'étonne que ce cas de figure ne soit pas prévu. Je pense qu'il existe une option pour gérer ce problème et que je me prends la tête pour pas grand chose !

  4. #4
    FMJ
    FMJ est déconnecté
    Membre averti
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    416
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 416
    Points : 356
    Points
    356
    Par défaut
    Bon, j'ai pas trouvé de réelle solution à cette question.

    J'ai donc fini par déclarer un recordset au niveau du formulaire qui charge les enregistrements à l'application d'un filtrage et qui reste ouvert toute la session. L'utilisateur le parcourt donc lorsqu'il passe d'un enregistrement à l'autre.

    Cela revient à ce qui se passe lorsqu'on déclare un recordsource au niveau du formulaire, sauf qu'au lieu de lier les contrôles avec les champs, c'est le code qui leur affecte une valeur .... si celle-ci n'est pas nulle. Et donc si le filtrage ne renvoie aucun enregistrement, le formulaire n'est pas globalement vide (seuls les contrôles sont nuls).

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

Discussions similaires

  1. [MySQL] résultat vide quand 1 seul enregistrement dans la table
    Par sebcoSprl dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 21/11/2007, 15h16
  2. Problème : requêtes sans résultat
    Par cirtey dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/05/2007, 19h43
  3. Requête sans résultat
    Par lito74 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 15/09/2006, 15h16
  4. [formulaire] vide quand valeurs nulles
    Par gatsu07 dans le forum IHM
    Réponses: 10
    Dernier message: 02/08/2006, 14h00
  5. RecordSource avec une requête sans résultat
    Par temar dans le forum Access
    Réponses: 4
    Dernier message: 23/05/2006, 18h13

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