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

SQL Firebird Discussion :

Paramètre avec valeurs multiples


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2015
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 63
    Par défaut Paramètre avec valeurs multiples
    Bonjour,

    Je n'arrive pas à réaliser la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from matable where matable.monchamp in (:parametre)
    Le paramètre doit prendre des string en valeur. Si je passe une seule valeur, pas de soucis. Si je passe deux valeurs (ex. : 'A','B'), soit je n'ai aucun retour (alors qu'il en faudrait un), soit cela génère une erreur.

    J'ai cherché sur le net mais je n'ai rien trouvé de particulier par rapport à cela ou une solution. J'ai testé la même chose en MySql et cela fonctionne

    Merci d'avance pour votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 706
    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 706
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Manque d'informations.

    Si la requête est passée via un composant Delphi , si oui, lequel ?
    S'il s'agit de Firedac utilisez la macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from matable where matable.monchamp in (&parametre)
    MacroByName('parametre').asRaw:= QuotedStr('A')+','+QuotedStr('B');

    Cependant, si je regarde l'historique de vos messages je crains qu'il ne s'agisse de IBQuery qui lui n'a pas la possibilité des Macros
    Un code à essayer :
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var SL : TStringList;
    begin
     SL:=TStringList.Create;
     SL.Add(QuotedStr('A'));
     SL.Add(QuotedStr('B'));
     IBQuery.ParamByName('parametre').asString:=Quotedstr(SL.CommaText);
     SL.Free;


    S'il s'agit d'autre chose, il faut expliciter comment vous exécuter et vous passez le paramètre

  3. #3
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2015
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 63
    Par défaut
    Merci pour ce premier retour. Dans un premier temps, j'essaye simplement de le faire fonctionner dans les managers de db tel qu'EMS et Ibexpert. Sur les deux logiciels, comportement similaire à ce que j'ai dit dans mon premier post

    Je l'ai également fait en Delphi en utilisant le composant ibobject et en appelant comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    param_query.ParamByName('niveau').AsString := 'SI,SS';
    Même résultat, aucun record renvoyé alors qu'il y a bien des données.

    La version de Firebird est la 2.5
    La version de Delphi est XE2

    Merci d'avance pour l'aide

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 706
    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 706
    Billets dans le blog
    65
    Par défaut
    Ce n'est pas un problème Firebird mais plus de la manière de présenter le paramètre

    Avec les guillemets "A","B" serait à essayer
    avec les doubles quotes cela devient vite invivable ''A'',''B'' dès que l'on va tenter de le coder avec Delphi
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    param:='''A'',''B'''
    La suggestion StringList est à prendre en compte

  5. #5
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2015
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 63
    Par défaut
    Avant même delphi, j'essaye de le faire fonctionner en Sql, ce qui ne va pas.

    J'ai essayé les simples quotes, les doubles quotes dans la fenêtre proposant d'encoder les valeurs et cela ne change absolument rien.

    Voici ce que j'ai déjà tapé dans le prompt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    'SI','SS'
    "SI","SS"
    SI,SS
    J'avais également testé ton écriture sous delphi mais cela ne donne rien non plus. Pour l'idée du TstringList, je ne vois pas comment je pourrais le passer à mon paramètre en Delphi.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 706
    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 706
    Billets dans le blog
    65
    Par défaut
    Avec DBeaver 7.0 cela fonctionne
    Nom : Capture.PNG
Affichages : 400
Taille : 44,4 Ko

    pour delphi une solution ?

    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var SL : TStringList;
    begin
     SL:=TStringList.Create;
     SL.Add(QuotedStr('AC'));
     SL.Add(QuotedStr('CC'));
     IBQuery.Close;
     IBQuery.SQL.Text:='SELECT * FROM APPOSE WHERE CODE APPOSE IN('+SL.CommaText+')'; 
     IBQuery.Open;
     SL.Free;

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

Discussions similaires

  1. champ avec valeurs multiples
    Par oyard dans le forum Modélisation
    Réponses: 4
    Dernier message: 29/08/2013, 16h12
  2. Déclaration de variable avec valeurs multiples regroupées
    Par Dr_No dans le forum MS SQL Server
    Réponses: 20
    Dernier message: 06/05/2011, 14h57
  3. Réponses: 1
    Dernier message: 08/03/2010, 12h55
  4. [WD14] Dll Delphi paramétré avec valeur de retour
    Par mail.spam dans le forum WinDev
    Réponses: 2
    Dernier message: 01/07/2009, 12h49
  5. HashTable avec Valeurs multiples
    Par khand dans le forum Langage
    Réponses: 16
    Dernier message: 04/08/2008, 12h23

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