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 :

MySQL problème de requète


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut MySQL problème de requète
    Je sèche depuis cet après-midi :-/
    Je cherche à afficher les données d'une table dans un DBGrid.
    En fonction du code, j'obtiens soit toute la table, soit une grille vide
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    procedure TForm1.SelLotChange(Sender: TObject);
    begin
    // filtrer l'affichage de dbgrid
    selLot.Text:=selLot.selText;
    SQLConnection_QCVal.connected:=False;
    DBAdvgrid_QCVal.ClearAll;
    DBAdvgrid_QCVal.UpdateActive;
    SQLConnection_QCVal.connected:=False;
    SQLDataset_QCVal.CommandText:='select * from qc_val where QCLot = '''+selLot.selText+''' ';
    SQLConnection_QCVal.connected:=True;
    ClientDataSet_QCVal.Active:=False;
    ClientDataSet_QCVal.Active:=True;
    DBAdvgrid_QCVal.Update;
    selLot.selText:='';
    end;
    avec la variante qui m'affiche tout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLDataset_QCVal.CommandText:='select * from qc_val where QCLot = '''+'%'+selLot.selText+''' ';
    et avec le code simpliste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.SelLotChange(Sender: TObject);
    begin
    // filtrer l'affichage de dbgrid
     ClientDataSet_QCVal.Active:=False;
    SQLConnection_QCVal.connected:=False;
    SQLDataset_QCVal.CommandText:='select * from qc_val where QCLot like ''33501103''';
    SQLConnection_QCVal.connected:=True;
    end;
    ne m'affiche rien
    Au plus j'avance, au moins j'y comprend qq chose
    Merci pour vos suggestions

  2. #2
    Rédacteur/Modérateur

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

    C'est dans ces cas que je préfère généralement utiliser des requêtes paramétrées , c'est peut être un peu plus long à écrire (une ligne de plus par paramètre à minima) mais certainement plus 'lisible' .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SQLDataset_QCVal.CommandText:='select * from qc_val where QCLot = :PSel';
    //? SQLDataset ADO ? je ne sais pas si l'on peut passer des paramètres a une commande 
    SQLDataset_QCVal.Parameters.ParamByName('PSel').value := SelLot.Seltext;
    Autre chose que j'évite , dans le cas contraire , c'est de surcharger en quotes , QuotedStr est là pour ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLDataset_QCVal.CommandText:='select * from qc_val where QCLot = '+QuotedStr(selLot.selText);
    Ce qui me trouble c'est SelLot.SelText , j'ai l'impression que c'est égal à '' (ce qui expliquerai les comportements) .
    Si selLot est un TEdit , changer la selection ne lève pas l'évènement OnChange (du moins en D7)
    Lors de la saisie d'un caractère (provoquant ainsi un changement) le sélection est annulée (d'où la chaine vide)

  3. #3
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut
    De fait SelLot.SelText ne renvoie rien
    Bien vu SelLot est un combobox; j'utilise donc avec succès: sellot.items[sellot.itemIndex]
    Voici le code final avec la simplification 'QuotedStr'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.SelLotChange(Sender: TObject);
    begin
    // filtrer l'affichage de dbgrid
    SQLConnection_QCVal.connected:=False;
    ClientDataSet_QCVal.Active:=False;
    SQLDataset_QCVal.CommandText:='select * from `qc_val` where `QCLot` like '+QuotedStr(sellot.items[sellot.itemIndex]);
    ClientDataSet_QCVal.Active:=True;
    SQLConnection_QCVal.connected:=True;
    end;
    1000x SergioMaster

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 08/10/2007, 17h36
  2. Réponses: 0
    Dernier message: 05/10/2007, 10h04
  3. [MYSQL] Problèmes de requêtes...
    Par touriste13 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/05/2006, 09h25
  4. [MySQL] Problème de requête sur des dates
    Par dahu29 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/03/2006, 13h08
  5. Problème sur requête insert mysql
    Par kcizth dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/02/2006, 18h37

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