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 :

Utilisation incorrecte de Null [AC-2003]


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 Le Sage
    Homme Profil pro
    Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Inscrit en
    Novembre 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 218
    Par défaut Utilisation incorrecte de Null
    Bonjour.

    Je suis praticien en massages-bien-être, et je suis en train de mettre au point un outil de gestion de mes clients.
    Dans les diverses fonctions prévues, je développe une requête qui me permet de classer mes clients par date d'anniversaire à venir.


    Cette table, intitulée CIVILITE contient une trentaine de champs, dont notamment :
    • CIVILITE_Ref
    • CIVILITE_Date_Naissance
    • CIVILITE_Prenom
    • CIVILITE_Nom
    Dans l'élaboration de ma requête, j'ai rencontré à un problème d'Utilisation incorrecte de Null. Suite à celui-ci, j'ai créé une première requête nommée "PréClassement par anniversaire (N)" qui ne conserve que les dates de naissances renseignées :
    • CIVILITE_Ref
    • CIVILITE_Date_Naissance - Critère : Est Pas Null
    • CIVILITE_Prenom
    • CIVILITE_Nom
    Basée sur celle-ci, j'ai créé une autre requête nommée "Classement par anniversaire (N)" :
    • Anniversaire: CDate(CChaîne(PartDate("d";[CIVILITE_Date_Naissance])) & "/" & CChaîne(PartDate("m";[CIVILITE_Date_Naissance])) & "/" & CChaîne(PartDate("yyyy";Maintenant()))) - Tri : Croissant - Format : "jj mmm aaaa"
    • CIVILITE_Date_Naissance
    • CIVILITE_Prenom
    • CIVILITE_Nom
    Pour les fans de SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CDate(CStr(DatePart("d",[CIVILITE_Date_Naissance])) & "/" & CStr(DatePart("m",[CIVILITE_Date_Naissance])) & "/" & CStr(DatePart("yyyy",Now()))) AS Anniversaire, [PréClassement par anniversaire (N)].CIVILITE_Date_Naissance, [PréClassement par anniversaire (N)].CIVILITE_Prenom, [PréClassement par anniversaire (N)].CIVILITE_Nom
    FROM [PréClassement par anniversaire (N)]
    ORDER BY CDate(CStr(DatePart("d",[CIVILITE_Date_Naissance])) & "/" & CStr(DatePart("m",[CIVILITE_Date_Naissance])) & "/" & CStr(DatePart("yyyy",Now())));

    Notez bien : la formule génère une date composée du jour et du mois de naissance du client et de l'année en cours (par exemple, pour une personne née le 29/12/69, la formule génère 29/12/2009).

    Jusque là tout va bien, ça fonctionne nickel.

    Le problème survient lorsuqu'au champ Anniversaire j'ajoute la condition >Maintenant() de manière à n'obtenir que les anniversaires à venir dans l'année en cours. Lorsque j'exécute la requête, j'obtiens l'erreur "Utilisation incorrecte de Null".
    En SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CDate(CStr(DatePart("d",[CIVILITE_Date_Naissance])) & "/" & CStr(DatePart("m",[CIVILITE_Date_Naissance])) & "/" & CStr(DatePart("yyyy",Now()))) AS Anniversaire, [PréClassement par anniversaire (N)].CIVILITE_Date_Naissance, [PréClassement par anniversaire (N)].CIVILITE_Prenom, [PréClassement par anniversaire (N)].CIVILITE_Nom
    FROM [PréClassement par anniversaire (N)]
    WHERE (((CDate(CStr(DatePart("d",[CIVILITE_Date_Naissance])) & "/" & CStr(DatePart("m",[CIVILITE_Date_Naissance])) & "/" & CStr(DatePart("yyyy",Now()))))>Now()))
    ORDER BY CDate(CStr(DatePart("d",[CIVILITE_Date_Naissance])) & "/" & CStr(DatePart("m",[CIVILITE_Date_Naissance])) & "/" & CStr(DatePart("yyyy",Now())));
    Evidemment, avant de poster, j'ai pris soin de vérifier qu'il n'existait aucun champ Null. J'ai même tenté d'utiliser Nz(), mais rien n'y fait.


    Si quelqu'un a ne serait-ce qu'une idée, une piste de solution, je le remercie par avance de m'orienter !

    Dans l'attente, bien cordialement,
    Eric.

  2. #2
    Membre Expert
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Par défaut
    Bonjour,
    et que donnerait ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT CVDate(Format$([CIVILITE_Date_Naissance],"dd/mm/") & Format$(Now(),"yyyy")) AS Expr1 FROM CIVILITES WHERE (((CVDate(Format$([CIVILITE_Date_Naissance],"dd/mm/") & Format$(Now(),"yyyy")))>=Now()));

  3. #3
    Expert confirmé
    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
    Par défaut
    Bonjour,

    Je pense que le moteur de données simplifie ta requête sur une requête, en une requête sur ta table,
    en combinant les critères des clauses WHERE, de ta requête et de ta sous-requête.
    Du coup DatePart est évalué sur tous les enregistrements, y compris ceux ayant une date nulle.

    Peut-être une alternative en ayant toujours une date anniversaire supérieure ou égale à la date du jour.
    C'est réalisé avec le IIF(...).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT IIF(DateSerial(Year(Date()),Month(CIVILITE_Date_Naissance),Day(CIVILITE_Date_Naissance))<Date(), 
               DateSerial(Year(Date())+1,Month(CIVILITE_Date_Naissance),Day(CIVILITE_Date_Naissance)), 
               DateSerial(Year(Date()),Month(CIVILITE_Date_Naissance),Day(CIVILITE_Date_Naissance))) AS Anniversaire,
           CIVILITE.CIVILITE_Date_Naissance, CIVILITE.CIVILITE_Prenom, CIVILITE.CIVILITE_Nom
    FROM   CIVILITE
    WHERE  (((CIVILITE.CIVILITE_Date_Naissance) Is Not Null))
    ORDER BY IIF(DateSerial(Year(Date()),Month(CIVILITE_Date_Naissance),Day(CIVILITE_Date_Naissance))<Date(), 
                 DateSerial(Year(Date())+1,Month(CIVILITE_Date_Naissance),Day(CIVILITE_Date_Naissance)), 
                 DateSerial(Year(Date()),Month(CIVILITE_Date_Naissance),Day(CIVILITE_Date_Naissance)));
    A+

  4. #4
    Membre éclairé Avatar de Le Sage
    Homme Profil pro
    Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Inscrit en
    Novembre 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 218
    Par défaut






    Ca montre bien qu'on en a toujours à apprendre !!!

    Merci beaucoup car je me prends le chou avec ça depuis ce matin !

    Et en plus ça résoud tout en une seule requête !!!

    Bravo !

    Je vais maintenant me l'éplucher en long en large et en travers, histoire d'en tirer une leçon d'ordre plus général !

    Encore merci, parce que je ne serais jamais passé par là !

    Et merci aussi à helas d'avoir répondu, même si je suis directement passé par la solution de LedZeppII qui me paraissait tout résoudre (j'ai quand même réussi à lire le code et à piger là où il voulait en venir )

    Bonne continuation à tous les deux !

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

Discussions similaires

  1. erreur 94 utilisation incorrecte de null
    Par caossak dans le forum Général VBA
    Réponses: 2
    Dernier message: 24/06/2007, 11h00
  2. Réponses: 3
    Dernier message: 30/03/2007, 14h48
  3. Réponses: 6
    Dernier message: 03/07/2006, 08h26
  4. Utilisation incorrecte de Null ?
    Par pafi76 dans le forum Access
    Réponses: 6
    Dernier message: 28/06/2006, 09h40
  5. Utilisation incorrecte de Null ?
    Par illight dans le forum Access
    Réponses: 2
    Dernier message: 23/11/2005, 10h27

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