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 :

datetime query ado datetimetostr


Sujet :

Bases de données Delphi

  1. #1
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 418
    Points
    1 418
    Par défaut datetime query ado datetimetostr
    bonjour, j'ai une erreur bete que je n'arrive pas à régler

    une selection dans une base access selon 4 critères, si j'enleve le dernier sa fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        ADOQuery.SQL.Clear;
        ADOQuery.SQL.Add('SELECT * FROM [Info exposant]');
        ADOQuery.SQL.Add('WHERE [NOM] = ' + LastExpoAdded.Name);
        ADOQuery.SQL.Add('AND [Prénom] = ' + LastExpoAdded.Prenom);
        ADOQuery.SQL.Add('AND [Date de délivrance] = ' + LastExpoAdded.DateDeDelivrance);
        ADOQuery.SQL.Add('AND [Date d''inscription] = ' + QuotedStr(DateTimeToStr(LastExpoAdded.DateAdded)) + ';');
        showmessage(ADOQuery.SQL.Text);
        ADOQuery.Prepared := True;
    le 4ème champs de la base est un datetime, le 1, 2 , 3 en text

    ma requete en piece jointe.

    je sais que c'est un conflit entre le champs datetime et ma requete qui donne un string, merci d'avance.
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

  2. #2
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Quelques questions pour faire avancer le schmilblick :

    - tu convertis LastExpoAdded.DateAdded : est-ce que c'est parce que tes types LastExpoAdded.DateDeDelivrance et LastExpoAdded.DateAdded sont différents ?

    - pourquoi des noms de champs avec autant de caractères "spéciaux" ?

    - personnellement je me sers des Parametres , ce qui évite toute erreur de transtypage ou traduction de date fr / us. Il est possible que ta base attende un format mm/dd/aaaa et non jj/mm/aaaa = ce qui ne pose pas de problème pour le 06/06/2009 mais en pose pour le 26/06/2009 !!
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  3. #3
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par archonte Voir le message
    - tu convertis LastExpoAdded.DateAdded : est-ce que c'est parce que tes types LastExpoAdded.DateDeDelivrance et LastExpoAdded.DateAdded sont différents ?
    oui en fait je les convertis ailleurs:
    j'initialise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      LastExpoAdded.Name             := '';
      LastExpoAdded.Prenom           := '';
      LastExpoAdded.DateDeDelivrance := '';
      LastExpoAdded.DateAdded        := Now;
    et en bas d'une procedure je rempli:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          LastExpoAdded.Name             := QuotedStr(eName.Text);
          LastExpoAdded.Prenom           := QuotedStr(ePrenom.Text);
          LastExpoAdded.DateDeDelivrance := QuotedStr(FormatDateTime('c', dtpDateDelivrance.DateTime));
    en fait ce qui bloque c'est comment on fait un test sur un champ datetime dans access "WHERE ChampDateTime = Quoi?"

    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ADOQuery.SQL.Add('AND [Date d''inscription] = ' + QuotedStr(FloatToStr(LastExpoAdded.DateAdded)) + ';');
    sans succès

    Citation Envoyé par archonte Voir le message
    - pourquoi des noms de champs avec autant de caractères "spéciaux" ?
    je suis obligé de travaillé sur une base écrite par quelqu'un d'autre et je ne peux pas en recrée une nouvelle

    Citation Envoyé par archonte Voir le message
    - personnellement je me sers des Parametres , ce qui évite toute erreur de transtypage ou traduction de date fr / us. Il est possible que ta base attende un format mm/dd/aaaa et non jj/mm/aaaa = ce qui ne pose pas de problème pour le 06/06/2009 mais en pose pour le 26/06/2009 !!
    je ne sais pas ce que c'est les parametres, un petit exemple ou doc serait super

    merci.
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

  4. #4
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Petits exemples non testés d'utilisation des parametres, si ça peut d'aider :
    (je n'ai pas delphi sous la main)

    Pour une requête SELECT

    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
    var strSQL : WideString;
     
    strSQL := 'SELECT * ' +
              'FROM [Info exposant] ' +
              'WHERE [NOM] = :Pnom AND [Prénom] = :Pprenom ' +
              'AND [Date de délivrance] = :Pddd ' +
              'AND [Date d''inscription] = :Pddi ';
     
    with DM.ADOQry do
    begin
       Close;
       SQL.Text := strSQL;
       ParamCheck := True;
       // tu peux effectuer tous les traitements que tu souhaites avant d'affecter une valeur aux parametres
       Parameters.ParamByName('Pnom').Value := eName.Text;
       Parameters.ParamByName('Pprenom').Value := ePrenom.Text;
       Parameters.ParamByName('Pddd').Value := dtpDateDelivrance.DateTime;
       Parameters.ParamByName('Pddi').Value := Now; // ou LastExpoAdded.DateAdded ?
       Active := True;
    end;

    Pour une requête INSERT

    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
    var strSQL : WideString;
     
    strSQL := 'INSERT INTO [Info exposant] ' +
               '(nom, prenom, date_delivrance, date_inscription) ' +
               'VALUE (:Pnom, :Pprenom, :Pddd, :Pddi)';
     
    with DM.ADOQry do
    begin
       Close;
     
       SQL.Text := strSQL;
       ParamCheck := true;
     
       Parameters.ParamByName('Pnom').Value := eName.Text; 
       Parameters.ParamByName('Pprenom').Value := ePrenom.Text;
       Parameters.ParamByName('Pddd').DataType := ftDateTime;
       Parameters.ParamByName('Pddd').Value := dtpDateDelivrance.DateTime;
       Parameters.ParamByName('Pddi').DataType := ftDateTime;
       Parameters.ParamByName('Pddi').Value := Now; // ou LastExpoAdded.DateAdded ?
     
       ExecSQL
    end;


    en fait ce qui bloque c'est comment on fait un test sur un champ datetime dans access "WHERE ChampDateTime = Quoi?"
    Je ne te comprends pas : tu dis que tu y arrives avec [Date de délivrance] mais pas avec [Date d''inscription]. D'où ma question initiale Est-ce que les types de données sont différents ?.
    D'autre part tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QuotedStr(FormatDateTime('c', dtpDateDelivrance.DateTime))
    pour l'un et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QuotedStr(FloatToStr(LastExpoAdded.DateAdded))
    pour l'autre. Qu'est-ce qui leur vaut un traitement différent ?
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  5. #5
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 418
    Points
    1 418
    Par défaut
    QuotedStr(FloatToStr(LastExpoAdded.DateAdded))
    c'était un test faut pas en tenir compte. bon j'ai pas l'habitude d'avoir des champs nommé si mal et l'erreur est la!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       ADOQuery.SQL.Add('AND [Date d''inscription] = ' + QuotedStr(DateTimeToStr(LastExpoAdded.DateAdded)) + ';');
    il faut doubler les '' au champs afin d'avoir dans la requête ''
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       ADOQuery.SQL.Add('AND [Date d''''inscription] = ' + QuotedStr(DateTimeToStr(LastExpoAdded.DateAdded)) + ';');
    2h sur sa franchement, la si quelqu'un doute du bon sens d'utiliser des champs type "DATE_INSCRIPTION" voyez ou sa mène...

    merci pour ton aide j'ai compris l'utilisation des paramètres c'est effectivement beaucoup plus clair pour créer ses requetes! Je vais l'utiliser maintenant
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

  6. #6
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 418
    Points
    1 418
    Par défaut
    bon je vais passer pour nul mais c'est pas sa , j'ai contourné le problème en testant un autre champ de type string comme les 3 premiers.

    si quelqu'un sait comment on fait un test sur un champ de type datetime dans une base access je suis preneur

    "SELECT * FROM [TEST] WHERE ChampDateTime = Quoi?"

    pour inserer j'utilise sa et sa fonctionne bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'INSERT INTO [TEST] (ChampDateTime) VALUES (' + QuotedStr(FormatDateTime('c', dtpDateDelivrance.DateTime)) + ');'
    alors pourquoi si je met:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'SELECT * FROM [TEST] WHERE ChampDateTime = ' + QuotedStr(FormatDateTime('c', dtpDateDelivrance.DateTime)) + ';'
    j'ai:
    ---------------------------
    Notification des exceptions du débogueur
    ---------------------------
    Le projet gestion_exposant.exe a déclenché la classe d'exception EOleException avec le message 'Type de données incompatible dans l'expression du critère'.
    ---------------------------
    Arrêter Continuer Aide
    ---------------------------
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

  7. #7
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Je n'ai pas de réponse sûre à 100%, mais à nouveau quelques pistes :

    - les dates en version "sheakspeare" dans Access sont du style "#07/16/2009#", pour Molière "16/07/2009" : peut-être que la réponse tient dans ta version d'Access
    - passe par les paramètres, le format est automatiquement gérer me semble-t-il
    - ton champs de BDD est-il formaté avec les mêmes attributs jj/mm/aaaa hh:mm:ss que dans ta requête ou bien y-a-t-il perte de données ?
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  8. #8
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 418
    Points
    1 418
    Par défaut
    Je n'ai pas eu le temps de tester tes propositions, mais je réponds quand même pour te remercier, je vais tester dès que possible.

    Pour la dernière proposition j'ai quand même la réponse, oui mon champ dans ma base de données access est en format datetime je ne spécifie rien d'autre et lorsque que j'insère une valeur dedans grâce à la requête que j'ai mis ci-dessus je ne perds rien la valeur est insérée correctement avec le format "Molière" "16/01/2009 14:10:55"

    il faut que je trouve une documentation, je pense que le = ne doit pas convenir pour tester une date peut-être like ou autre chose.

    Je vais clore, même si je n'ai pas vraiment la réponse.
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

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

Discussions similaires

  1. Query ADO différente
    Par zemeilleurofgreg dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/02/2012, 12h02
  2. Pb de threads / query et ADO
    Par Toto41 dans le forum Bases de données
    Réponses: 4
    Dernier message: 24/03/2009, 13h01
  3. Ou je trouve l'erreuer dans ce code[ADO Query]
    Par aliwassem dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/04/2007, 14h07
  4. ADO et Query
    Par care dans le forum Bases de données
    Réponses: 7
    Dernier message: 06/02/2007, 14h04
  5. [ADO.Net][VB.Net]Comment obtenir DateTime via FieldName?
    Par RiiiDD dans le forum Accès aux données
    Réponses: 2
    Dernier message: 29/03/2006, 13h19

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