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 :

Rechercher par date Mysql avec delphi


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 37
    Points : 20
    Points
    20
    Par défaut Rechercher par date Mysql avec delphi
    Bonjour à tous
    voila j'ai conçu une application Delphi de gestion de patients, qui utilisait une BDD ACCESS et suite à un problème j'ai basculé sur MySql et tout fonctionne sauf quand je fais une recherche par date de consultation je n'y arrive pas voila le dernier code que j'ai essayé et que j'ai trouvé sur le net:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL.Add('SELECT * From TablePatient'
    +' where DateCons = :A1 AND DateCons < :A2 ');
    Parameters.ParseSQL(DM.APatient.SQL.Text, True);
    Parameters.ParamByName('A1').Value:=DDebut.Date-1;
    Parameters.ParamByName('A2').Value:=DFin.Date;
    Open;
    ExecSql;
    le code que j'utilisait avec ACCESS était semblable à celui la et fonctionnait bien.
    Je vous remercie pour votre aide.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    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 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Parameters.ParamByName('A1').AsDateTime := DDebut.Date-1 ; ?
    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 !

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Plutôt que cette requête (et le ddebut-1) , j'aurais utilisé la condition BETWEEN

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * From TablePatient  where DateCons BETWEEN :A1 AND :A2

    Ceci étant , un autre piège peut être que les dates aient été stocké en Datetime (ou TimeStamp) , on ne sait également pas d'où viennent ces DDate.Date et Dfin.Date
    (est-ce bien une date ou un datetime encore une fois ?)
    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
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Bonjour et merci pour ta réponse,
    désolé , j'utilise des TDateTimePicker (DDebut et DFin).
    j'ai déja essayé ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL.Add('SELECT Id_Patient, DateCons, Nom, Prenom, DateNais, Age,'
             +'Adresse, Telephone, fixe, Profession From Patient'
             +' where WHERE DateCons BETWEEN :A1 AND :A2');
    Parameters.ParseSQL(DM.APatient.SQL.Text, True);
    Parameters.ParamByName('A1').Value:=DDebut.Date;
    Parameters.ParamByName('A2').Value:=DFin.Date;
    Open;
    ExecSql;
    mais il me renvoi cette erreur
    Nom : erreur.JPG
Affichages : 606
Taille : 29,5 Ko
    alors si vous avez une suggestion

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    alors si vous avez une suggestion
    utiliser un version plus récente de mySQL , qui supporte le BETWEEN , je suis sur que BETWEEN est supporté dorénavant

    j'utilise des TDateTimePicker
    je ne sais plus si dépendant des versions de Delphi , le résultat TDateTimePicker.Date renvoie bien juste la date et pas Date,Heure .
    Je n'ai pas le temps de m'y pencher maintenant (Pâques=Aid el Kebir oblige)

    au pire avec une vieille version de MySQL ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Id_Patient, DateCons, Nom, Prenom, DateNais, Age,'
             +'Adresse, Telephone, fixe, Profession From Patient'
             +' where WHERE DateCons >= :A1 AND DateCons<=:A2'
    devrait fonctionner

    Il faut juste vérifier cette histoire de TimeStamp
    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

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 37
    Points : 20
    Points
    20
    Par défaut
    Bonjour,
    voila finalement le mon probleme vient du fait que mysql stock les date au faormat yyyy-dd-mm, et que le TDateTimePicker est au format français et malgré la modification du format (TDateTimePicker.format ) il renvoi toujours la date en français. J'ai vérifié avec la fonction showmessage.
    j'ai songé a deux solution:
    1. mettre le champ danteCons au type text .
    2. créer un TDateTimePicker avec le format yyyy-dd-mm puis décoder la date de mon TDateTimePicker et la recoder selon le TDateTimePicker que j'ai crée.
    Sinon s'il existe une solution pour forcer le TDateTimePicker à prendre le format anglais.

    Merci à vous tous.

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    where WHERE de toute façon ça va pas le faire

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Cela va faire plaisir a SQLPro si je dis 'mysql de ' , je viens de lire que les dates ne sont pas stockées en numérique (et même pas contrôlées !)

    qu'a cela ne tienne il est est facile de faire la requête (en enlevant le Where Where )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL.Add('SELECT * From TablePatient'
    +' where DateCons BETWEEN :A1 AND :A2 ');
    Parameters.ParseSQL(DM.APatient.SQL.Text, True);
    Parameters.ParamByName('A1').asString:=FormatDateTime('AAAA-MM-JJ',DDebut.Date);
    Parameters.ParamByName('A2').asString:=FormatDateTime('AAAA-MM-JJ',DFin.Date);
    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

Discussions similaires

  1. Faire une recherche par date
    Par ghnawfal dans le forum JSF
    Réponses: 13
    Dernier message: 11/04/2008, 07h35
  2. recherche par date vba excel
    Par fred014 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/03/2007, 13h35
  3. Problème de connexion à une Db MySql avec delphi
    Par Lctl65 dans le forum Bases de données
    Réponses: 6
    Dernier message: 18/11/2006, 17h20
  4. Connexion distante à une BD MySQL avec delphi ?
    Par maamar1979 dans le forum Bases de données
    Réponses: 13
    Dernier message: 15/11/2006, 07h57
  5. Moteur de recherche par date
    Par Prue dans le forum ASP
    Réponses: 17
    Dernier message: 27/08/2003, 16h07

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