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

 Delphi Discussion :

TADOQuery et Parameters


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Par défaut TADOQuery et Parameters
    bonjour, j'ai une question sur les requêtes paramétrées:

    quand je fais ça, ça marche
    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
     
    procedure del;
    begin
      with Tadoquery.Create(nil) do
      begin
        ConnectionString := Connection_string;
        SQL.Text := 'select * from clubs where (idnumber=:club) and (idnumber2=:club2)';
        Parameters.ParamByName('club').DataType := ftInteger;
        Parameters.ParamByName('club').value := 1000;
        Parameters.ParamByName('club2').DataType := ftInteger;
        Parameters.ParamByName('club2').value := 1000;
        open;
        while not(Eof) do
        begin
          showmessage(FieldByName('idnumber').AsString);
          Next;
        end;
        free;
      end;
    end;
    faut pas chercher de sens a la requête, c'est un exemple , en fait j'ai un paramètre qui est plusieurs fois dans la requête, mais si je mets le même paramètre ça marche pas

    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
     
    procedure del;
    begin
      with Tadoquery.Create(nil) do
      begin
        ConnectionString := Connection_string;
        SQL.Text := 'select * from clubs where (idnumber=:club) and (idnumber2=:club)';
        Parameters.ParamByName('club').DataType := ftInteger;
        Parameters.ParamByName('club').value := 1000;
        open;
        while not(Eof) do
        begin
          showmessage(FieldByName('idnumber').AsString);
          Next;
        end;
        free;
      end;
    end;
    c'est a dire que si dans une requete j'ai 5 fois la valeur 1000 a mettre, je suis obligé de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
       Parameters.ParamByName('club1').DataType := ftInteger;
       Parameters.ParamByName('club1').value := 1000;
       Parameters.ParamByName('club2').DataType := ftInteger;
       Parameters.ParamByName('club2').value := 1000;
       Parameters.ParamByName('club3').DataType := ftInteger;
       Parameters.ParamByName('club3').value := 1000;
       Parameters.ParamByName('club4').DataType := ftInteger;
       Parameters.ParamByName('club4').value := 1000;
       Parameters.ParamByName('club5').DataType := ftInteger;
       Parameters.ParamByName('club5').value := 1000;
    ??


    merci

    exyacc

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Si tu sais que c'est le même, il faut alors plutôt utiliser une requête spécifique :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from clubs where (idnumber=:club) and (idnumber2=idnumber)
    Si c'est un hasard, donc une occurrence à l'exécution pas plus fréquente qu'une autre, ben tant pis pour remplir plusieurs fois des paramètres différents avec la même valeur !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Par défaut
    oui pour ça que j'ai dit que c'etait un exemple, en réalité, c'est une grosse grosse requete ou il est plus facile de mettre plusieurs fois le parametre

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Après, si c'est pour un souci de lisibilité de la requête, tu peux avoir ton SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    S := 'select * from clubs where (idnumber=:club) and (idnumber2=:club)';
    et faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query.Text := ReplaceStr(S, ':club', IntToStr(ParamClubValue), [rfReplaceAll]);
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 356
    Par défaut
    c’était surtout pour savoir si c'était normal ou si je faisais pas comme il faut.
    donc on peut pas mettre plusieurs fois le même paramètre dans une requête .?

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 598
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    il semblerait que ADO ait été écrit comme cela, pas de possibilité d'utiliser deux fois un même paramètre. Signalé comme "bug" lors de la version D6 je crois, il a été répondu que cela avait été conçu ainsi. Je ne sais pas si ADO a évolué depuis et comme cet ensemble n'est pas ma tasse de thé ..... En tout cas les sets de composants base de données que j'utilise le permette.
    J'ai vu par contre, qu'il n'y avait pas dans ton code de Prepare de la requête avant son exécution, qu'en serait-il dans ce cas là ?

Discussions similaires

  1. Pb d'envoi de requete via un TADOQuery à une BD access
    Par gsmurf dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/06/2004, 13h20
  2. Rafraichir TADOQuery
    Par koolkris dans le forum Bases de données
    Réponses: 6
    Dernier message: 13/05/2004, 16h14
  3. Requete parametrée TADOQuery
    Par cdlr27 dans le forum Bases de données
    Réponses: 3
    Dernier message: 01/05/2004, 18h41
  4. Syntaxe PARAMETERS pour requête sous VBA
    Par GAGNON dans le forum VBA Access
    Réponses: 3
    Dernier message: 28/11/2003, 11h39
  5. Treeview : Erreur "Reference to variable or parameter..
    Par Tirlibibi dans le forum XMLRAD
    Réponses: 4
    Dernier message: 06/05/2003, 11h19

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