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

 Delphi Discussion :

Problème de date sur SQLite


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mars 2018
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2018
    Messages : 59
    Points : 30
    Points
    30
    Par défaut Problème de date sur SQLite
    Bonjour à tous (ou Bonsoir) "cela dépend du moment ou ce post sera lu...."

    Delphi Tokyo en mode FMX
    SQLite

    J'ai un problème avec les dates sur une base de données SQLite lorsque j'ajout un enregistrement soit avec une TuniTable ou avec Tuniquery (composant UNIDAC) et composant Tdateedit lors du post la date enregistré sur la base de donnée n'est pas celle sélectionnée dans le composant mais une date très lointaine du genre (01/07/1896) ou (01/07/1970) et lorsque je jette un coup d'œil dans la table la date est genre 00/00/0000...meme chose lorsque je fait une modification (tunitable.edit) ou (update Table set ....)


    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
     
      with datamodule3 do begin
        if not( Ver_ABM.State in [dsInsert,dsedit]) then begin
     
          if abm_r.State in [dsInsert] then begin
               abm.close;
               abm.SQL.Clear;
               if (date >= strtodate(dateedit1.text)) and (date <=strtodate(dateedit2.text)) then begin
                 va:=true;
               end else begin
                   va:=false ;
                   end;
               abm.SQL.Add('BEGIN TRANSACTION; insert into abonnement(dated_abm,datef_abm,dure_abm,prix_abm,paiement_abm,tarification_abm,validite_abm,id_ab,rest_abm,remise_abm,prix_tarif_abm) ' );
               abm.SQL.Add( 'values('+FORMATDATETIME('yyyy-mm-dd',strtodate(dateedit1.text))+','+FORMATDATETIME('yyyy-mm-dd',strtodate(dateedit2.text))+','+quotedstr(comboedit1.Text)+','+quotedstr('0')+','+quotedstr('False')+','+quotedstr(ComboBox2.Items.Text)+','+va.ToString+','+quotedstr(ab.FieldByName('id_ab').asString)+','+quotedstr('0')+','+quotedstr(edit3.Text)+','+quotedstr(label25.Text)+'); commit;');
               abm.Execute;
     
          //   abm_r.Cancel;
     
     
          end;
    Dans l'attente d'une aide de votre part.... cordialement .

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    ton code n'est pas bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      ShowMessage('values('+FORMATDATETIME('yyyy-mm-dd',strtodate(dateedit1.text)) + ')');
     
      ShowMessage('values('''+FORMATDATETIME('yyyy-mm-dd',strtodate(dateedit1.text)) + ''')');
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    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 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    si vous utilisiez une requête paramétrée vous auriez beaucoup moins de problèmes et d'erreurs de syntaxe.
    Bien sûr cela oblige à un peu plus de code, je ne connais pas toutes les subtilités d'Unidac donc il y a certainement quelques erreurs qui trainent

    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
     
    with datamodule3 do begin
        if (Ver_ABM.State in [dsInsert,dsedit]) then begin
    abm.Close;
    abm.SQL.Clear;
    if abm_r.State in [dsInsert] then
    begin
    abm.SQL.Add('insert into abonnement(dated_abm,datef_abm,dure_abm,prix_abm,paiement_abm,tarification_abm,validite_abm,id_ab,rest_abm,remise_abm,prix_tarif_abm) ' );
    abm.SQL.Add( ':date1,:date2,:combo1,0,'+quotedstr('False')+',:combo2,:va,:idab,0,:ed3,:lbl25');
    abm.Prepare;
    abm.ParamByName('date1').asDate:=dateedit1.Date;
    abm.ParamByName('date2').asDate:=dateedit2.Date;
    abm.ParamByName('combo1').asString:=ComboEdit1.text;
    abm.ParamByName('combo2').asString:=ComboBox2.Items.text; // là je suis surpris !
    abm.ParamByName('va').asFloat:=va; // ou asinteger ?
    abm.ParambyName('idab').asString:=ab.FieldByName('id_ab').asString;
    abm.parambyname('ed3').asString:=edit3.text;
    abm.parambyname('lbl25').asString:=label25.text;
    end 
    else begin 
     // préparation requête Update selon le même principe (ne pas oublier la clause Where)  
    end;
    Connexion.StartTransaction;
    Abm.Execute;
    Connexion.Commit;
    end; // if [dsinsert,dsEdit]
    de même mettre les SQL en constante sera peut-être plus lisible
    les strtodate et formatage me font tiquer surtout qu'il y a la propriété date pour un TDateEdit
    bref il y a beaucoup à améliorer sans même parler des Livebindings
    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

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mars 2018
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2018
    Messages : 59
    Points : 30
    Points
    30
    Par défaut
    Merci à vous tous pour l'aide si précieuse que vous apportez...
    j'ai exploré toutes vos suggestions mais entre temps j'ai du fouiner, googler et appeler a droite et a gauche...

    la solution était dans l'utilisation du "QUOTEDSTR" ....

    ce qui a doné un code qui ressemble à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    code...
    code...
    ..
    ..
     if (date >= strtodate(dateedit1.text)) and (date <=strtodate(dateedit2.text)) then begin
                 va:=true;
               end else begin
                   va:=false ;
                   end;
               abm.SQL.Add('BEGIN TRANSACTION; insert into abonnement(dated_abm,datef_abm,dure_abm,prix_abm,paiement_abm,tarification_abm,validite_abm,id_ab,rest_abm,remise_abm,prix_tarif_abm) ' );
               abm.SQL.Add( 'values('+quotedstr(FORMATDATETIME('yyyy-mm-dd',strtodate(dateedit1.text)))+','+quotedstr(FORMATDATETIME('yyyy-mm-dd',strtodate(dateedit2.text)))+','+quotedstr(comboedit1.Text)+','+quotedstr('0')+','+quotedstr('False')+','+quotedstr(ComboBox2.Items.Text)+','+va.ToString+','+quotedstr(ab.FieldByName('id_ab').asString)+','+quotedstr('0')+','+quotedstr(edit3.Text)+','+quotedstr(label25.Text)+'); commit;');
               abm.Execute;
    ...suite du code.
    mais ceci dit et fait je trouve que l'utilisation des requêtes paramétrées est une meilleur structuration du code...
    Merci à tous

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

Discussions similaires

  1. Problème échelle dates sur un graphique
    Par abbba dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/04/2011, 18h24
  2. Problème de date sur la fonction BETWEEN
    Par Fcapitaine dans le forum SQL
    Réponses: 3
    Dernier message: 06/08/2010, 17h24
  3. Problème de date sur HOTMAIL
    Par devdev dans le forum Internet
    Réponses: 1
    Dernier message: 07/09/2008, 19h21
  4. Problème champs date sur Oracle 9i
    Par caiman2 dans le forum SQL
    Réponses: 2
    Dernier message: 25/01/2008, 09h58

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