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 :

TFDTable, Filter and FormatDateTime


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2022
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 13
    Points : 16
    Points
    16
    Par défaut TFDTable, Filter and FormatDateTime
    Bonjour,
    j'ai cherché dans les topics existants une solution relative à mon bug mais je n'ai pas trouvé de réponse...
    Voici le code source (extrait)
    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
          while not FDTLogEnvoi.Eof do
          begin
            FDTLogEmail.Filtered := False;
            FDTLogEmail.Filter :=
              'DateEnvoi >=' +
              QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', FDTLogEnvoi.FieldByName('DateDebutEnvoi').AsDateTime)) +
              ' and DateEnvoi <=' +
              QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', FDTLogEnvoi.FieldByName('DateFinEnvoi').AsDateTime));
            FDTLogEmail.Filtered := True;
            FDTLogEmail.FindFirst;
            while not FDTLogEmail.Eof do
            begin
              if (not VarIsNull(FDTLogEmail.FieldByName('PersonneConcernee').Value))
                and (VarIsNull(FDTLogEmail.FieldByName('LogEnvoi').Value)) then
              begin
                FDTLogEmail.Edit;
                FDTLogEmail.FieldByName('LogEnvoi').Value := QuotedStr(FDTLogEnvoi.FieldByName('Id').AsString);
                FDTLogEmail.Post;
              end;
    
              FDTLogEmail.FindNext;
            end;
    
            FDTLogEnvoi.Next;
          end;
    la valeur de filter vaut par exemple 'DateEnvoi >=''22-06-01 00:00:00'' and DateEnvoi <=''22-06-28 00:00:00'''
    mais à la ligne suivante, l'activation du filtre génère ce bug
    Le projet Project1.exe a déclenché la classe d'exception EConvertError avec le message 'Impossible d'analyser la chaîne TimeStamp SQL'.
    Le projet Project1.exe a déclenché la classe d'exception EFDException avec le message '[FireDAC][Stan][Eval]-118. Erreur à l'évaluation de l'expression. Impossible d'analyser la chaîne TimeStamp SQL'.
    Pourtant l'expression du filtre dans l'exemple au dessus me semble correct ?

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Pourquoi du Filter et non plutot un SQL explicite, surtout dans une boucle, c'est très vilain
    C'est des TFDTable ? A éviter au plus que possible !

    En plus des Dates dans un Filter ... déjà qu'en SQL c'est pas évident, rien de vaut un Bind via ParamByName pour conserver le typage TDateTime et éviter la conversion chaine.
    On sait que c'est du FireDAC mais on ignore le SGBD, la formatage de date étant dépend de ce dernier, impossible de savoir si l'encodage est bon.

    Remplacer ce FDTLogEmail par un TFDQuery.SQL et Open/Close

    et un BETWEEN serait encore mieux


    Et yyyy-... mais une erreur sur 22-.... il y'a un problème !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2022
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2022
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    c'est juste un petit programme par "alimenter" le champ d'une table et la 1ere boucle ne contient que 30 enregistrements mais je vais modifier le code comme suggéré c'est mieux

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

Discussions similaires

  1. Drag and drop "de l'extérieur"
    Par Invité dans le forum C++Builder
    Réponses: 12
    Dernier message: 31/03/2020, 10h10
  2. Réponses: 2
    Dernier message: 03/12/2019, 15h06
  3. LDAP filters and order by
    Par xavpiaf dans le forum ASP.NET
    Réponses: 4
    Dernier message: 23/10/2008, 11h52
  4. CFileDialog Filter
    Par Patrick Beaudoin dans le forum MFC
    Réponses: 4
    Dernier message: 07/09/2002, 09h51
  5. Fip, modbus and co...
    Par xave dans le forum Développement
    Réponses: 2
    Dernier message: 24/05/2002, 13h25

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