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

Requêtes et SQL. Discussion :

Ne pas faire apparaitre message erreur case à cocher


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 383
    Par défaut Ne pas faire apparaitre message erreur case à cocher
    Bonjour à toutes, bonjour à tous,

    Grâce à Marot_r et Tofalu, je renseigne 2 tables T_anciennes_valeurs et T_nouvelles_valeurs pour stocker les données d'un enregistrement avant et après modifications.

    J'en ai tiré une requête pour ne faire apparaitre que la nouvelle valeur du ou des champs modifiés (pour ne pas compliquer l'exploitation par des utilisateurs de base, en l’occurrence les adhérents d'une association à qui l'on enverra les modifs des coordonnées).

    Cela donne par exemple, pour le champ ville :
    Ville:VraiFaux(T_Nouvelles_valeurs!Ville<>T_Anciennes_valeurs!Ville;T_Nouvelles_valeurs!Ville;"")

    Ainsi, si la ville change, seul le nom de la nouvelle apparait.
    Cela fonctionne bien pour les champs "normaux".

    Cela se complique pour les cases à cocher.
    En effet, si la case est cochée, Access renvoie -1, sinon 0.
    Pour éviter cela j'ai modifié ma formule pour faire apparaitre "oui" ou "non".
    Mais dans ma requête, si le champ "case à cocher" [Retraite] n'est pas modifié pour l'enregistrement en question, [Retraite] devrait être vide.

    Avec la formule ci-dessous, cela me retourne #Erreur.
    Comment ne rien avoir du tout si aucune modif n'est faite sur ce champ ?
    Pour info j'ai aussi essayé EstNull en début ou en fin de formule sans résultat.

    Retraité: VraiFaux(EstVide(VraiFaux(VraiFaux([T_Nouvelles_valeurs]![Retraite]<>[T_Anciennes_valeurs]![Retraite];[T_Nouvelles_valeurs]![Retraite];"")=-1;"oui";VraiFaux(VraiFaux([T_Nouvelles_valeurs]![Retraite]<>[T_Anciennes_valeurs]![Retraite];[T_Nouvelles_valeurs]![Retraite];"")=0;"non")));"";VraiFaux(VraiFaux([T_Nouvelles_valeurs]![Retraite]<>[T_Anciennes_valeurs]![Retraite];[T_Nouvelles_valeurs]![Retraite];"")=-1;"oui";VraiFaux(VraiFaux([T_Nouvelles_valeurs]![Retraite]<>[T_Anciennes_valeurs]![Retraite];[T_Nouvelles_valeurs]![Retraite];"")=0;"non")))

    Je vous mets aussi le code SQL
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_Anciennes_valeurs.MiseAJour, T_Anciennes_valeurs.N°Adh, IIf(T_Nouvelles_valeurs!Adresse<>T_Anciennes_valeurs!Adresse,T_Nouvelles_valeurs!Adresse,"") AS Adresse, IIf(T_Nouvelles_valeurs!Ville<>T_Anciennes_valeurs!Ville,T_Nouvelles_valeurs!Ville,"") AS Ville, IIf(IsEmpty(IIf(IIf([T_Nouvelles_valeurs]![Retraite]<>[T_Anciennes_valeurs]![Retraite],[T_Nouvelles_valeurs]![Retraite],"")=-1,"oui",IIf(IIf([T_Nouvelles_valeurs]![Retraite]<>[T_Anciennes_valeurs]![Retraite],[T_Nouvelles_valeurs]![Retraite],"")=0,"non"))),"",IIf(IIf([T_Nouvelles_valeurs]![Retraite]<>[T_Anciennes_valeurs]![Retraite],[T_Nouvelles_valeurs]![Retraite],"")=-1,"oui",IIf(IIf([T_Nouvelles_valeurs]![Retraite]<>[T_Anciennes_valeurs]![Retraite],[T_Nouvelles_valeurs]![Retraite],"")=0,"non"))) AS Retraité
    FROM T_Anciennes_valeurs LEFT JOIN T_Nouvelles_valeurs ON T_Anciennes_valeurs.N°Adh = T_Nouvelles_valeurs.N°Adh
    ORDER BY T_Anciennes_valeurs.MiseAJour DESC;

    Merci de votre aide.

    A+

    C15

    PS L'intitulé n'est peut-être pas le meilleur, n'hésitez pas à me faire une autre proposition

  2. #2
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    C15nantes,

    Ou l'art de se compliquer la vie

    Bon ne mélangeons pas torchons et serviettes

    Pour reprendre ton post et après lecture et relecture, je pense qu'il y a confusion entre état d'une variable et matérialisation de son changement.

    Pour être clair dans la partie adresse, tu contrôles le changement d'adresse et affiche le résultat que lorsque changement.

    Dans le cas d'un CheckBox, tu souhaites vérifier le changement et dans ce cas tu appliques la même règle en changeant le type d'affichage :

    VraiFaux(T_Nouvelles_valeurs!Retraite<>T_Anciennes_valeurs!Retraite;"Changement";"")

    Dans ce cas VraiFaux te renvoie l'état d'un changement pas le contenu de la variable (si retraité ou pas). Parce que si tu souhaites visualiser la valeur de ton champ, dans le cas ou il n'y a pas de modification ton affichage sera toujours vide. Je ne vois donc pas l'intérêt à afficher l'état de ton champ que dans un seul cas.

    Me suis je fait bien comprendre...

    Sinon on pose un tableau de décision et tu m'indiqueras ce que tu souhaites afficher dans l'ensemble des conditions.

    JimBoLion

  3. #3
    Membre éclairé Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 383
    Par défaut ne pas faire apparaitre message erreur case à cocher
    Bonjour,

    Cela me fait de la peine...mais tu as raison, comme sur Excel, je n'y vais pas toujours par le chemin le plus simple

    J'ai trouvé ceci qui semble répondre à mon problème :
    Retraité: VraiFaux(T_Anciennes_valeurs!Retraite<>T_Nouvelles_valeurs!Retraite Et T_Nouvelles_valeurs!Retraite=-1;"oui";VraiFaux(T_Anciennes_valeurs!Retraite<>T_Nouvelles_valeurs!Retraite Et T_Nouvelles_valeurs!Retraite=0;"non"))

    Par contre si je fais 2 modifs successives sur un même enregistrement, je double les lignes de ma requête

    Par ailleurs, j'ai un doute sur la jointure entre mes 2 tables (via N°Adherent) 1, 2 ou 3 ?
    et sutr Type Recordset (dynamique, globale ou instantané) ?

    Merci de ton aide.

    A+

    C15

  4. #4
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    C15nantes,

    Normal

    Si toute l’historisation de tes changement sont enregistrées dans ta table T_Anciennes_valeurs, il est normal (et fort heureusement d'ailleurs !) que cela te double les lignes.

    Pour cela, il te faux créer une requête de regroupement dans laquelle tu dois prendre le max de ta mise à jour (si cette date est enregistrée).

    Pour la jointure cela me semble cohérent mais sans le modèle je ne peux être affirmatif à 100%.

    Sur le type de Recordset cela veut dire que ta requete est généré à partir d'un code VBA ?

    JimBoLion

  5. #5
    Membre éclairé Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 383
    Par défaut ne pas faire apparaitre message erreur case à cocher
    Rebonjour,

    Ma requête n'est pas générée à partir d'un code VBA.
    J'en reviens à ma question : faut-il être en MAJ globale, dynamique ou instantané ?

    Par contre je ne comprends pas, les nouvelles données de ma T_nouvelles_valeurs n'apparaissent pas toutes dans ma requête

    Merci de ton aide.

    A+

    C15

  6. #6
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    C15nantes

    En Feuille de réponse dynamique c'est parfait ! Mais cela ne changera rien à ton problème.

    L'explication des propriétés ici :

    http://office.microsoft.com/fr-fr/ac...001232788.aspx

    Ta modification sur <Retraité> a t'elle fonctionnée ?

    Peux tu m'envoyer un exemple de ta base (allégée ou modifiée si données sensibles) qu'on analyse tous ces petites problèmes.

    1. Doublons
    2. T_nouvelles_valeurs n’apparaît pas dans le résultat


    A bientôt

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/12/2011, 19h04
  2. [Formulaire] Message d'erreur case à cocher
    Par atlantideD dans le forum IHM
    Réponses: 1
    Dernier message: 06/07/2007, 19h12
  3. Réponses: 2
    Dernier message: 18/06/2007, 15h11
  4. Débutant - Ne pas faire apparaitre une msgbox
    Par MelaAllIn dans le forum Access
    Réponses: 3
    Dernier message: 08/01/2007, 15h23
  5. Réponses: 4
    Dernier message: 16/10/2006, 12h17

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