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 :

[D7][InterBase] conversion automatique de date


Sujet :

Bases de données Delphi

  1. #1
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut [D7][InterBase] conversion automatique de date
    Bonjour,

    Je reprends une application interfacée avec InterBase. Mon problème réside dans la différence entre les formats de dates affichés et ceux manipulés dans les requêtes SQL.
    Je m'explique : le champ det_datemc de la table detail_resa est de type TimeStamp et si j'affiche les données de cette table, le format de cet attribut est : jj/mm/aaaa.

    Pourtant en exécutant la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select distinct det_datemc
    from detail_resa
    where det_datemc between '01/04/2005' and '30/04/2005'
    J'obtiens le message d'erreur :
    Conversion error from string
    Et ce qui est MAGIQUE c'est que la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select distinct det_datemc
    from detail_resa
    where det_datemc between '04/01/2005' and '04/30/2005'
    me retourne des données.

    D'où vient cette conversion de date ?
    Merci par avance.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Ce n'est pas une conversion de la date, mais l'affichage formaté de la date.

    Fait ta requete et apres ta requete met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ShortDateFormat := 'yyyy-mm-dd';
    tu verras que la date affichée dans ta grille n'aura plus la même format.

    Ta base de données attendra toujours le format qu'il lui a été assigné (Interbase mm/jj/aaaa, Acces Idem, MYSQL aaaa-mm-jj, etc ...).

    donc pour faire une requete il faut dans tous les cas que tu formattes correctement la date en concordance avec la base de données. (d'ou l'erreur que tu avais, le mois 30 n'existe pas ^^)

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    D'accord, je comprends ton raisonnement mais j'ai 2-3 remarques : je devrais trouver dans mon code une instruction qui définit le format par défaut des dates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShortDateFormat := 'dd/mm/yyyy';
    Et pourtant, il n'existe aucune instruction comportant cette variable, donc :
    • - pourquoi sous IBConsole le format de date affiché lors de l'exécution d'une requête est : 'dd/mm/yyyy' ?

    • - pourquoi à l'exécution pas-à-pas de mon application les tests sur les dates se font avec des valeurs telles que 38458, 38443, 38353, etc. au lieu de 04/16/2005 ?

      Merci de tes réponses

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Magnus
    D'accord, je comprends ton raisonnement mais j'ai 2-3 remarques : je devrais trouver dans mon code une instruction qui définit le format par défaut des dates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShortDateFormat := 'dd/mm/yyyy';
    Et pourtant, il n'existe aucune instruction comportant cette variable, donc :
    • - pourquoi sous IBConsole le format de date affiché lors de l'exécution d'une requête est : 'dd/mm/yyyy' ?

    • - pourquoi à l'exécution pas-à-pas de mon application les tests sur les dates se font avec des valeurs telles que 38458, 38443, 38353, etc. au lieu de 04/16/2005 ?

      Merci de tes réponses
    La date qui est affichée correspond à la configuration de ton post (fait le test sur une version anglaise de windows, la date sera au format mm/dd/yyyy)
    donc par défaut tu as dd/mm/yyyy (format standard d'un windows francais)
    Fait un test, créés 2 boutons sur ta form et dans un tu mets le shortdateformat a mm/dd/yyyy et l'autre a dd/mm/yyyy, tu verras en direct live le changement de ton format de date (il faudrat peut être un rafraichissement de la grille).

    Concernant les chiffres quand tu fais un pas à pas, c'est normal, un timestamp correspond au nombre de jours depuis le 01/01/0001.
    Lors d'un affichage, cette valeur est formatée pour être lisible en tant que date.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Ah OK : les données retournées par l'application IBConsole sont mises en forme selon la version mon système donc maintenant je ne serai plus étonné de cette conversion automatique.

    Merci pour tous ces renseignements (notamment sur le timestamp) Malatar !

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/02/2005, 16h38
  2. [date] conversion d'une date et compatibilité access
    Par WriteLN dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/01/2005, 14h03
  3. [CR] pb (concaténation/Conversion/Addition) sur date/heure
    Par marvel dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 20/12/2004, 15h31
  4. conversion String en Date (parse trop permissif)
    Par ciloulou dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 13/09/2004, 18h36
  5. Conversion automatique de tiffs en jpg/gif
    Par Davenico dans le forum Composants VCL
    Réponses: 2
    Dernier message: 03/07/2003, 15h07

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