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 :

[ADOQuery] Parametre utilisé plusieurs fois


Sujet :

Bases de données Delphi

  1. #1
    Membre actif Avatar de gibet_b
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 292
    Points : 296
    Points
    296
    Par défaut [ADOQuery] Parametre utilisé plusieurs fois
    Bonjour à tous,

    J'ai une requête de ce genre :
    SELECT * FROM TRUC WHERE MACHIN=:param1 AND BIDULE=:param1;

    Le problème c'est que pour Delphi param1 et param1 sont deux parametre différents...

    Y-a-t-il un moyen de faire ensorte de n'avoir qu'un seul parametre à initialiser. Car dans ma requete réel il faudrait que j'initialise bcp plus de parametre.

    Merci d'avance
    Jean-Baptiste, vieux membre éclairé à la bougie
    -----
    www.e-jbb.net : Écriture et lecture numérique
    ---
    Citation du moment : "On abdique pas l'honneur d'être une cible" - Cyrano De Bergerac

  2. #2
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut Re: [ADOQuery] Parametre utilisé plusieurs fois
    Citation Envoyé par gibet_b
    Le problème c'est que pour Delphi param1 et param1 sont deux parametre différents...
    Je ne suis pas d'accord sur ce point la, si tu met:

    tonquery.ParamByName('param1').AsJeNeSaisPasQuoi := ...;
    tonQuery.Open;

    ca passe sans problème

  3. #3
    Membre actif Avatar de gibet_b
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 292
    Points : 296
    Points
    296
    Par défaut
    Moi non plus je ne suis pas d'accord . J'ai essayé avec cette requete :

    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
    SELECT NoEmploye, CodeEmploye, NomEmploye, PNomEmploye
    FROM EMPLOYE
    WHERE NoEmploye IN (SELECT NoEmploye FROM GARDE G, GARDER GR
    WHERE GR.NoGarde=G.NoItem
    AND NoItem NOT IN(SELECT NoItem
    FROM GARDE
    WHERE DTBegin<=:p1
    AND DTEnd>=:p2)
    AND NoItem NOT IN(SELECT NoItem
    FROM GARDE
    WHERE DTBegin>=:p1
    AND DTEnd<=:p2)
    AND NoItem NOT IN(SELECT NoItem
    FROM GARDE
    WHERE DTBegin<=:p1
    AND DTEnd<=:p2)
    AND NoItem NOT IN(SELECT NoItem
    FROM GARDE
    WHERE DTBegin>=:p1
    AND DTEnd>=:p2)
    );
    et ce code dans une procédure de mon appli :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Principale.ADOQueryEmployeDisponible do
      begin
      Close;
      Parameters.ParamByName('p1').Value:=p1;
      Parameters.ParamByName('p2').Value:=p2;
      Open;
      end;
    Et à l'execution, Delphi plante et me dit : "Aucune valeur pour un ou plusieur parametre requis"

    Une idée ?
    Jean-Baptiste, vieux membre éclairé à la bougie
    -----
    www.e-jbb.net : Écriture et lecture numérique
    ---
    Citation du moment : "On abdique pas l'honneur d'être une cible" - Cyrano De Bergerac

  4. #4
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    A ce qu'il me semble, les paramètres d'une requête SQL forment en fait un simple tableau, où les noms importent moins que l'index ; je pense le ParamByName va tout simplement chercher la 1ère occurence du nom. C'est pourquoi ça ne marche pas.

    A partir de là, plusieurs solutions :
    - nommer chaque paramètre différemment et utiliser ParmaByName
    - Utiliser Params (Index]
    - si ta requête n'est pas utilisée massivement, la "paramétrer" dans ton code avec un Format, et la passer "en dur" à ton Query.

    Ceci dit, j'ai du mal à comprendre ta requête. Est-ce que je trompe, ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    AND NoItem NOT IN(SELECT NoItem
    FROM GARDE
    WHERE DTBegin>=:p1
    AND DTEnd<=:p2)
    AND NoItem NOT IN(SELECT NoItem
    FROM GARDE
    WHERE DTBegin<=:p1
    AND DTEnd<=:p2)
    AND NoItem NOT IN(SELECT NoItem
    FROM GARDE
    WHERE DTBegin>=:p1
    AND DTEnd>=:p2)
    élimine toutes les valeurs de NoItem figurant dans GARDE (sauf peut-être celles où DTBegin ou DTEnd est à NULL ?

    Roland
    Roland

  5. #5
    Membre actif Avatar de gibet_b
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 292
    Points : 296
    Points
    296
    Par défaut
    C'est bon j'ai résolu mon pb, en traitant la requete en dur (via la valeur de SQL.text), puisque j'ai ensuite eu un autre pb que je ne pouvais résoudre ac les parametres...

    Non la requete marche tès bien, elle elimine seulement les Employes qui ne sont pas affectés àune garde qui se chevaucherait avec celle dont les bornes sont p1 et p2.

    merci tout de meme
    Jean-Baptiste, vieux membre éclairé à la bougie
    -----
    www.e-jbb.net : Écriture et lecture numérique
    ---
    Citation du moment : "On abdique pas l'honneur d'être une cible" - Cyrano De Bergerac

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2002
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 32
    Points : 35
    Points
    35
    Par défaut
    A mon avis le problème vient de ADO mais pas de Delphi
    j'avais des requetes utilisant le BDE avec plusieurs fois le même paramètre qui fonctionnaient très bien et quand j'ai voulu passer en ADO
    j'ai eu ce problème , il a fallu changer les parametres
    ce qui n'est pas vraiment bien puisque non seulement tu rajoutes des paramètres mais aussi des lignes de codes pour initialiser ces paramètres

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/01/2015, 12h43
  2. Réponses: 3
    Dernier message: 21/06/2010, 22h17
  3. stringstream utilisé plusieurs fois de suite
    Par mamelouk dans le forum SL & STL
    Réponses: 19
    Dernier message: 16/08/2007, 08h38
  4. Réponses: 2
    Dernier message: 10/07/2004, 17h14
  5. [Servlet] Comment utilisé une servlet plusieurs fois ?
    Par gandalf_le_blanc dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 03/06/2004, 14h49

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