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 :

fonction date avec access


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 244
    Points : 85
    Points
    85
    Par défaut fonction date avec access
    bonjour, je dois supprimer les clients qui ne sont plus venu depuis 2 ans acheter des objets.
    les clients sont dans la table client et la achats dans la table achats.
    voici ma requete mais il m'affiche tout et je ne voit pas ou est ma faute.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM T_Clients, T_achat
    WHERE ((([T_Clients].[No_client]) Not In (select no_CF from T_achat where Date = Year(Date())-2)));
    Pouvez vous m'aider svp
    merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Allô,
    Je ne comprend pas pourquoi tu n'exécutes pas une instruction DELETE au lieu d'un SELECT. Après tout, tu désires supprimer les clients, et non en obtenir la liste, n'est-ce pas ?
    Du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE FROM T_Clients 
    WHERE ((([T_Clients].[No_client]) NOT IN (SELECT no_CF FROM T_achat
    WHERE Date = Year(Date())-2)));

  3. #3
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 949
    Points : 4 876
    Points
    4 876
    Par défaut
    Bonjour,

    Déjà ne pas utiliser Date comme nom de champ d'une table car c'est un nom réservé (déjà par la fonction publique date )

    Puis essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM T_Clients
    WHERE ((([T_Clients].[No_client]) NOT IN (SELECT no_CF FROM T_achat WHERE Year(DateAchat) <=  Year(Date())-2)));
    Pas testée.

    PS : Pour Mary : vaut mieux faire un SELECT avant le DELETE que le contraire ...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 244
    Points : 85
    Points
    85
    Par défaut
    j'ai essayer et a me donne tout les clients de la table que j'ai actuellement donc il ne trie pas en fonction de la date que je lui donne cad 2 ans avant la date d'auj.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    La fonction AjDate te serait peut-être utile dans ce cas !
    Dans ta condition WHERE, tu devrais vérifier à ce que ta date soit plus petite qu'à la date du jour, moins 2 ans.
    Ça devrait donner quelque chose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE DateAchat <DateAdd('yyyy',-2,Date())));
    Ici, la fonction DateAdd utilise le paramètre 'yyyy' pour spécifier que c'est au niveau de l'année qu'on travaille, le -2 spécifie le nombre d'années que l'on veut ajouter, et Date() spécifie à quelle valeur veut-on ajouter -2 années, ici la date du jour.

    En espérant que ça fonctionne !
    Bonne chance !

  6. #6
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 949
    Points : 4 876
    Points
    4 876
    Par défaut
    1 Quel est le résultat de la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT no_CF FROM T_achat WHERE Year(DateAchat) <=  Year(Date()) - 2 ;
    2 Est-ce que no_CF correspond bien à [T_Clients].[No_client] ? (notamment le type de données)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 244
    Points : 85
    Points
    85
    Par défaut
    non le no_CF correspond a la table achat.
    ce qu'il me donne comme résultat, il me donne tout les clients de ma table donc il ne trie pas.
    En faisant la requete de mary-261, il me change mes années donc mes achats se sont effectuées le 01/01/2007, il me change par 01/01/2005

  8. #8
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 949
    Points : 4 876
    Points
    4 876
    Par défaut
    Cette même requete me retourne tous les clients qui ont achetés en 2005, 2006 ou 2007 : elle trie donc.
    pour une meilleure efficacité tu pourrais mettre un DISTINCT dans cette sous requete.

    Salut

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 244
    Points : 85
    Points
    85
    Par défaut
    non elle ne me les trie pas, elle me renvoit tout mes clients que j'ai dans ma table mais elle me change les date d'achat, au lieu detre 2007 elle met 2005.
    Donc elle change l'année d'auj -2 ans hors moi j'aimerai qu'elle m'affiche tout les clients qui ne sont plus venu acheter depuis 2 ans.

  10. #10
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 949
    Points : 4 876
    Points
    4 876
    Par défaut
    dans la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT no_CF FROM T_achat WHERE Year(DateAchat) <=  Year(Date()) - 2 ;
    je suppose que tu as changé le nom du champ Date en DateAchat (date est un mot réservé ) ,
    alors l'expression Year(Date()) - 2 retourne l'année de la date d'aujourd'hui moins deux : 2005

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 244
    Points : 85
    Points
    85
    Par défaut
    oui j'ai changé.
    elle me change toute mes dates en fait.
    hors moi j'aimerai qu'il me trouve ceux qui ne sont plus venu depuis 2 ans.
    et avec cette requete, il me modifie la date -2 ans donc ce nest pas bon.
    tout mes achats se sont effectuées en 2007, il me les modifie par 2005.
    Que dois je change pour que cela fonctionne?
    merci

  12. #12
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 949
    Points : 4 876
    Points
    4 876
    Par défaut
    en 2007, il me les modifie par 2005
    Regarde encore et analyse ta requete
    car une requete SELECT n'a jamais modifié de valeur depuis qu'elle existe...

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 244
    Points : 85
    Points
    85
    Par défaut
    ben je ne sais pas mais ici ca le fait donc cest que cest possible.
    Lorsque j'execute ma requete, je voit toutes mes date en 2005 et il majoute un même montant pour tout les clients.

    voici le printscreen pour montrer le resultat:

  14. #14
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 949
    Points : 4 876
    Points
    4 876
    Par défaut
    Etrange en effet. Pour avancer met ta base en PJ.
    On verra alors plus clair
    Salut

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 244
    Points : 85
    Points
    85
    Par défaut
    en PJ c'est quoi? pièce jointe?
    je dois mettre tout mon programme?

  16. #16
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 949
    Points : 4 876
    Points
    4 876
    Par défaut
    le périmètre de ton pb ne se limite-t'il pas :
    aux tables t_Clients et t_Achat
    et à tes requetes évoquées ci-dessus ?

    Ainsi une copie très partielle de ta base suffit.

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 244
    Points : 85
    Points
    85
    Par défaut
    Pièce jointe 17768
    voici le copie.

  18. #18
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 949
    Points : 4 876
    Points
    4 876
    Par défaut
    C'est ton schema relationnel (voir PJ) (entre tes 3 tables achats carte et CF ) qui ne va pas.

    Ca a peut-être marché dans le passé, mais dans tes tables , à partir du client 1412 les cartes ne sont plus créées et les Cf ne sont reliés à aucun client !

    Selon ton schéma relationnel, 1 client peut avoir plusieurs cartes et sur chaque carte il ne peut faire qu'un seul achat ! : est-ce bien ce que tu veux ? Dans tous les cas, il faut veiller à renseigner toute la chaine et non pas seulement T_Achats


    En ce qui concerne ta requete, sur T_client et T_achats il n'y a aucun lien entre elles : il te faut rajouter T_carte pour tenir compte de tes relations.
    (explication : comme il n'y aucun lien direct entre T_client et T_achats, ta requete te sert le produit cartesien de la tables client ( donc tu obtiens tous les clients à tout coup) avec l'enregistrement 17001 de la table T_achats qui a la date 1 /1/2005 (à toi de finir de comprendre pourquoi.

    Une requete plus simple par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [T_achat].[No_CF], [T_achat].[DateAchat], [T_achat].[Montant]
    FROM T_achat
    WHERE (((Year([DateAchat]))<=Year(Date())-2));
    te produit un résultat correct.


    Espère que cela te fasse avancer

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 244
    Points : 85
    Points
    85
    Par défaut
    je te remercie deja d'avoir regarder.
    mais que dois je changer afin d'avoir un schéma relationnel correct?
    En fait ce que je veux c'est: 1 client peut avoir plusieurs cartes et sur chaque carte il faire jusqu'a 12 achats.
    je vais changer et voir sur la requete et je dis quoi apres.
    merci

  20. #20
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 949
    Points : 4 876
    Points
    4 876
    Par défaut
    Le schéma relationnel se présente comme ci-dessous (de visu c'est presque pareil).

    dans ta table T_achat il faut :
    détruire la relation actuelle entre T_CF et T_Achat
    passer No_Achat en numAuto (pour cela il faut d'abord supprimer ce chp et le recréer)
    le primary key de T_Achat doit être no_Achat et non pas no_CF
    passer No_CF en numérique (actuellemnt numAuto)
    refaire ta relation entre T_CF et T_Achat

    Ce schèma correspond à : 1 client peut avoir plusieurs cartes et sur chaque carte il faire plusieurs achats.

    A partir de la tu pourras faire des requetes correctes :
    ex: la requete des clients qui ont fait des achats ces 2 dernières années doit utiliser les 3 tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_Clients.No_client, T_Clients.Nom, T_achat.DateAchat, T_achat.Montant
    FROM (T_Clients INNER JOIN T_carte ON T_Clients.No_client = T_carte.No_client) INNER JOIN T_achat ON T_carte.No_CF = T_achat.No_CF
    WHERE (((Year([DateAchat]))<=Year(Date())-2));
    Surtout, qd un client fait un achat il faut renseigner T_CF et T_Achat (tu as 2 niveaux de ss-formulaires ! )

    Enfin, tu peux gérer le max de 12 achats en vérifiant que lorsqu'un client effectue un nouvel achat le nb max n'est pas encore atteint sinon tu mets un message correspondant.

    Voilou

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Dates] fonction date avec argument timestamp
    Par nicoda dans le forum Langage
    Réponses: 3
    Dernier message: 31/01/2008, 17h55
  2. [VBA]Utiliser les fonctions Excel avec Access
    Par PsykotropyK dans le forum VBA Access
    Réponses: 8
    Dernier message: 18/04/2007, 14h58
  3. [C#] Problème de Date avec Access
    Par k2vin dans le forum Accès aux données
    Réponses: 4
    Dernier message: 12/12/2006, 16h57
  4. fonction date sur Access
    Par magictom42 dans le forum Access
    Réponses: 1
    Dernier message: 06/12/2006, 11h36
  5. fonction date avec mysql
    Par yopman dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 18/09/2006, 00h15

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