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 :

Inserer ou mettre a jour une date


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut Inserer ou mettre a jour une date
    Bonjour
    Petite question :
    Voila je dois faire une mise a jour de ma base de données!
    A partir d'un grid contenant les informations de la table, je peux les modifier en editant une des cellules du grid. Ensuite je fais mon UPDATE!
    Pour les chaines, entier mon update fonctionne tre bien!!
    Cependant j'ai un souci concernant les champs de la table qui sont du type :date/heure.

    Quelle est la syntaxe a réaliser?.
    J'ai essayer d'utiliser la methode 'StrToDateTime' avec la fonction 'FormatDate' mais ca ne marche!

    Si quelqu'un peut m'aider?
    Voila mon code correspondant :
    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
     
     requete := 'UPDATE ' + ListTable.Items.Strings[ListTable.ItemIndex]
                             + ' SET ' + GridTable.Cells[Acol,0] + ' = ';
     
        if GridStructureTable.Cells[2,ACol+1] ='INTEGER' then
            requete := requete + GridTable.Cells[Acol,ARow]
        else if GridStructureTable.Cells[2,ACol+1] ='DATETIME' then
            requete := requete + quotedStr(StrToDateTime(GridTable.Cells[Acol,ARow]))
        else if GridStructureTable.Cells[2,ACol+1] ='DOUBLE' then
            requete := requete + GridTable.Cells[Acol,ARow]
        else
            requete := requete + quotedStr(GridTable.Cells[Acol,ARow]);
     
        requete := requete+ ' WHERE ' + GridTable.Cells[0,0] +' = ' + quotedStr(GridTable.Cells[0,ARow]);
        //Il ne s'agit pas d'une case de la derniere ligne
        Connexion.connexion;
        if Connexion.estConnecte then
        begin
          Connexion.insert(requete);
          MiseAJourGrids(Sender);
        end;
    end;
    Merci

  2. #2
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    utilise une requete parametrés sa t'evitera plusieurs controle.
    tu insera

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    else if GridStructureTable.Cells[2,ACol+1] ='DATETIME' then
          begin
            requete := requete +':MyDateparm'+intoToStr(I);
         Inc(I);
        end;

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Oué daccor mais tu enten koi par requete parametre?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Personne peut me dire la syntaxe SQL qu'il utilise pour inserer une valeur dans une table dont le champ est du type : Date/heure sous Access??

    C tout ce que je savoir?
    et de preference a partir d'une chaine de caractere qui contient cette date!!!

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQL := 'INSERT INTO MaTable (MaDate) Values (#' + FormatDateTime('mm/dd/yyyy hh:mm', Now) + '#)';
    @+ Claudius

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Alors j'ai essayé ta solution de la maniere suivante en fonction de mon grid:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     else if GridStructureTable.Cells[2,ACol+1] ='DATETIME' then
            requete := requete + FormatDateTime('mm/dd/yyyy hh:mm',StrToDateTime(GridTable.Cells[Acol,ARow]))
    et j'obtiens le message suivant:
    Le projet ... a provoqué une classe d'exception ECOnvertError avec le message "2005-09-05 00:00:00" ne correspond pas à une date et une heure correctes

    Voila

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Fais un test d'insertion directement dans Access, en précisant une date, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     INSERT INTO MaTable (MaDate) VALUES (#04/19/2007 17:05#);
    pour voir !

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    J'ai essayé et ca ne marche pas! j'ai le message :
    Syntaxe UPDATE incorrecte.
    Pour plus d'info : le nom de champ est surligné alors que le nom est correct

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Donnes-nous la requête Insert que tu as essayé sous Access.

    @+

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    voila : UPDATE Acompte SET Date =#01/02/2001 00:00:00# where Code = '00000001'

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Citation Envoyé par davos56
    voila : UPDATE Acompte SET Date =#01/02/2001 00:00:00# where Code = '00000001'
    Ne JAMAIS, je dis bien JAMAIS nommé un champ 'Date'. Voilà ton problème renomme ce champ, et cela devrait aller mieux.

    @+ Claudius

  12. #12
    Membre actif Avatar de liazidf
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 281
    Points : 261
    Points
    261
    Par défaut DBGrid et UPdate
    Salut,
    Je me pose une question, pourquoi vouloir utiliser un dbgrid pour mettre à jour une table à l'aide des instruction sql (UPDATE), je trouve que c'est plus simple d'associer votre DBgrid directement à la table.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Et bien si je pouvais, je le ferai!!
    Ca m'eviterai beaucoup de probleme!
    Seulement je n'utilise pas de composant de connexion ADO ou autre.
    J'ai ma propre classe de connexion qui utilise ODBC directement via des requetes SQL.

    Et d'ailleurs comment lié un AdvStringGrid à la connexion?

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Cl@udius

    Ne JAMAIS, je dis bien JAMAIS nommé un champ 'Date'. Voilà ton problème renomme ce champ, et cela devrait aller mieux.
    Et bien le gros probleme est que mon application repose sur la base de données d'un logiciel officiel vendu! Je n'ai donc pas le droit de modifier la structure de la base de données!! Donc voila je dois faire avec!!!

  15. #15
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Bon alors essaye cette requête toujours dans Access pour tester:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE Acompte SET [Date] = #01/02/2001# where Code = '00000001'
    @+

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Ca marche dans Access et ca marche dans mon programme!

    Par contre le format d'affichage de la date n'est pas la meme dans mon grid que dans ma base :
    dans ma base la date : 01/01/2001 par exemple
    dans mon grid : 2001-01-01

    Comment que ca je se fais? Dois je faire un formatDate egalement lors de l'insertion dans le grid?

  17. #17
    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 davos56
    Et bien le gros probleme est que mon application repose sur la base de données d'un logiciel officiel vendu! Je n'ai donc pas le droit de modifier la structure de la base de données!! Donc voila je dois faire avec!!!
    Tu peux donner le nom du logiciel que je le note dans les logiciels à éviter, car c'est une des régles élémentaires de programmation que d'éviter de nommer les noms de champs/variables comme des mots réservés de la base de données ou du logiciel de développement.


    Sinon pourquoi être passé par des composants/méthodes extérieurs alors que les composants Ado/DbExpress te permette de faire cela ?
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    En fait il s'agit d'une suite de logiciel developpé "APIBAT". Et leur structure de table sous Access est composé de 170Tables toutes reliés les unes les autres.

    En fait c'est un "choix" de l'editeur. Enfin bref, je dois faire avec!!

  19. #19
    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 Malatar
    Sinon pourquoi être passé par des composants/méthodes extérieurs alors que les composants Ado/DbExpress te permette de faire cela ?
    Et pour cette question ?


    Citation Envoyé par davos56
    Par contre le format d'affichage de la date n'est pas la meme dans mon grid que dans ma base :
    dans ma base la date : 01/01/2001 par exemple
    dans mon grid : 2001-01-01

    Comment que ca je se fais? Dois je faire un formatDate egalement lors de l'insertion dans le grid?
    L'affichage que tu vois dans ACCESS correspond à tes configurations régionales de windows (donc si tu as un format de date en MM/DD/YYYY, tu auras cet affichage dans ACCESS)
    Vu que tu reçois une date au format YYYY-MM-DD, c'est ce que dois te renvoyer le pilote, donc tu vas être obliger de reformater la date dans ta Grid.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

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

Discussions similaires

  1. Mettre a jours une Date (java.sql.Date)
    Par wajdy dans le forum JDBC
    Réponses: 7
    Dernier message: 11/12/2010, 19h43
  2. Comment mettre à jour une date ?
    Par Hokagge dans le forum MFC
    Réponses: 6
    Dernier message: 22/03/2006, 13h30
  3. Réponses: 2
    Dernier message: 03/01/2006, 15h58
  4. [Dates] Soustraire un nombre de jour à une date
    Par lesgars dans le forum Langage
    Réponses: 2
    Dernier message: 09/12/2005, 15h43
  5. peut on mettre a jour une ancienne version de postgresql
    Par gballou dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 28/11/2005, 16h01

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