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

Bases de données Delphi Discussion :

[Debutant]Requête et Date


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 177
    Points : 74
    Points
    74
    Par défaut [Debutant]Requête et Date
    J'aimerais comparer deux date mais je n'y arrive pas
    u est la date que je récupère

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
          Query6.Close;
          Query6.sql.clear;
          Query6.sql.Add('SELECT S.SDate,SUM(P.PCost),SUM(P.PTotals)');
          Query6.sql.Add('FROM Products P');
          Query6.SQL.Add('JOIN MarketItems MI ON MI.P.PCode=IPCode');
          Query6.SQL.Add('JOIN Markets M ON MI.IMCode=M.MCode');
          Query6.SQL.Add('JOIN Sales S ON M.MCode=S.SMCode');
          Query6.SQL.Add('WHERE (S.SMCode=:x)');
          Query6.SQL.Add('GROUP BY SDate');
          Query6.Params[0].AsString:=AnsiUpperCase(combobox1.text);
          Query6.Open;
     
          t:=0;
     
          While not Query6.Eof and (t<h) do
                begin
                t:=t+(Query6.Fields[1].AsFloat/Query6.Fields[2].AsFloat);
                u:=Query6.Fields[0].AsString;
                end;
     
          Query3.Close;
          Query3.sql.clear;
          Query3.sql.Add('SELECT P.PCode,P.PName,Count(P.PCode) as NbrP,S.SDate,SUM(P.PPrice) AS PV,SUM(P.PCost/P.PTotals) AS CU');
          Query3.sql.Add('FROM Products P');
          Query3.SQL.Add('JOIN MarketItems MI ON MI.P.PCode=IPCode');
          Query3.SQL.Add('JOIN Markets M ON MI.IMCode=M.MCode');
          Query3.SQL.Add('JOIN Sales S ON M.MCode=S.SMCode');
          Query3.SQL.Add('WHERE (S.SMCode=:x)');
          Query3.SQL.Add('GROUP BY P.PCode,P.PName,S.SDate');
          Query3.Params[0].AsString:=AnsiUpperCase(combobox1.text);
          Query3.Open;
     
          g:=0;
          o:=0;
     
    Query3.First;
    while not Query3.Eof and (StrToDate(Query3.Fields[3].AsString)<StrToDate(u)) do
          begin
                    m:=m+1;
                    q:=Query3.fieldbyname('pv').AsFloat-Query3.fieldbyname('cu').AsFloat;
                    g:=g+q;
                    StringGrid1.Cells[0,m]:=Query3.Fields[1].AsString;
                    StringGrid1.Cells[1,m]:=Query3.Fields[2].AsString;
                    StringGrid1.Cells[2,m]:=floattostr(q);
                    pc:=Query3.Fields[0].AsString;
                    o:=o+Query3.Fields[2].AsInteger;
                    Query3.Next;
          end;

  2. #2
    Membre averti
    Avatar de delphichem
    Inscrit en
    Octobre 2002
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 280
    Points : 338
    Points
    338
    Par défaut
    Pourquoi ne pas declarer la variable u en TDate?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    u:=Query6.Fields[0].AsDatetime;
    puis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while not Query3.Eof and (Query3.Fields[3].AsDatetime)<u) do

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    petite question a quoi ca vous sert de passer par les paramettre ?

    je serait toi j'utiliserait la fonction format est crerait directement ma requette

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #4
    Membre habitué
    Inscrit en
    Mars 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2003
    Messages : 281
    Points : 187
    Points
    187
    Par défaut
    MessagePosté le: Ven Jan 06, 2006 15:30 Sujet du message:
    salut

    petite question a quoi ca vous sert de passer par les paramettre ?

    je serait toi j'utiliserait la fonction format est crerait directement ma requette

    @+ Phil
    C'est pas une bonne pratique à mon avis.

    le passage par paramètre permet notamment de s'affranchir des pb de formatage lié au SGBD ET aussi de s'adapter au paramètre régionaux.

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rq.parambyname('Madate').asdatetime := today();
     
    rq.parambyname('MaDate').asstring := '01/12/2005'; // 1er dec si tes parametres régionaux sont francais et ce quelquesoit le format de stockage des dates du sgbd.
    Cà te permet aussi de pouvoir dissocier le code sql des valeurs des paramètres, etc ...

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    si tu fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     st := 'select chp1' ;
     st :=  st  +'from matable ';
     st :=  st  +'where madate = "%s" ';
     
      marequette.sql.text := format(st,[DateTimeToStr(today())]);
    fait exactement la meme chose
    du moment que tu creer ta requette dynamiquement je persite a croire que les paramettre sont inutile

    on peut meme le faire en utilisant un formatdatetime et definissant une constante de typage

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #6
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par anapurna
    salut

    si tu fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     st := 'select chp1' ;
     st :=  st  +'from matable ';
     st :=  st  +'where madate = "%s" ';
     
      marequette.sql.text := format(st,[DateTimeToStr(today())]);
    fait exactement la meme chose
    du moment que tu creer ta requette dynamiquement je persite a croire que les paramettre sont inutile

    on peut meme le faire en utilisant un formatdatetime et definissant une constante de typage

    @+ Phil
    Et si le format de date n'est pas le même entre le poste où roule l'appli et le serveur SQL ? Ça fonctionne toujours ?

    À mon avis, non seulement l'utilisation de paramêtres règle définitivement le (détestable) problème des formats de dates (je travaille quotidiennement dans du code utilisé simultanément au Canada anglais, Canada français et aux EU alors je les aime bien les paramêtres ) mais aide aussi à clarifier le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    with qMaReq do
    begin
      SQL.Add('SELECT chp1');
      SQL.Add('FROM matable');
      SQL.Add('WHERE madate = :ParamDate');
      ParamByName('ParamDate').AsDateTime := Date();
      Open();
    end;
    -Slimjoe

Discussions similaires

  1. Debutant - Requête Grouper par Date
    Par ghan77 dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/12/2005, 17h07
  2. [DEBUTANT]Comparaison sur date et heure
    Par tripper.dim dans le forum Oracle
    Réponses: 15
    Dernier message: 15/11/2005, 18h25
  3. [Debutant] Format des dates ?
    Par Invité dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/09/2005, 14h55
  4. [ADO] Requète sur dates
    Par cdlr27 dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/01/2005, 22h39
  5. Requête sur date
    Par guenfood dans le forum Access
    Réponses: 11
    Dernier message: 08/12/2004, 16h11

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