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 :

Problème avec une requete SQL


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 100
    Points : 61
    Points
    61
    Par défaut Problème avec une requete SQL
    bonjour !
    j'ai un petit problème, je voudrai charger par programmation une requête dans un Tquery

    Voici la requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from ma_table where mon_champ like 'valeur'
    Mais le problème qui se pose c'est que je veux que le nom du champ et la valeur recherchée soient récupérés à partir des Tedit
    Pour la valeur : j'ai utilisé la fonction QUOTEDSTR()
    Mais pour le nom du champ je ne sais pas quoi utiliser vu que la fonction QUOTEDSTR() renvoie le nom du champ entre cotes
    J’espère j'étais clair....................Merci d'avance!

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Format('SELECT * FROM ma_table WHERE %s LIKE ''%s''', 
      EditNomChamp.Text, EditValeurChamp.Text);
    le délimiteur de champ c'est selon la DB
    ` en MySQL
    [] en ACCESS

    Idem pour le délimiteur de chaine
    ' en SYBASE
    " en ...

  3. #3
    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
    Citation Envoyé par youce90 Voir le message
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from ma_table where mon_champ like 'valeur'
    Ne pas oublier les jokers % et _ avec l'opérateur LIKE ...
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from ma_table where mon_champ like '%valeur%' // par exemple

    Citation Envoyé par youce90 Voir le message
    je veux que le nom du champ et la valeur recherchée soient récupérés à partir des Tedit
    Ne pas oublier de tester l’existence de la colonne saisie dans le TEdit avant de lancer ta requête.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 100
    Points : 61
    Points
    61
    Par défaut
    Merci pour votre aide !
    Très utile cette commande FORMAT
    J'ai appris un nouveau truc !
    .
    .
    .
    Maintenant, ça marche correctement, MAIS pour les champs de types Numérique ou Date j'obtiens un message d'erreur:
    " Type mismatch in expression "
    Comment je dois régler ça ?????

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 785
    Points : 5 916
    Points
    5 916
    Par défaut
    Bonjour,
    Citation Envoyé par youce90 Voir le message
    MAIS pour les champs de types Numérique ou Date j'obtiens un message d'erreur:
    " Type mismatch in expression "
    Comment je dois régler ça ?????
    Une 1° solution dans la continuité de ce qui a été donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // pour une valeur numérique 
    sqltext := Format('SELECT * FROM ma_table WHERE %s LIKE %s',
                     [EditNomChamp.Text, EditValeurChamp.Text]);
    // pour une valeur chaine de caractères
    sqltext := Format('SELECT * FROM ma_table WHERE %s LIKE %s',
                     [EditNomChamp.Text, QuotedStr(EditValeurChamp.Text)]);
    Mais attention aux dates.
    Regardez l'aide de Delphi sur le formatage et les fonctions présentées

    Une autre solution (plus élégante et robuste) est de passer en partie par des paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      Query1.SQL.Text := Format('SELECT * FROM ma_table WHERE %s LIKE :Param1', [EditNomChamp.Text]);
      // Pour une chaine de caractères
      Query1.ParamByName('Param1').AsString := EditValeurChamp.Text;
      // Pour un entier
      Query1.ParamByName('Param1').AsInteger := StrToInt(EditValeurChamp.Text);
      // Pour une "date heure"
      Query1.ParamByName('Param1').AsDateTime := StrToDateTime(EditValeurChamp.Text);
    --
    Philippe.

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Un LIKE sur un nombre ou une date en même temps ça fait quoi ?
    Pour une Date, on utilise plutôt BETWEEN pour un intervalle

  7. #7
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 785
    Points : 5 916
    Points
    5 916
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Un LIKE sur un nombre ou une date en même temps ça fait quoi ?
    Pour une Date, on utilise plutôt BETWEEN pour un intervalle
    Vous avez tout à fait raison, je me suis laissé emporter hier soir !

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 100
    Points : 61
    Points
    61
    Par défaut
    Désolé pour le retard !
    Oui au début ça n'a pas marcher la solution de Parambyname proposé par PH.B
    C'est après que je me suis rendu compte qu'avec les entiers ou les dates, il faut que ça soit un égal (=) et non un "LIKE", sinon ça ne merche pas.
    Donc, c'est résolu ! grâce à vous
    Merci pour votre aide!

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

Discussions similaires

  1. Problème avec une requete sql
    Par Latimer dans le forum SQL
    Réponses: 2
    Dernier message: 18/05/2015, 11h02
  2. [MySQL] Probléme avec une requete SQL
    Par neutrall dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 02/08/2012, 10h34
  3. problème avec une requete sql
    Par crmien dans le forum Requêtes
    Réponses: 3
    Dernier message: 04/03/2010, 08h57
  4. Problème avec une requete SQL sous access
    Par Luther13 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 14/12/2005, 10h39
  5. [ORACLE][SQL] procedure sous delphi avec une requete SQL
    Par nivet dans le forum Bases de données
    Réponses: 2
    Dernier message: 17/11/2004, 13h43

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