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 :

type date attendu mais number trouvé


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Points : 77
    Points
    77
    Par défaut type date attendu mais number trouvé
    j'essai de utiliser 2 dates dans une requete mais ça passe pas soit le morceau de la requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     resultat.SQL.Add('where '+table+'.code_tpd = temps.code_tpd' );
       ShowMessage('and jour between '+ datetostr(d1.Date)+' and '+ datetostr(d2.Date));
       resultat.SQL.Add('and jour between  '+datetostr(d1.Date)+' and '+ datetostr(d2.Date));
    
       resultat.SQL.Add('group by ');

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour, il manque des quotes dans ta chaine !
    L'analyseur syntaxique SQL va voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    and jour between  01/10/2011 and 31/10/2011
    alors que, pour que ce soit correct, il devrait lire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    and jour between '01/10/2011' and '31/10/2011'
    Tu aurais du écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat.SQL.Add('and jour between ' + QuotedStr(DateToStr(d1.Date)) + ' and ' + QuotedStr(DateToStr(d2.Date)));
    L'idéal étant bien entendu de passer par des paramètres qui évitent tout risque d'injection SQL...
    --
    Philippe.
    Philippe.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 046
    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 046
    Points : 40 962
    Points
    40 962
    Billets dans le blog
    62
    Par défaut
    de plus le format jj/mm/aaaa n'est pas toujours celui du SGBD
    pour Interbase ou firebird par exemple c'est mm/jj/aaaa ou jj.mm.aaaa

    Citation Envoyé par phillipe
    L'idéal étant bien entendu de passer par des paramètres
    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 é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
    Citation Envoyé par Ph. B. Voir le message
    L'idéal étant bien entendu de passer par des paramètres qui évitent tout risque d'injection SQL...
    +1
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  5. #5
    Membre éclairé

    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2010
    Messages : 297
    Points : 705
    Points
    705
    Par défaut
    Donnez nous plus de détails: SGBD utilisé et structure des tables.

  6. #6
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par adelneo Voir le message
    Donnez nous plus de détails: SGBD utilisé et structure des tables.
    excusez les gars, en fait je pensez avoir mis resolu, ce que Ph.B a expliqué a resolus. j'utilise oracle, alors..... il gere les dates avec une certaine souplesse.
    pour ce qui est de injection sql, etant donné que mes tables ne sont connu à l'avance, je ne peux faire que de cete maniere, ou bien y a til une solution?
    merci.

  7. #7
    Membre éclairé

    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2010
    Messages : 297
    Points : 705
    Points
    705
    Par défaut
    Pour éviter les injections tu dois apprendre à utiliser les requêtes paramétrées:

    Pour ton example:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    resultat.SQL.Add('and jour between  :param1 and :param2');
    resultat.Params.ParamByName('param1').AsDate:=d1.date;
    resultat.Params.ParamByName('param2').AsDate:=d2.date;
    ...
    resultat.open;

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/11/2013, 17h07
  2. Réponses: 4
    Dernier message: 04/08/2012, 00h15
  3. Réponses: 1
    Dernier message: 13/09/2010, 15h11
  4. insertion d'un type date dans une table access
    Par monstour dans le forum ASP
    Réponses: 7
    Dernier message: 18/06/2004, 16h57
  5. utilisation du type DATE d'interbase
    Par dibak dans le forum InterBase
    Réponses: 4
    Dernier message: 05/01/2004, 15h03

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