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 une date (datetimepicker) dans une bd


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut inserer une date (datetimepicker) dans une bd
    bonjour
    je travaille avec Delphi7 / sql server2008 pour développer une application de gestion.
    j'ai utilisé des Datetimepicker pour les champs date. pour insérer dans la base de donnees las dates, j'ai utilisé le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ADOTable1.fieldbyname('monchamp1').Value:= datetimepicker1.date;
    ADOTable1.fieldbyname('monchamp2').Value:= datetimepicker2.date;..
    ca marche pas, ca donne l'erreur
    "echec de la conversion de la date et/ ou l'heure a partir d'une chaine de caracteres."
    j'attend votre aide. merci d'avance

  2. #2
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Bonjour,

    je n'utilise pas Datetimepicker qui est un composant VB (?) mais le message me semble dire qu'il y a soit un problème de formats incompatibles dans les dates, soit que tes champs ne sont du bon type (date ou String ?)

    regarde ce lien :

    DateTimePicker Format

    A+

    Charly

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Evite le TADOTable
    Utilise un TADOQuery et Parameters->ParamByName, et force le DataType à ftDate puis affecte le Value
    Tu as plein de sujet sur le forum qui traite cela

    Le TDateTimePicker est un control windows au même titre que le TComboBox, TListView, TTreeView ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Effectivement, merci ShaiLeTroll , TDateTimePicker.date est de type Tdate d'après l'aide de D7 :

    TDate représente un type spécial de valeur TDateTime sans partie décimale. Une valeur TDate représente le nombre de jours qui se sont écoulés depuis le 30 décembre 1899.

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,

    Evitez la propriété Value. Elle est de type variant (valeur dont le type peut changer à l'exécution), va accepter tout ce que vous lui affectez quel qu’en soit le type (integer, string, etc, type structuré et pointeur exclus toutefois), mais dès le renvoi vers la base de données, la conversion de type va très souvent échouer...

    En écrivant ce qui suit, vous éviterez le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ADOTable1.FieldByName('monchamp1').AsDateTime := datetimepicker1.date;
    ADOTable1.FieldByName('monchamp2').AsDateTime := datetimepicker2.date;
    Ensuite, comme l'a dit @ShailLeTroll, évitez les TTable avec une base client/serveur. Si votre base à des millions d'enregistrements, à l'ouverture de la table, vous allez ramener TOUTES les lignes vers le client : saturation de la mémoire, lenteur pour obtenir et afficher les données, surcharge du serveur...
    Philippe.

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    merci. ça a marché pour le datetimepicker .
    mais lors de la navigation avec le dbnavigator, les datestimepicker ne retournent pas la date du champs de la base de données (c évident). je n'arrive pas à résoudre ce pb

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 111
    Points : 171
    Points
    171
    Par défaut les datestimepicker ne retournent pas la date du champs de la base de données
    bon jour
    les datestimepicker ne retournent pas la date du champs de la base de données
    c'est normale puisque datestimepicker n'est pas destiner a une table

    comme dis Mr ShaiLeTroll :

    Le TDateTimePicker est un control windows au même titre que le TComboBox, TListView, TTreeView ...

    la meilleur solution est d'utiliser dbedit pour l'affichage
    mai en peu aussi utiliser datetimepicker1 en ajoutent l'evenement AfterScroll a votre adotable comme suite



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.ADOTable1AfterScroll(DataSet: TDataSet);
    begin
       datetimepicker1.date:=ADOTable1.FieldByName('monchamp1').AsDateTime;
    end;
    c'est a dire vous faite un rafrechissement votre datetimepicker a chaque deplacement du pointeur de la table

    bon courage .

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par yayas Voir le message
    bonjour
    je travaille avec Delphi7 / sql server2008 pour développer une application de gestion.
    j'ai utilisé des Datetimepicker pour les champs date. pour insérer dans la base de donnees las dates, j'ai utilisé le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ADOTable1.fieldbyname('monchamp1').Value:= datetimepicker1.date;
    ADOTable1.fieldbyname('monchamp2').Value:= datetimepicker2.date;..
    ca marche pas, ca donne l'erreur


    j'attend votre aide. merci d'avance
    voir aussi le composant raize componnent (RC5)
    y compris DBdatetimepicker
    bon chance

  9. #9
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 132
    Points
    132
    Par défaut
    n'as tu pas par hasard déclaré le champs 'date' comme string ?
    si non voir le fichier joint
    Fichiers attachés Fichiers attachés

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par MIWAN Voir le message
    n'as tu pas par hasard déclaré le champs 'date' comme string ?
    si non voir le fichier joint
    les deux codes sa marche bien
    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
    27
    28
    29
    30
    31
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    ADOQuery1.Active:=true;
    ADOTable1.Active:=true;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    DataSource1.DataSet:=ADOQuery1;
    adoquery1.Edit;
    //adoquery1.Append;
    adoquery1.fieldvalues['D_ate']:= datetimepicker1.date;
    adoquery1.fieldvalues['Date2']:= datetimepicker2.date;
    adoquery1.Post;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    DataSource1.DataSet:=ADOTable1;
    ADOTable1.Edit;
    ADOTable1.fieldvalues['D_ate']:= datetimepicker1.date;
    ADOTable1.fieldvalues['Date2']:= datetimepicker2.date;
    ADOTable1.Post;
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
    ADOQuery1.Active:=False;
    ADOTable1.Active:=False;
    end;

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    salut.
    MERCI à tous pour votre aide. J'ai utilisé le ADOQuery et les DBEdit pour la date. ça marche tres bien. (je m'excuse pour le retard)
    par contre j'ai un pb au niveau de mes statistiques: je n'arrive pas à formuler la requête permettant d'avoir le nombre de personnes (table de personne) global et selon des critères service, sexe , diplome, situation familiale...

    mon code :
    j'utilise une requête pour avoir le nombre d'hommes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rqt.sql.clear;    
    rqt.sql.add ( 'SELECT COUNT(*) AS montotal from personne WHERE Sexe=''Homme''');    
    rqt.active;= true;
    puis un dbedit qui a le datafield : montotal

    en cliquant sur un button, ça marche.
    ce que je veux c'est avoir toutes les stats en une seule interface et directement (pas trop de buttons).

    merci

  12. #12
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 111
    Points : 171
    Points
    171
    Par défaut
    bon jour
    pour une simple réponse
    utiliser a chaque requette son propre adoquery et ecrire directement votre requette dans l'adoquery pas besoin de ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rqt.sql.clear;    
    rqt.sql.add ( 'SELECT COUNT(*) AS montotal from personne WHERE Sexe=''Homme''');    
    rqt.active;= true;
    vous ecrivez seulement
    ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'SELECT COUNT(*) AS montotal from personne WHERE Sexe='Homme'
    dans la proprieté SQL de votre adoquery
    et associer a chaque requette une dbedit
    et noublie pas de metre la propriete active de chaque adoquery à true a chaque ouverture de votre fenétre onactivate pour le rafrechisement des donneés

    bon courage

  13. #13
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonjour Tarekk,
    merci pour ta réponse. Est ce il ya la possibilité d'e ne pas utiliser autant d'adoquery que mes critères de sélection , seulement un adoquery et changer le SQL ou ...


    Merci

  14. #14
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 111
    Points : 171
    Points
    171
    Par défaut
    bon jour
    Est ce il ya la possibilité d'e ne pas utiliser autant d'adoquery que mes critères de sélection , seulement un adoquery et changer le SQL ou ...
    oui mais utiliser autant de programmation je vous propose d'utilisez des 'edit' au lieux de dbedit et apres chaque requete affecter le resultat dans le caption de edit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    etit1.caption := (le resultat sql)
    aprés la conversation de type de donneé bien sure inttostr ....
    je pense que la 1ere solution est plus pratique que celle ci .
    bon courage.. yayas

  15. #15
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci Tarek pour ta réponse.

    je cherche aussi d'autres types de solutions?

    j'attend votre aide .
    Merci

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Pourquoi pas une boucle ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i:=0 to StringListMesRequetes.Count-1 do
    begin
      rqt.sql.clear;    
      rqt.sql.add ( StringListMesRequetes[i] );    // ou  rqt.sql.Text := StringListMesRequetes[i] );
      rqt.active;= true;
      StringListMesRésultats.Add( DBEdit.Value {?? enfin, la chaîne contenant le champ résultat} );
    end;
    et chargement de la liste des requêtes à partir d'un fichier ou de chaînes en ressources ?
    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 !

  17. #17
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci tourlourou, mais j'ai pas vraiment compris comment faire avec cette boucle.
    pouvez vous me donner quelques étapes. .
    merci

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Si j'ai bien compris, vous souhaitez obtenir plusieurs statistiques à patir de l'appui sur un minimum de boutons, chaque chiffre étant issu d'une requête SQL.

    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
    var
      StringListMesRequetes, StringListMesRésultats: TStringList;
     
    begin // FormCreate, par exemple (ne pas oublier de détruire les StringList au FormDestroy)
      StringListMesRésultats := TStringList.Create;
      StringListMesRequetes := TStringList.Create;
      // puis ajout des reqêtes une à une
      StringListMesRequetes.Add( 'SELECT COUNT(*) AS montotal from personne WHERE Sexe=''Homme''' );
      StringListMesRequetes.Add( 'SELECT COUNT(*) AS montotal from personne WHERE Sexe=''Femme''' );
      // etc.
      // ou à partir d'un fichier
      StringListMesRequetes.LoadFromFile('C:\MesRequetes.txt');
    end;
     
    // code OnClick du bouton "statistiques"
      StringListMesRésultats.Clear
      for i:=0 to StringListMesRequetes.Count-1 do
      begin
        rqt.sql.clear;    
        rqt.sql.add ( StringListMesRequetes[i] );    // ou  rqt.sql.Text := StringListMesRequetes[i] );
        rqt.active;= true;
        // ajout du résultat (champ MonTotal lié à un DBEdit) à une liste des statistiques, parallèle à celle des requêtes 
      StringListMesRésultats.Add( DBEdit.Text );
      end;
    ensuite, à vous d'exploiter la liste des statistiques
    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 !

  19. #19
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci tourlourou; je vais l'essayer.
    merci

  20. #20
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 111
    Points : 171
    Points
    171
    Par défaut
    bon jour
    on peux aussi utiliser une seule requet selon des critères d'un champ

    exp: sexe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT sexe COUNT(*) 
    FROM personne
    GROUP BY  sexe
    exp diplome
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT diplome, COUNT(*) 
    FROM personne
    GROUP BY  sexe
    ...
    bon courage

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  2. Une date butoire dans une expression régulière
    Par zooffy dans le forum ASP.NET
    Réponses: 4
    Dernier message: 14/02/2008, 10h11
  3. Insertion d'une date nulle dans une table
    Par Maxi-môme dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 04/07/2007, 10h52
  4. Réponses: 2
    Dernier message: 21/03/2007, 16h06
  5. [Date] création d'une date à envoyer dans mySql
    Par michaelbob dans le forum JDBC
    Réponses: 4
    Dernier message: 15/09/2005, 17h59

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