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 :

Dates vides & requête [AC-2016]


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2015
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Dates vides & requête
    Bonjour
    Novice sur Access, voilà plusieurs jours que je galère et je n'ai pas trouvé mon bonheur dans la FAQ.
    J'ai une table principale contenant des dossiers de formation : 1 dossier par stagiaire.
    J'ai une table secondaire contenant les remboursements des formations (plusieurs remboursements possibles pour un même dossier stagiaire avec montant HT et dates de remboursement).

    Je lance une requête associant les 2 tables, sans préciser de date de remboursement, et là, pas de problème, ma requête affiche bien tous les enregistrements, qu'il y ait ou non un remboursement (ma jointure entre les deux tables est de type 2). (les dossiers sans remboursement apparaissent avec un montant à zéro, et j'ai bien mes totaux en bas de ma requête indiquant le coût total des formations, les montants remboursés, etc...)

    Là où ça se corse, c'est lorsque je rentre une date limite de remboursement dans ma table secondaire (je dois produire un état financier mensuel qui ne doit comporter que les enregistrements arrêtés en fin de mois). Exemple : je souhaite afficher la requête arrêtée à fin septembre ; je ne dois afficher que les formations et les remboursements arrêtés à fin septembre. Or ma table contient bien entendu les formations et les remboursements des mois suivants qui sont saisis au fil de l'eau.
    Cette fois, ma requête n'affiche que les enregistrements qui ont une date de remboursement renseignée, et mes totaux sont faux. En fait ils correspondent aux dossiers pour lesquels il y a un remboursement donc une date.

    Je suppose qu'Access considère le champ date non renseigné comme "vide".

    Comment faire pour afficher tous les enregistrements, que la date soit renseignée ou non ?

    Je ne suis pas certaine d'avoir été claire.

    Merci aux bonnes âmes qui se pencheront sur mon problème.

    Bonne journée à tous.

  2. #2
    Modérateur

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

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

    Oui il est possible que Access ne "voit" pas les nuls (les champs vides).
    Les nuls sont un peu pénibles en Access, en théorie, Nul et n'importe quoi donne nul mais en pratique Access peut les traiter comme des nuls, des 0 ou des chaîne vides et il n'est pas toujours évident de savoir quand cela va se produire.

    Il est toujours prudent de traiter soi-même les nuls pour éviter les mauvaises surprises.

    Tu peux faire la chose de 2 manières :
    1. Demander la sélection des nuls :
      Là tu dis explicitement à Access que les nuls sont à prendre, dans ta colonne date tu mets sur une seconde ligne (c'est un "ou") : is Null. Tu peux aussi mettre sur la même ligne que ton critère de date Or Is Null. Ton test reseemblerai à <= [DateLimite] or Is Null. Access va te traduire cela en français.
    2. Remplacer les nuls :
      • Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Nz([TonChamp]; DateSerial(9999, 12, 31))
        Attention Nz() fait perde le type (ce n'est plus une date mais un variant donc quelque chose d'indéterminé qui peut être n'importe quoi comme un chaîne de carctères). Et personnellement j'ai eu une mauvaise expérience avec un Nz qui a fait sauter les décimales de mes nombres, donc utiliser Nz() avec précautions.
      • Code : Sélectionner tout - Visualiser dans une fenêtre à part
        iif(IsNull([TonChampDate]);DateSerial(9999, 12, 31);[TonChampDate])
        iif() va tester la condition (IsNull([TonChampDate])) et te donner soit la valeur du 2ième argument (DateSerial(9999, 12, 31)) si vrai, soit la valeur du 3ième argument ([TonChampDate]) si faux.
        C'est un peu plus lourd comme syntaxe mais tu évites les problèmes que j'ai mentionnés pour Nz().

      Note : DateSerial() te retourne la date correspondante ici le 31 décembre 9999. Je la préfère à #9999-12-31# qui fait la même chose mais avec une ambiguité sur ce qui est le jour ou le mois dans certains cas comme le #01/02/9999#. Il y a une chance que Access pense que c'est le 2 Janvier et pas le 1er Février. Avec DateSerial on sait ce qui est les mois et le jour.


    Si mes explications te paraissent abscondes, n'hésite pas à demander des explications en précisant le ou les points que tu ne saisis pas.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2015
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Excellent ! Merci beaucoup. C'est vraiment super. J'ai pu résoudre mon problème.. Encore merci pour votre patience et le temps consacré.

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

Discussions similaires

  1. Zones vides dans Requête Analyse croisée
    Par sbeprod dans le forum Access
    Réponses: 2
    Dernier message: 12/12/2005, 14h03
  2. champ date vide, requete
    Par w.b. dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 15/02/2005, 16h51
  3. Réponses: 7
    Dernier message: 07/10/2004, 23h59
  4. Date dans une requête
    Par fdloisel dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 03/09/2004, 17h14
  5. Update de date vide dans une table
    Par gidebo dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/03/2004, 16h48

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