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 :

Composant ADOQuery avec paramètres


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 46
    Points : 28
    Points
    28
    Par défaut Composant ADOQuery avec paramètres
    je veux utiliser un seul composant pour passer plusieurs requetes avec des parametrées, et je ne sais pas comment ecrire la requete en utilisant la propriete

    Query.sql.text:= .....
    avec ces parametres, indiquez moi please.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    ben tout simplement ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query.sql.text:= 'SELECT * FROM table WHERE champ = :valeur';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query.Parameters.ParamByName('valeur').asVariant := 'truc';
    essaye la touche
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    j'ai essayé avec ces commandes mais l'etat tojours sort en vide (sans données)

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Etat ? QuickReport ? le DataSet est-il relié ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    bien sure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    f.QMAntenne.Close;
    f.QMAntenne.SQL.Clear;
    f.QMAntenne.SQL.text:='Select t.antenne ,sum(q.montant) some from quittance q , titre t where ((q.codetitre=t.codetitre) and (q.anneeexercice =:anne) and (q.datequit between :date1 and :date2)) group by t.antenne order by some desc';
    f.QMAntenne.Prepared:=true;
    f.QMAntenne.Parameters.ParamByName('anne').value:=DBLookupComboBox1.keyvalue;
    f.QMAntenne.Parameters.ParamByName('date1').value:=DateTimePicker1.Date;
    f.QMAntenne.Parameters.ParamByName('date2').value:=DateTimePicker2.Date;
    f.QMAntenne.Open;
    fenmantenne.quickrep1.preview;
    le probleme c'est quand j'utilise les deux premiers parametres il fonctionne tres bien, et quand je rajoute le troisieme (date2) ne marche pas, je ne sais pas comment faire pour regler ce probleme.

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Rajoute un ParamCheck := true dans le code (comme ci-dessous)

    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
     
    With f.QMAntenne do
    begin
      Close;
      SQL.Clear;
      SQL.text:='Select t.antenne ,sum(q.montant) some from quittance q , titre t where ((q.codetitre=t.codetitre) and (q.anneeexercice =:anne) and (q.datequit between :date1 and :date2)) group by t.antenne order by some desc';
      ParamCheck := True; // au cas ou 
      Prepared:=true;
      With Parameters do
      begin
        ParamByName('anne').value:=DBLookupComboBox1.keyvalue;
        ParamByName('date1').value:=DateTimePicker1.Date;
        ParamByName('date2').value:=DateTimePicker2.Date;
      end;
      Open;
    end;
    fenmantenne.quickrep1.preview;
    PS : Je me suis permis d'éclaircir ton code au passage ^^
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    j'ai copier et coller ton code mais rien de nouveau, je vois que tout est logique et je comprend pas comment ca ne donne pas de resultat.

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Es-tu sûr que ta requête retournes des résultats en réalité ?

    Peux-tu tester "à la main" la requête en remplaçant les paramètres par les valeurs que tu mettrais normalement ?
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Effectivement, le Between est-il correctement géré ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    ok j'ai connais le probleme finalement c'est la representation de la date dans la base de donnees, la date est representé comme suit AAAA-MM-JJ, maintenant je connais pas commet recupere la date a cette format directement a partir du composant DateTimePicker. pouvez m'aider our cette fonction.

    Merci bien

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FormatDateTime('YYYY-MM-DD', Picker.Date)
    ... ensuite attention, oracle par exemple faut utiliser TO_DATE, en MySQL c'est automatique ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  12. #12
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Citation Envoyé par bilal_ini Voir le message
    ok j'ai connais le probleme finalement c'est la representation de la date dans la base de donnees, la date est representé comme suit AAAA-MM-JJ, maintenant je connais pas commet recupere la date a cette format directement a partir du composant DateTimePicker. pouvez m'aider our cette fonction.

    Merci bien
    heu stop, si c'est réellement le problème c'est que le type des paramètres n'est pas détecté correctement et que les dates ont été détectées comme des strings. Tu utilises quoi comme SGBD ?

    L'intérêt d'utiliser des requêtes paramétrées, c'est justement de s'affranchir des formats de dates et autres problèmes de formattage des données : Tu donnes un paramètre de type Date, avec une valeur TDateTime et le provider OLEDB sous-jaçent doit s'occuper des éventuelles convertions nécessaires.

  13. #13
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Salut;

    vaut mieux utiliser le bon type de champs surtout pour les Date et datetime
    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
    With f.QMAntenne do
    begin
      Close;
      SQL.Clear;
      SQL.text:='Select t.antenne ,sum(q.montant) some from quittance q , titre t where ((q.codetitre=t.codetitre) and (q.anneeexercice =:anne) and (q.datequit between :date1 and :date2)) group by t.antenne order by some desc';
      ParamCheck := True; // au cas ou 
      Prepared:=true;
      With Parameters do
      begin
        ParamByName('anne').value:=DBLookupComboBox1.keyvalue;
        ParamByName('date1').AsDate:=DateTimePicker1.Date;
        ParamByName('date2').asDate:=DateTimePicker2.Date;
      end;
      Open;
    end;
    fenmantenne.quickrep1.preview;
    Si erreur de compilation remplacer AsDate par AsDateTime.
    COmme ça, tu ne saras pas obliger de formatter tes date.

    A+
    On progresse .....

  14. #14
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut formatage de date
    j'ai eu le meme probleme avec access quand j'utilise adoquery

    ma conseille est
    dans access pour les champs de type date/heure utilser le format date/abregé
    puis avec adoquery utiliser la commande suivante:

    adoquery1.parameters.parambyname('date').value:=datetostr(datetimepicker.date);


    est ca marche surementmrgreen

Discussions similaires

  1. Creation du composant avec Paramètres dynamique.
    Par amallek dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 02/06/2014, 12h50
  2. Réponses: 4
    Dernier message: 16/04/2014, 12h59
  3. Loop et composants avec paramètre
    Par remika dans le forum Tapestry
    Réponses: 0
    Dernier message: 20/05/2009, 18h18
  4. Réponses: 3
    Dernier message: 21/05/2003, 11h44

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