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 :

probléme avec une date/string dans un CommandText


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Points : 65
    Points
    65
    Par défaut probléme avec une date/string dans un CommandText
    Bonjour

    voila j'ai le bout de code suivant dans mon application:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DataModule3.DtSprem.CommandText:='SELECT count(distinct ADH_ID) FROM gl_class_10 WHERE COM_DATE BETWEEN '+QuotedStr(datedeb)+' AND '+QuotedStr(datedujour)+'';
     
    DataModule3.DtSprem.Active:=true;
    count:=DataModule3.DtSprem.Fields[0].AsInteger;
    DataModule3.DtSprem.Active:=false;
    +datedeb et datedujour sont tous les deux des variables de type string de forme 12/05/2005

    +la variable count est un integer

    Lorsque que je saisie cette requete dans sqlserver par ex:
    SELECT count(distinct ADH_ID) FROM gl_class_10 WHERE COM_DATE BETWEEN '12/05/2005' AND '16/09/2006'

    elle marche parfaitement et retourne 7 par ex.
    conclusion-> la requete est bonne

    Lorsque je place cette requete (avec les dates en brut) dans mon CommandText, l'application me retourne egalement 7
    conclusion->l'application fonctionne

    Cependant quand je remplace les dates en brut par leurs variables string (voir premier code en haut), cela me retourne 0 et ne me fait aucune erreurs.

    Je ne comprends pas mon erreur.

    Pouvez vous m'aider?
    merci d'avance

  2. #2
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Bonjour et bienvenue sur le forum de www.developpez.com

    Je te conseille de lire les règles du forum .

    Ainsi, afin de permettre une meilleur visibilité de ton code, tu devrais mettre les balises 'Code'.

    De plus, ta question serait mieux placé dans Delphi et Bases de données (tu peux demander à un modérateur le déplacement)


    Pour ce qui concerne ton problème...

    Pourquoi la requete fonctionne mais pas sous l'application ?

    Peut-être existe-t-il un problème de compatibilité de date ?
    format anglais/américain -> MM/JJ/AAAA
    fotmat francais -> JJ/MM/AAAA

    Pour éviter d'avoir ce problème choisir un format de date sous forme de Double (Tant mieux Delphi peut gérer les dates en type Double facilement ).

    Bon dev'
    A+
    CV :
    - LinkedIn
    - Viadeo

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DataModule3.DtSprem.CommandText:='SELECT count(distinct ADH_ID) FROM gl_class_10 '+
                                     'WHERE COM_DATE BETWEEN :dat1 AND :dat2 ;';
    DataModule3.DtSprem.Parameters.ParamByName('dat1').Value := TDateTime(datedeb);
    DataModule3.DtSprem.Parameters.ParamByName('dat2').Value := TDateTIme(datedujour);
    DataModule3.DtSprem.Execute;
    Datedeb et Datedujour doivent être de type TDate (ou TDateTime);
    Je mis TDateTIme(datedujour) pcq Microsoft JET ne gere que le type TDateTime (Maintenant, je ne sais pas si tu travailles sous une base Access)

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    Non je travaille sous une base sqlserver.

    Dans ma base le type de la date est: DATETIME

    Ce que je ne comprends pas c'est que lorque je mets la date en brut ex: 12/05/2005 dans mon code a la place des variables cela marche parfaitement.

    J'ai vérifié et mes variables sont bien initialisées, de type string et de la forme jj/mm/aaaa.

    De plus lors de la compilation je n'ai aucunes erreurs.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    As tu essayé ce que yobenzen t'a proposé ? De formatter la date non pas en String mais en Type Double ?

  6. #6
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Moi, j'avais rencontré le problème sous ACCESS mais connaissance les habitude de Microsoft, je pense qu'il en va de même pour SQLServer.

    En faite, j'avais constaté que ACCESS choisissait un peu le format qu'il lui plaisait pour les dates. C'est pourquoi je te proposais d'utiliser les dates sous forme de Double. Là, les erreurs de convertions semblent impossible.

    De plus, dans ton application, il sera nettement plus facile de changer les dates, les modifier, etc ... puisque le DateTimePicker renvoie un double, et puisque les routines de DateUtils utilisent toutes des doubles.

    En espérant avoir fait avancer le Chmilblick....
    A+
    CV :
    - LinkedIn
    - Viadeo

Discussions similaires

  1. [PHP 5.0] Problème avec une variable tableau dans une session
    Par diblasio dans le forum Langage
    Réponses: 5
    Dernier message: 23/08/2010, 09h59
  2. probléme avec une date
    Par Bricoltou dans le forum Excel
    Réponses: 4
    Dernier message: 10/01/2010, 12h38
  3. [XSLT]Probléme avec une fonction php dans un fichier xsl!
    Par Mo_Poly dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 29/10/2007, 07h32
  4. probléme avec une requete insert dans une procédure stockée
    Par amelhajer dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/05/2007, 11h03
  5. Problème avec une date !!
    Par pilz dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/04/2006, 11h35

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