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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 993
    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.

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 343
    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 !!

  3. #3
    Membre émérite
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 993
    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.

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 343
    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 ?

  5. #5
    Membre émérite
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 993
    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

  6. #6
    Membre émérite
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 993
    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
    ---------------------------

+ 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