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 :

delphi interbase sql date


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Points : 195
    Points
    195
    Par défaut delphi interbase sql date
    je veux faire une recherche par date dans une BD Interbase2009 en utilisant TIBDataset mais j'y arrive pas; j'ai un messsage d'erreur : conversion error from string "19/02/2009"
    voici le code

    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
    procedure TfProvisoire.dtpChange(Sender: TObject);
    var sDate, sSql : string;
    begin
      sDate := FormatDatetime('dd/mm/yyyy',dtp.Date);
      sSql :='SELECT * FROM POST WHERE DATEIMP = '
              +QuotedStr(sDate)+ ' and TYPEPOST = '
              +QuotedStr('Provisoire')+ ' ORDER BY DATEIMP';
      if rgRech.ItemIndex = 3 then
       begin
         qPost.Active := false;
         qPost.SelectSQL.Clear;
         qPost.SelectSQL.Add(sSql);
          qPost.Active := true;
       end;
    end;
    A la Recherche du Parfait il faut faire et refaire
    L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    salut ,

    Ton erreur est d'utiliser le format français de date, si tu doit utiliser celui-ci c'est sous la forme jj.mm.aaaa qu'il te faut le faire.

    je conseille généralement d'utiliser les pamètres pour ce genre de requête ou au minimum un "transtypage" (CAST)

    première résolution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sDate := FormatDatetime('mm/dd/yyyy',dtp.Date); // solution 1
    sDate := FormatDatetime('dd.mm.yyyy',dtp.Date); // solution 2
    un petit plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sSql :='SELECT * FROM POST WHERE DATEIMP = CAST('+sdate+' AS DATE) 
     and TYPEPOST = '+QuotedStr('Provisoire')+ ' ORDER BY DATEIMP';
    le must à mon avis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sSQL:='SELECT * FROM POST WHERE DATEINP=:D AND TYPEPOST=:P ORDER BY DATEINP'
    qPost.Active := false;
    qPost.SelectSQL.Clear;
    qPost.SelectSQL.Add(sSql);
    qPost.SelectSQL.ParamByName('D').asDate:=dtp.Date;
    qPost.SelectSQL.ParamByName('P').asString:='Provisoire';
    qPost.Active := true;
    bien sur cela du type de composants utilisé mais la philosophie est là

    PS. Utilises des balises (bouton #) pour entourer ton code sur le forum
    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

  3. #3
    Membre habitué Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Points : 195
    Points
    195
    Par défaut
    Merci pour le tuyau, grâce a toi j'ai plus d'erreur mais la requête ne donne rien mon DBGrid est vide voila code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sDate := FormatDatetime('dd.mm.yyyy',dtp.Date);
    sSQL:='SELECT * FROM POST WHERE DATEIMP=:D AND TYPEPOST=:P ORDER BY DATEIMP' ;
         qPost.Active := false;
         qPost.SelectSQL.Clear;
         qPost.SelectSQL.Add(sSql);
         qPost.ParamByName('D').asDate:=dtp.Date;
         qPost.ParamByName('P').asString:='Provisoire';
         qPost.Active := true;
    A la Recherche du Parfait il faut faire et refaire
    L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    je crois qu'il te manque les ":" dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sSQL:='SELECT * FROM POST WHERE DATEIMP=:var1 AND TYPEPOST=:var2 ORDER BY DATEIMP'
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    Salut;

    je crois qu'il te manque les ":" dans ton code :
    non c'est que le petit vilain n'utilise pas les balises

    mais la requête ne donne rien mon DBGrid est vide
    mais est-ce que des données correspondent , là est la question . Essayes directement avec un outil quelconque (IBexpert) la même (paramètres mis à part) requête
    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
    Membre habitué Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Points : 195
    Points
    195
    Par défaut
    toujours rien même sur ibconsole, j'ai exécute la requête la grille est vide et pourtant la valeur recherchée y est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT identite,DATEIMP FROM POST WHERE DATEIMP='20.02.2009'
    mais si je mets ce code ca marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT identite,DATEIMP FROM POST
    et je vois la date recherchée dans la grille
    A la Recherche du Parfait il faut faire et refaire
    L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bon comme le dirait Bourel "Mais bon Dieu oui bien sur c'était donc ça"

    Tu as du déclaré ton champ en datetime , moralité si tu testes un champ date uniquement l'égalité ne pourra pas fonctionner (sauf à tomber pile poil à minuit)

    plusieurs solutions (encore )
    transformer par cast DATEIMP là , j'ai des doutes car cela dépend de la version de base de données et du DIALECT de celle-ci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT identite,DATEIMP FROM POST WHERE CAST(DATEIMP AS DATE)='20.02.2009'
    sélectionner en fonction d'un intervalle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT identite,DATEIMP FROM POST WHERE DATEIMP BETWEEN '20.02.2009' AND '21.02.2009'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT identite,DATEIMP FROM POST WHERE DATEIMP BETWEEN '20.02.2009 00:00:00' AND '20.02.2009 23:59:59'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT identite,DATEIMP FROM POST WHERE DATEIMP>='20.02.2009' AND DATEIMP<'21.02.2009'
    et il y en a encore certainement d'autres .

    Je te suggère de faire un tour sur le forum d'Interbase ici
    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 habitué Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Points : 195
    Points
    195
    Par défaut
    La deuxième solution marche, j'avais pas pense au BETWEEN, ma requete marche merci
    A la Recherche du Parfait il faut faire et refaire
    L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.

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

Discussions similaires

  1. [interbase][SQL] concatener 2 champs dans le select
    Par Harry dans le forum Bases de données
    Réponses: 10
    Dernier message: 09/03/2006, 06h45
  2. [Date][SQL date][Format] insertion d'une heure
    Par goulime dans le forum JDBC
    Réponses: 11
    Dernier message: 26/01/2004, 11h38
  3. SQL Date
    Par hamed dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/11/2003, 15h18
  4. [Rave][Delphi][Base SQL] besoin d'informations
    Par David Altech dans le forum Rave
    Réponses: 1
    Dernier message: 30/07/2003, 13h59

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