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 CE + Sqlite -- Problème avec champ date


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Par défaut Delphi CE + Sqlite -- Problème avec champ date
    Bonjour.

    Je teste Delphi Community Edition (10.2) et notamment l'accès avec Firedac à des bases de données sqlite.

    J'essaie avec une de mes bases mais j'obtiens l'erreur "Argument incorrect pour l'encodage de date.". Il y a effectivement un champ contenant des dates.
    En revanche, pas de problème avec la base de démo livrée avec Delphi (SQLite_Demo) pour ouvrir la table Employees qui contient des champs date.

    Différence : dans ma base, le champ est de type "Date" alors que dans la base de démo ils sont de type "DateTime" tel qu'indiqué dans l'éditeur de requête.
    Si je visualise les tables dans DBBrowser for SQLite, mes dates sont représentées par des nombres, exemple "48338" pour le 22/3/2018 qui doit correspondre à un nombre de jours depuis une date initiale. En revanche, pour la base démo, c'est représenté en clair, exemple : "1948-12-08" ("08-12-1948" dans Delphi).

    Si vous savez comment résoudre ce problème ...

    Christian

  2. #2
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 542
    Billets dans le blog
    10
    Par défaut
    Change ton format Date en DateTime
    Le contenu du champ est le même. 48338 devient 48338,00
    Time est la partie décimale qui est à zéro dans ton cas

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 934
    Billets dans le blog
    6
    Par défaut
    SQLite supporte différents types, et gère les dates comme expliqué en 2.2, tout en implémentant des fonctions utilisables dans les requêtes.

    Je ne sais pas comment Firedac interface la gestion des champs DateTime, mais il faut prendre garde à l'origine des réels codant un DateTime, qui n'est pas la même pour SQLite et Delphi...
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    SQLite supporte différents types, et gère les dates comme expliqué en 2.2, tout en implémentant des fonctions utilisables dans les requêtes.

    Je ne sais pas comment Firedac interface la gestion des champs DateTime, mais il faut prendre garde à l'origine des réels codant un DateTime, qui n'est pas la même pour SQLite et Delphi...
    Oui, j'avais déjà lu tout ça, sqlite ne propose pas de type date mais integer, real, text ... dans lesquels on peut mettre une date sous différentes formes et ensuite des fonctions pour les gérer ...
    On peut quand même créer des tables avec des champs de type date ou datetime en sql ce qui n'est pas très logique !

    C'est comme cela que j'ai créé mes tables que j'utilise sans problème avec d'autres langages. Ma question, c'est pourquoi cette erreur avec delphi CE et comment y remédier ?

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 628
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    Citation Envoyé par thewolf Voir le message
    C'est comme cela que j'ai créé mes tables que j'utilise sans problème avec d'autres langages. Ma question, c'est pourquoi cette erreur avec delphi CE et comment y remédier ?
    Je ne suis pas sur que "Delphi CE" soit responsable, mais plutôt, peut être, une méconnaissance de Firedac ?
    Il me faudrait la structure de la table ou plutôt un échantillon pour en être sûr.

    Une première piste : établir une règle de mappage (FormatOptions.MapRules)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    Je ne suis pas sur que "Delphi CE" soit responsable, mais plutôt, peut être, une méconnaissance de Firedac ?
    Il me faudrait la structure de la table ou plutôt un échantillon pour en être sûr.

    Une première piste : établir une règle de mappage (FormatOptions.MapRules)
    Pour limiter les origines possibles du problème, j'ai créé une base minimaliste avec une table TestDates avec le code suivant (Lazarus - composant TSqlite3Dataset) :

    FieldDefs.Clear;
    FieldDefs.Add('Id', ftAutoInc);
    FieldDefs.Add('Date', ftDate);
    CreateTable;

    Dans un grid, j'ai rentré les dates suivantes :
    28/01/1965
    28/06/2004
    29/06/1966
    (comme indiqué précédemment, quand je visualise dans DbDrowser, cela affiche 23770, 38166 et 24287)

    Avec cette base, j'ai toujours l'erreur "Argument incorrect pour l'encodage de date." quand je fais "exécuter" dans l'éditeur de requête firedac (sql : SELECT * FROM TestDates)

    J'ai déjà essayé avec une règle de mappage dans ce même éditeur : sourceDataType : dtDate et pour TargetDataType j'ai un peu tout essayé, je ne sais pas s'il faut remplir d'autres colonnes. Soit j'ai toujours la même erreur, soit la conversion n'est pas supportée, soit autre type d'erreur.

    je mets en pièce jointe la base (enlever ".doc" que j'ai dû ajouter pour que le fichier soit accepté)
    data.db.doc

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Par défaut
    Citation Envoyé par ALWEBER Voir le message
    Change ton format Date en DateTime
    Le contenu du champ est le même. 48338 devient 48338,00
    Time est la partie décimale qui est à zéro dans ton cas
    d'après la doc, sqlite n'accepte pas la commande permettant de modifier le type d'un champ.

    Donc j'ai créé un nouveau champ de type datetime puis recopié les valeurs et supprimé le champ de type date.
    dans dbbrowser, l'affichage est inchangé : 48338 reste 48338 dans le nouveau champ.

    et dans Delphi, toujours la même erreur, bien que le champ soit reconnu comme de type datetime

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

Discussions similaires

  1. Probléme avec champ date
    Par locs dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/02/2007, 10h04
  2. Problème sur une requete avec champ date
    Par islande dans le forum Access
    Réponses: 2
    Dernier message: 21/09/2006, 19h39
  3. problème de syntaxe avec champ date
    Par mussara dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 03/02/2006, 16h19
  4. [SQL] problème avec les date et les group By
    Par Stef784ever dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/11/2004, 09h18
  5. Interbase - dbExpress -> problème avec les dates
    Par marghett dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/07/2004, 03h55

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