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 :

interpretation de requete MySQSL/Delphi


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Par défaut interpretation de requete MySQSL/Delphi
    J'ai besoin d'introduire une sélection paramétrée dans une requête d'ouverture de table Mysql, dans une fiche de reporting Delphi.
    La chaine de la requête est écrite de la manière suivante :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * from tref_apporteur
    where id_ref_apporteur in (:pliste)
    order by nom_apporteur;
    le paramètre pliste est de type string et contient une chaine de type :
    '990001, 990004, 99'

    Par d'erreur à l'exécution mais la reponse à ma requête reste désespérement vide, alors que si je l'exécute avec heidisql mes 2 apporteurs remonte bien !
    merci de votre aide pour comprendre ce défaut.

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    or donc ta requête est

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select * from tref_apporteur
    where id_ref_apporteur in ('990001, 990004, 99')
    order by nom_apporteur;

    non ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 096
    Par défaut
    Le problème doit être lié au type de paramètre!
    tu dois je suppose faire un Param.AsString, donc il va effectivement comparer un INTEGER à un VARCHAR

    Essaye d'effectuer manuellement la séquence PREPARE \ EXECUTE ...

    Je ne pense que pas que le IN puisse être géré ainsi sans fixer un nombre précis d'élement !

    syntaxe MySQLi :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM tref_apporteur
    WHERE id_ref_apporteur IN (?, ?, ?)
    ORDER BY nom_apporteur;
    syntaxe Delphi
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM tref_apporteur
    WHERE id_ref_apporteur IN (:Param1, :Param2, :Param3)
    ORDER BY nom_apporteur;

    Si tu veux absolument préparé ta requête ainsi, il te faut générer une boucle créant le SQL avec autant de paramètre que le requiert ta liste, puis autant de ParamByName !
    Tu conserve ainsi la "protection" du SQL utilisant des requêtes paramétrées mais tu y perds les optimisations
    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

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    il est également possible de générer directement la requête SQL...sauf erreur de ma part MySQL ne gère de toute façon pas les requêtes paramétrées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      param := '990001, 990004, 99';
     sql := 'SELECT * FROM tref_apporteur '
     + 'WHERE id_ref_apporteur IN (' + param + ')'
      +' ORDER BY nom_apporteur';
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 096
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    sauf erreur de ma part MySQL ne gère de toute façon pas les requêtes paramétrées
    Ben alors !
    Il y a effectivement erreur, surtout que j'ai fourni dans ma réponse un lien la version 5.0 FR de la page MySQL 5.6 Reference Manual :: 13.5. SQL Syntax for Prepared Statements

    Tu as du confondre MySQL ne supporte pas les paramètres nommés mais uniquement les paramètres anonymes mais le Provider s'occupe de cette traduction à notre place
    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

  6. #6
    Nouveau candidat au Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Par défaut passage de paramètre clause IN
    la solution multi paramètres n'est pas exploitable car la liste de choix peut être très longue.

    Je confirme qu'il s'agit bien d'un problème d'interprétation, car lorsque je renseigne pliste avec 'select * from tref_apporteur where id_ref_apporteur in (99001, 990003, 990004) order by nom_apporteur' j'ai une erreur d'exécution EMyError 'You have an error in your SQL syntax'.

    Cette même requête s'exécutant parfaitement sous HeidiSql.

    Merci pour vos suggestions.

Discussions similaires

  1. [PostgreSQL] requete LIKE delphi 7
    Par Elpresidente dans le forum Bases de données
    Réponses: 2
    Dernier message: 13/06/2013, 16h11
  2. Syntaxe du sous-requete sous delphi
    Par abeny dans le forum Langage
    Réponses: 9
    Dernier message: 09/06/2010, 02h23
  3. Tri sur une Requete en delphi
    Par Zizou7 dans le forum Bases de données
    Réponses: 19
    Dernier message: 22/06/2009, 10h41
  4. Requete Parametrée Delphi
    Par tleboukaka dans le forum Bases de données
    Réponses: 1
    Dernier message: 03/08/2007, 05h56
  5. Probleme de requete en Delphi...
    Par cmoimeme dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/12/2005, 07h08

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