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

 Delphi Discussion :

Comparer date/heure dans une requête SQL


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2007
    Messages : 52
    Points : 35
    Points
    35
    Par défaut Comparer date/heure dans une requête SQL
    salut,
    je développe une application(gestion de vente)pour cela j ai une table qui contient les champs suivants:
    date_temps(ex: 12/08/2008 12:30:45),vêtement, quantité , prix

    je veux faire la somme des prix du jour alors je compare le champ date_temp avec la date d aujourd'hui mais j ai selement besoin du date 12/08/2008 dans mon exemple qui est au dessus ,et pas l heure 12:30:45

    voici ma requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query1.SQL.Text:= 'SELECT SUM(Prix) from Vente.DB where' +'"'+FormatDateTime('dd/mm/yyyy',StrToDateTime(Date_temp))+'"'+'=' +'"'+DateToStr(Date)+'"';
    mais ca marche pas
    est ce que quelqu'un peut m aidé et merci bcp.

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Pour la manipulation de dates dans une requête SQL, le plus simple est de passer par une requête paramétrée. Ce conseil a déjà été donné maintes fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    uses DateUtils;
     
    var
      Debut, Fin: TDateTime;
    begin
      Debut := Date;
      Fin := EndOfTheDay(Debut);
      with Query1 do
      begin
        SQL.Clear;
        SQL.Add('SELECT SUM(Prix) from Vente.DB');
        SQL.Add('where Date_temp between :PDebut and :PFin');
        ParamByName('PDebut').Value := Debut;
        ParamByName('PFin').Value := Fin;
        Open;
        // ...
      end;
    end;
    @+ Claudius

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 057
    Points : 41 003
    Points
    41 003
    Billets dans le blog
    62
    Par défaut
    encore une question date et SQL maintes fois remachée sur ce forum
    utilises la fonction recherche du forum

    la solution la plus efficace (a mon gout) est d'utiliser
    1. les paramètres
    2. BETWEEN


    pour une journée particulière cela donne l
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Query1.SQL.Text:= 'SELECT SUM(Prix) from Vente.DB where date_temps between :d and :d+1'
    Query1.ParambyName('d').asDate:=date;  // date du jour ou autre date venant d'un tDatetimepicker

    la date est stockée sous la forme nnnnnn,mmmmm ou nnnn est un nombre de jour par rapport au 1/1/1989 (je crois) la partie décimale étant le nombre de millisecondes?


    FormatDateTime('dd/mm/yyyy',date) donnera aujourdhui,0 pas ajourdhui entre 0h00 et minuit

    [Edit]
    grillé sur la ligne , je suis un mauvais sprinter ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2007
    Messages : 52
    Points : 35
    Points
    35
    Par défaut
    j ai essayé ça mais toujours le même problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Query2.SQL.Text:= 'SELECT SUM(Prix) from Vente.DB where Date between :d and :dd';
    Query2.ParambyName('d').asDate:=DateTimePicker1.Date;
    Query2.ParambyName('dd').asDate:=DateTimePicker2.Date;
    est ce qu'il y a une explication?

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 057
    Points : 41 003
    Points
    41 003
    Billets dans le blog
    62
    Par défaut
    un peu plus de code en utilisant les balises nous permettrais sans doute de le savoir.
    Quelles sont les valeurs de D et DD car si D=DD alors le résultat sera égal à zéro (sauf si une vente est effectuée à minuit pile )
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query2.SQL.Text:= 'SELECT SUM(Prix) from Vente.DB where Date_temps between :d and :dd';
    Le where s'applique sur Date_Temps et non Date.

    @+

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 057
    Points : 41 003
    Points
    41 003
    Billets dans le blog
    62
    Par défaut
    bien vu Cl@udius cependant il est bizarre qu'il n'y ai pas eu carrement une erreur SQL (champ non trouvé) ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Points : 20
    Points
    20
    Par défaut re
    tu peux aussi utiliser le query de cette façon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    query1.Filter:='[date]<'''+datetostr(Now)+'''';
    query1.Filtered:=true;

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2007
    Messages : 52
    Points : 35
    Points
    35
    Par défaut
    pour simplifier ma manœuvre j ai séparé le champ date_temps en 2 champs , un champ 'Dte' de type DATE qui contient la date et l'autre 'Temps' de type TIME qui contient le temps, alors maintenant il me reste qu a manipulé la date mais toujours le meme probleme
    voici ma requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query2.SQL.Text:= 'SELECT SUM(Prix) FROM Vente.DB WHERE Dte ='+'"'+DateToStr(NOW)+'"';
    le message d erreur est le suivant:
    "Différence de type dans une expression"



    j ai fait un test avec le champ 'Temps'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query2.SQL.Text:= 'SELECT SUM(Prix) FROM Vente.DB WHERE Temps ='+'"'+TimeToStr(Now)+'"';
    çà marche très bien

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 057
    Points : 41 003
    Points
    41 003
    Billets dans le blog
    62
    Par défaut
    now=date+heure
    date=date

    de plus il reste toujours le problème du formatage de la date qui n'est pas obligatoirement le même entre le PC et Paradox

    pourquoi, mais pourquoi , ne pas vouloir utiliser les paramètres ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. Changer le format des dates dans une requête SQL
    Par Tazze-99 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/07/2012, 15h09
  2. Réponses: 1
    Dernier message: 17/07/2009, 10h51
  3. Date à insérer dans une requête sql
    Par raf64flo dans le forum SAS Base
    Réponses: 18
    Dernier message: 24/04/2008, 11h50
  4. Comment insérer la date actuelle dans une requête SQL ?
    Par AMINE07 dans le forum Bases de données
    Réponses: 7
    Dernier message: 15/11/2007, 16h47
  5. Constante Date dans une requête SQL
    Par tarbala dans le forum Autres SGBD
    Réponses: 1
    Dernier message: 25/04/2006, 16h24

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