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 :

Sql sur une base MySql


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Sql sur une base MySql
    Bien le bonjour Mesdames, Messieurs,

    Je suis en peine d'un gag tout simple : une requète avec 2 items :

    le code utilise 2 Edit et fait la requète hors le deuxième n'est jamais pris en compte !?!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      mysql_query(mysql, pChar('SELECT * FROM'  +ADR.Table+  'WHERE ((nomp Like " '+Edit1.text +' %") and (prepat Like "' +Edit2.text + '%"))  '));
    si une idée passait par la ...

    Merci par avance.

    Rickless

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    Tu ne peux pas accéder au texte "construit" de ta requète ?

    Enfin:
    1 espace après le FROM
    1 autre avant le WHERE
    1 en trop avant le % qui suit Edit1.Text

    mais c'est SGDG

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Suite modification
    Re bonjour,

    Modification du code avec le même résultat


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      mysql_query(mysql, pChar('SELECT * FROM ' + ADR.Table + ' WHERE (nomp Like " '+Edit1.text + '%") and (prepat Like "'+Edit2.text + '%")'));
    Merci par avance

    Rickless

  4. #4
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Points : 641
    Points
    641
    Par défaut
    Salut,
    avant tout, pourquoi poster 2 fois pour le même problème , de plus, peux tu nous expliquer réellement ton problème :
    le second champs n'est pas pris en compte ca veut dire quoi exactement , le 'and' sur le deuxième champs ne filtre pas les données ?
    Donne nous un exemple stp.

  5. #5
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Bon là tout le monde est satisfait. J'ai fusionné les deux sujets. Merci Rickless de poster les messages dans le même fil

    Pourquoi n'utilises-tu pas QuotedStr pour mettre tes chaînes entre quotes ? Un peu comme dans cette QR.

    A+

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Oups et suite
    Merci à Lper et Kaiser(toujours prêt)

    Explication, la souris à violemment ripé sur ma table qui en basculant à tapé le vase que j'ai essayé de rattrapé et à explosé sur la prise électrique mettant le feu au rideau et les pompiers.... bon j'arrête

    Effectivement j'ai cliqué sur <nouveau> au lieu de <répondre> Toutes mes excuses (mais il est bon de le faire remarquer)

    Revenons au problème : Lors d’une requête simple aucune difficulté pour charger mon stringgrid (j’envoi un showmessage du résultat trouvé). Mais lorsque j’utilise la ligne que je vous ai fais parvenir, la recherche dans ma base mysql liste l’ensemble du fichier sans trouver ma demande (ne me faites pas la honte de me demander si les valeurs existent bel et bien la réponse et OUI. Donc pourquoi balaye-t-il sans trouver les lignes correspondant à mon choix multiple ?

    J’espère avoir été un peu plus clair cette fois ci

    Par avance merci

    Rickless

  7. #7
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Points : 641
    Points
    641
    Par défaut
    Excuse moi d'insister, mais ne confond tu pas le 'and' avec le 'or' ?

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 23
    Points : 16
    Points
    16
    Par défaut English spoken !?!
    Lper,

    Arrête-moi si je dis une ânerie :
    And = et
    or = ou

    Donc si je met and cela voudrait dire que je souhaite avoir les deux conditions pour obtenir mon résultat.

    Ou alors je dois utiliser or mais alors cela voudrait dire que j'affiche le résultat si je trouve l'un OU l'autre de la demande !?!

    Je finit par être embrouillé.

    Help me si je puis m'exprimer ainsi

    Rickless

  9. #9
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Points : 641
    Points
    641
    Par défaut
    Oulala, c'est ce que je craignais, la base de la programmation, le ou et le and logique.
    En bref, voici le résultat des opérateurs en binaire (tu adaptes ensuite à tes conditions, le 0 veut dire faux et le 1 vrai) :
    Condition1 Condition 2 AND OR
    ... 0 .............. 0 ............. 0 .... 0
    ... 1 .............. 0 ............. 0 .... 1
    ... 0 .............. 1 ............. 0 .... 1
    ... 1 .............. 1 ............. 1 .... 1


    En gros, si tu veux avoir soit l'une, soit l'autre soit les 2 conditions, tu utilises un 'OR', sinon si tu veux avoir les deux conditions à la fois vérifiées, tu utilises le 'AND'.

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Oui
    Lper,

    Très bien pour le rappel. Donc je confirme avoir besoin d'un and afin d'extraire de ma base MySql les Deux conditions réunis pour l'installer confortablement dans mon stringgrid. En prenant un exmeple concret si tu le veut bien :

    2 colonnes : nom et prénom

    je souhaite extraire tous les noms commencant par dup.... ET commençant par le prénom jea... donc dans mon string grid j'aurais les dupont jean, dupont jean-pierre, duplantier jean-marie etc etc etc.

    cela revient à faire un where avec deux conditions qui doivent être vrai pour avoir uen ou plusieurs réponse.

    Accepte-tu mon point de vue ? ou dois-je m'occuper des courses à la maison ? Non ne répond pas merci !!!

    Merci par avance en tout cas

    Rickless

  11. #11
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Points : 641
    Points
    641
    Par défaut
    Ok, désolé de t'avoir embrouillé mais ton raisonnement était donc bien juste
    Peut être dois tu supprimer les espaces alors dans les Edit en utilisant la fonction trim ?

  12. #12
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 23
    Points : 16
    Points
    16
    Par défaut OUIIIIII
    Lper,

    cela me parait finement bien joué.

    Je demande un petit coup de pouce de fin de journée. Je n'ai jamais utilisé la fonction trim

    Afin d'éviter la perte massive de neurone, pourrais-tu m'indiquer un exemple.

    J'ai vite regarder dans la faq et trim me donne de l'IP ! et dans le gros volume idem et dans l'aide en ligne pas d'exmple.

    Merci par avance.

    Rickless

  13. #13
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Points : 641
    Points
    641
    Par défaut
    juste à ajouter le trim et pourquoi pas le quotedstr comme l'indique King Kaiser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query(mysql, pChar('SELECT * FROM ' + ADR.Table + ' WHERE nomp Like '+quotedstr(trim(Edit1.text) + '%') + ' and prepat Like '+quotedstr(trim(Edit2.text) + '%')));

  14. #14
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Suite et fin
    Je remercie Lper et King Kaiser pour leur conseil avisé.

    A priori même en utilisant la phrase fournie, cela ne fonctionne pas alors je dois avoir un problème ailleur concernant l'accès de ma base MySql

    Merci encore pour tous

    Je vais chercher en amont du prog et voir d'ou vient l'erreur.

    A bientôt


    Rickless

  15. #15
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Deux choses :

    1- Es tu sur que tu fais la recherche sur le bon champ ? (prepat)
    2- As tu essayé avec un * au lieu d'un % ? (vu que c'est assez changeant selon qu'on utilise tel ou tel systeme de connexion à la base de données)

  16. #16
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Suite
    Merci Malatar de t'occuper du cas.

    Réponse

    1/ Oui je fais bien la recherche sur le bon champ. Si je teste en "mono" demande sur prepat cela fonctionne parfaitement

    2/ J'essaye avec une *, idem (à titre indicatif, j'utilise Delphi 5)

    J'ai lu dans plusieurs forum qu'il pouvait y avoir des problèmes avec les libmysql.dll et autres. N'y aurait-il pas un problème à ce niveau la

    Re à titre idicatif, si je ne mets rien dans l'Edit2 alors j'ai un message d'erreur de type "Le projet xxxxx.exe a provoqué une classe d'exception EAccessViolation avec le message "Violation d'accès à l'adresse 100077E4 dans le module 'libmysql.dll'. Lecture de l'adresse 00000008'. Processus stoppé. Utilisez Pas-à-pas ou Executez pour continuer. OK"

    Ce qui me semble logique puisque ne t'intercepte pas encore la valeur nulle (j'oblige dans le Tedit1 à mettre minimum 3 caractères ce que je ferais pas plus tard que maintenant sur le TEdit2)

    Bon, je continue à creuser

    Merci encore Malatar

    Rickless

  17. #17
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Juste une derniere chose, est ce par choix ou nécessité que tu utilises MySQL.pas ?
    Pourquoi n'utilises tu pas un drivers odbc (gratuit) et les composants ADO ?

  18. #18
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Suite
    Merci Malatar,

    Mais j'ai trouvé !

    J'ai modifié la requète et mes Tedit. Sans explication logique à l'heure actuel, j'ai fait une copie du Tedit1 en Tedit2 et tout fonctionne à merveille ???

    Poue ceux que cela interresse la phrase finale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query(mysql, pChar('SELECT * FROM ' + ADR.Table + ' where nomp like "'+Edit1.text+'%" and prepat like "'+Edit2.text+'%"'));
    Attention à bien respecter les espace et autre

    Encore merci à tout le monde. Au moins on ne se sent pas seul.

    Rickless

    Maintenant je vais pouvoir clôturer !!!

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/03/2008, 14h26
  2. Drop impossible sur une base Mysql
    Par grouzou_08 dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/08/2007, 11h42
  3. problème de connexion sur une base mysql
    Par boss_gama dans le forum Installation
    Réponses: 4
    Dernier message: 05/09/2006, 14h13
  4. Connexion à distance sur une base MySQL Server
    Par pblb62 dans le forum Outils
    Réponses: 1
    Dernier message: 12/05/2006, 09h41
  5. Connexion sur une base Mysql distante (non locale)
    Par externa dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 20/02/2006, 11h34

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