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 :

Requête SQL et calcul de temps


Sujet :

Bases de données Delphi

  1. #1
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut Requête SQL et calcul de temps
    bonjour,
    Le temps n'est pas au beau fixe

    Pour moi en tout cas.

    mon probleme est le suivant

    une table calcul_heures
    id
    debut:times
    fin;times
    duree

    J'arrive a calculer la difference de temps lors de l ajout d un enregistrement mais via un Ttable.

    Lors d une modification du temps ,j ai une requete sql qui met a jour le debut et la fin mais pas la duree.

    J'ai voulu faire un select debut, fin et soustraire ceux ci , mais ca marche pas car le champs du select sont soit une chaine soit un variant mais pas datetime ou time donc le calcul de marche pas..

    j'ai essaye avec variant ou integer , sachant que ca marcherai pas non plus , mais bonn..

    Donc je ne sais pas comment faire pour mettre a jour la duree..

    merci
    a+
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Le Calcul de date est toujours un problème, quasiment chaque langage a un ensemble de fonction pour manipuler les dates, le SQL étant il me semble pauvre à ce sujet à la base ... tu es en quelle DB ?
    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

  3. #3
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut
    c'est mysql

    le calcul je suis arrive a le faire avec un TTable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    table1.fields[1].asdatetime:=table1.fields[2].asdatetime - table1.fields[3].asdatetime
    C'est pas le code exact, mais bon du fait que ca soit datetime comme le type du champ de la table, ca passe bien..

    Mais sur la requete sql, je sais pas pourqoui mais le champ est string ou variant...

    Il faut peutre le precise quelque par ou formate le champ...

    merci
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    MySQL, oui, tu as DATE_SUB, cela pourrait t'aider ?
    D'ailleurs, il est conseillé de mettre les dates dans les requêtes sous la forme "YYYY-MM-DD", et te colonnes sont bien en type "DATE" ?

    Personnellement, j'utilise TMyQuery fourni dans MyDAC de Core Lab, donc il est un peu plus exact sur les types MySQL car utiliser un TTable, donc le BDE qui lui même accède via ODBC au driver MySQL, c'est plus lent et risque de perte de fiabilité, tu devrais regarder les TADOQuery qui retirait la couche BDE, pour utiliser directement le driver ODBC
    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

  5. #5
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut
    Merci je vais regarde

    a+
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

  6. #6
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut
    le format c'est time et non datetime

    je n'ai pas reussi a faire tourne la requete

    peux tu la corrige

    merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    query1.SQL.Text:=('SELECT DATE_FORMAT '+('1997-10-04 22:23:00' '%H:%i:%s')+' from calcul_heures ');
     
    from calcul heures n'est pas bon je sais,je pensais remplace 1997,etc..par debut un champ de la table
    Le composant site est il gratuit???

    merci
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

  7. #7
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    quel version de delphi tu as??
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  8. #8
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut
    bonjour,
    j'ai delphi 7

    j utilise des ttable pour l access a la base mysql..

    je sais , y a mieux mais je debute, donc j'ai pris le plus simple pour moi...
    Et le soft etant bien avance je me vois mal refaire tout..


    Merci
    a+
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

  9. #9
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    suivez ce sujet pour utlisé ADO
    bien sûr il y a autre example sur developpez
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  10. #10
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut
    Bonjour,
    Le probleme est pas tant l object utilise mais c'est surtout la valeur retourne..

    Les champ etant de type Time dans la table.

    mais la valeur retourne par le select est de type string,, Why

    j'ai du mal a suivre mais je regarde l 'exemple ado..
    merci
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    C'est justement le problème du BDE qui n'interprète pas correctement, les données, d'ailleurs, il me semble que l'ADO n'est optimale avec MySQL qu'à partir de la BSD 2006 ou 2007 ...

    Ta requête ne compile pas en théorie ? pour des +( et )+ ???
    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

  12. #12
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut
    Oui en faite

    je vais develloper un peu

    Un planning (TMSPlanner nonBD, je precise).
    L utilisateur cree un RDV,
    le rdv s enregistre dans 2 table une pour reafficher le planning(Tplanning) et une pour calculer la duree du RDv(calcul_heures).

    Jusque la pas de probleme, le calcul de duree se fait ..

    L utilisateur modifie via un dragdrop un rdv, j'arrive a modivie la table planning, la table calcul_heures mais pas dans sont integralitée, puisque le champ duree n'est pas modifie.
    Donc une requete sql select debut , fin from calcul-heures.(ca c 'est pour des essaie, il est plus simple de faire un update complet en prenat le champ duree et en faisant duree = fin-debut, mais ca palntais d ou le selecrt en test)
    Breff..

    donc ma requete select

    et je test a vec 2 variable et un edit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    a,b:ttime;
     
    a:=fin 
    b:=debut
    edit:=a-b
    mais la ou ca cloche, c'est que fin et debut du select ne sont pas de type Time mais string.

    donc ca marche pas..

    J'espere etre un peut plus clair mais je n'ai pas tout vos thermes...

    merci a
    vous
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

  13. #13
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut
    Bon
    ben meme avec ado ca marche pas...

    je continue de chercher...
    a+
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

  14. #14
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    As tu essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE TablePlanning
    SET Duree = DATE_SUB(Date_Heure_Fin, Date_Heure_Debut)
    WHERE ID_TablePlanning = ...
    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

  15. #15
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut
    Non
    Car je n'avais pas compris le fonctionement

    merci
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

  16. #16
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut
    Bon ben toujours pas ca!!

    ca plante , une erreur de sytaxe

    date_sub c'est pour des dates moi c'est des heures..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    'UPDATE calcul_heures SET Duree = DATE_SUB(Fin, Debut) WHERE idtmesplanner = 2'
    j'ai du mal sur ce coup la
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

  17. #17
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut
    Bon je pense avoir trouve grace a vous

    SELECT TIMEDIFF

    mainteant je test l update

    merci
    a+
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

  18. #18
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Points : 1 194
    Points
    1 194
    Par défaut
    bon ca marche en test je passe en reel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ////
    adoquery1.SQL.Clear;
    adoquery1.SQL.Text:=('SELECT TIMEDIFF(fin,  debut)) from calcul_heures') ;
    adoquery1.Open;
    edit1.text:=formatdatetime('hh:nn',adoquery1.fields[0].AsVariant) ;
    adoquery2.SQL.Clear;
    adoquery2.SQL.Text:=('UPDATE calcul_heures SET Duree = '+quotedstr((edit1.text))+' WHERE idtmesplanner = 2');
    adoquery2.ExecSQL;
    merci
    a+
    Une porte peut -etre ouverte ou....rouge!!!!:mouarf

Discussions similaires

  1. [MySQL] Problème de requête SQL pour calculer des stats
    Par k2006 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/05/2009, 18h23
  2. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29
  3. Requête pour calculer le temps entre deux dates
    Par Badboy62cfp dans le forum Access
    Réponses: 2
    Dernier message: 19/05/2006, 13h50
  4. Réponses: 2
    Dernier message: 04/04/2006, 11h46
  5. [MySQL] Afficher le temps mis pour executer une requête SQL
    Par micatmidog dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/09/2005, 11h23

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