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 :

[TIBQuery/TQuery] Params et WHERE.. IN


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier Avatar de windmastr26
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 234
    Points : 108
    Points
    108
    Par défaut [TIBQuery/TQuery] Params et WHERE.. IN
    Salut,

    Est-ce que quelqu'un a une idée de la façon de passer une valeur pour une clause "IN" en paramètre d'un TIBQuery ?

    Je m'y prends de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ParamByName('idG').AsString:=grp;
    Où "grp" est un string de type "1,5,8". Le but est de compléter dynamiquement ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT MEMBRES.*
    FROM MEMBRES
    INNER JOIN APPARTENIR
    ON APPARTENIR.idMembre=MEMBRES.id
    AND APPARTENIR.idGroupe IN (:idG)
    ORDER BY NOM, PRENOM ASC
    Mais lorsque je l'exécute, il me répond

    conversion error from string 1,5,8
    J'ai essayé de définir le type de mon paramètre, ou bien d'utiliser d'autre procédure que "AsString", mais rien n'y fait.

    Any ideas ?

    Thanks

  2. #2
    Membre confirmé
    Avatar de alheuredudejeuner
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 376
    Points : 632
    Points
    632
    Billets dans le blog
    4
    Par défaut enlever les parenthèses peut-être
    IN (:idG)


    André

  3. #3
    Membre régulier Avatar de windmastr26
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 234
    Points : 108
    Points
    108
    Par défaut
    Il me renvoi une erreur dans ce cas là...

  4. #4
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Je pense qu'il faudrait plutôt utiliser la même solution qu'ici:
    http://www.developpez.net/forums/d96...ry-parametree/

    La cause doit être la même (quote des paramètres string).
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  5. #5
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    La clause IN attend une table comme paramètre me semble-t-il.

    J'écrirai quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT *
    FROM MEMBRES
    INNER JOIN APPARTENIR
    ON APPARTENIR.idMembre=MEMBRES.id
    AND APPARTENIR.idGroupe IN (SELECT idGr FROM mon_autre_table WHERE ...)
    ORDER BY NOM, PRENOM ASC
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  6. #6
    Membre régulier Avatar de windmastr26
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 234
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par Linkin Voir le message
    Je pense qu'il faudrait plutôt utiliser la même solution qu'ici:
    http://www.developpez.net/forums/d96...ry-parametree/

    La cause doit être la même (quote des paramètres string).
    Merci pour ton lien, je vais regarder ça cet après-midi et je te tiens au courant.

    Citation Envoyé par archonte Voir le message
    La clause IN attend une table comme paramètre me semble-t-il.

    J'écrirai quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT *
    FROM MEMBRES
    INNER JOIN APPARTENIR
    ON APPARTENIR.idMembre=MEMBRES.id
    AND APPARTENIR.idGroupe IN (SELECT idGr FROM mon_autre_table WHERE ...)
    ORDER BY NOM, PRENOM ASC
    En fait pas uniquement, la clause IN peut aussi contenir une énumération de valeurs. Visiblement si je tape ma requête directement sous ISQL.exe, ça fonctionne bien. C'est ensuite la conversion par le composant TIbQuery qui pose problème...

  7. #7
    Membre régulier Avatar de windmastr26
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 234
    Points : 108
    Points
    108
    Par défaut
    Bon en fin de compte, j'ai contourné le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TIBQuery.SQL.Strings[4]:='AND APPARTENIR.idGroupe IN (' + grp + ') ';

    ou "grp" est une variable de type string qui contient mon énumération (1,2,5).

    Ça fonctionne, c'est l'essentiel. Ensuite si quelqu'un a une solution un peu plus "propre", je suis toujours preneur

    Merci pour vos réponses.

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

Discussions similaires

  1. Zeos MariaDB : WHERE sur 3 Params
    Par Invité dans le forum Bases de données
    Réponses: 7
    Dernier message: 18/12/2014, 16h06
  2. l'utilisation Tquery-params dans le cas 'tout'
    Par dpsb_informatique dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/02/2013, 13h51
  3. TQUERY + Propriété SQL + Params
    Par bluevelvet dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/03/2004, 09h58
  4. Ouvrir fenêtre avec param
    Par Saber22 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/05/2003, 15h48
  5. {$PARAM} dans XMLGRAM
    Par rgarnier dans le forum XMLRAD
    Réponses: 3
    Dernier message: 31/01/2003, 12h42

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