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 :

Requête sql avec mysql sous delphi


Sujet :

Bases de données Delphi

  1. #21
    Membre habitué Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Points : 195
    Points
    195
    Par défaut
    ca marche pour certains cas mais pas pour d'autres, ta routine est tres asticieuse mais excuser moi, je n'arrive ps à l'implanter
    Images attachées Images attachées  
    A la Recherche du Parfait il faut faire et refaire
    L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    j'imagine que les listbox correspondent à des index dans une table secondaire non ?

    dans ce cas il faut pas utiliser le code proposé mais un dérivé pour un entier

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    var
     sep:string;
     
     procedure AddField(const Value,FieldName:string);
     begin 
      if Value='' then exit;
      SQL.Add(sep+FieldName+' LIKE "%'+SqlEncode(Value)+'%"');
      sep:=' AND ';
     end;
     
     procedure AddIndex(Value:integer; const FieldName:string);
     begin
      if Value<0 then exit;
      SQL.Add(sep+FieldName+'='+IntToStr(Value));
      sep:=' AND ';
     end;
     
    begin
     SQL.Text:='SELECT * FROM Table';
     sep:=' WHERE ';
     AddField(Edit1.Text,'Champ1');
     AddField(Edit2.Text,'Champ2');
     AddField(Edit3.Text,'Champ3');
     AddIndex(ComboBox1.ItemIndex,'Champ4');
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #23
    Membre habitué Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Points : 195
    Points
    195
    Par défaut
    Voilà un cas concret ou ca ne marche pas
    Images attachées Images attachées   
    A la Recherche du Parfait il faut faire et refaire
    L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    oui c'est exactement ce dont je parle juste un avant...le champ fonction ne serait-il pas un entier contenant un code fonction au lieu du libellé ?

    si ce n'est pas le cas, c'est que la base est mal conçue
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #25
    Membre habitué Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Points : 195
    Points
    195
    Par défaut
    les champs sont tous des VARChar, sauf pour Matricule int(11) . Ma table est tout ce qui y a de plus simple.
    A la Recherche du Parfait il faut faire et refaire
    L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.

  6. #26
    Membre actif
    Homme Profil pro
    Programmeur Delphi
    Inscrit en
    Octobre 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Programmeur Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 183
    Points : 227
    Points
    227
    Par défaut
    Dans le message d'erreur de la requête
    il manque le mot clé "WHERE" à la place du "AND"...

  7. #27
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 420
    Points : 5 819
    Points
    5 819
    Par défaut
    salut

    regade bien le code que paul ta fournie

    le premier sep etait where et une foi passé dans la condition
    la variable sep passe a and

    j'avou que je ne l'aurai pas fait ainsi mais sa demarche est assez clair

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  8. #28
    Membre habitué Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Points : 195
    Points
    195
    Par défaut
    justement il est très claire et très logique, mais le fait de passer au AND directement des que je rempli plusieurs Edit en meme temps : nom := 'Quelque chose' et Matricule := 'Quelque chose' j'ai ce message d'erreur. J'avoue que je suis mal barré comme ça
    A la Recherche du Parfait il faut faire et refaire
    L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.

  9. #29
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 420
    Points : 5 819
    Points
    5 819
    Par défaut
    salut

    bon je reprend le code de paul

    Citation Envoyé par Paul TOTH Voir le message
    personnellement je construis ce genre de requête comme ceci :

    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
    17
    18
    19
    20
     
    var
     sep:string; Declaration du sep
     sql:string;
     
     // attention c'est un methode interne 
     procedure AddField(const Value,FieldName:string);
     begin 
      if Value='' then exit;// si la premiere  on sort 
      sql:=sql+sep+FieldName+' LIKE "%'+SqlEncode(Value)+'%"';
      sep:=' AND '; // si on passe on affecte le and 
     end;
     
    begin
     sql:='SELECT * FROM Table';
     sep:=' WHERE ';// on affecte le premier sep 
     AddField(Edit1.Text,'Champ1');// là le sep devient "and" apres
     AddField(Edit2.Text,'Champ2');
     AddField(Edit3.Text,'Champ3');// ici le sep est encore "and"
    end;
    la fonction SqlEncode étant là pour échaper les quotes dans la chaine (voir mon unité MySQLClient)
    si tu as suivi son code tu ne doit pas avoir de soucis

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  10. #30
    Membre habitué Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Points : 195
    Points
    195
    Par défaut
    J'ai aucun problème quant je fais un seul de critère de recherche, mais dès que je mets plusieurs ca ne marche plus pour certaines combinaisons, j'ai les boules
    A la Recherche du Parfait il faut faire et refaire
    L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par colfire_dev Voir le message
    J'ai aucun problème quant je fais un seul de critère de recherche, mais dès que je mets plusieurs ca ne marche plus pour certaines combinaisons, j'ai les boules
    à moins de copier/coller ton code, on ne pourra pas t'aider là
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  12. #32
    Membre habitué Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Points : 195
    Points
    195
    Par défaut
    Oui c'est vrai, le voici :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    procedure AddField(const Value,FieldName:string);
     begin
      if Value='' then exit;
      dm.tbPersonne.SQL.Add(sql+sep+FieldName+' LIKE "%'+SqlEncode(Value)+'%"');
      sep:=' AND ';
     end;
     
    procedure TfMenu.bGoClick(Sender: TObject);
    begin
      dm.tbPersonne.Close;
      dm.tbPersonne.SQL.Clear;
      sql := '';sep:='';
      sql:='SELECT * FROM personne';
      sep:=' WHERE ';
      AddField(eNom.Text,'nom');
      AddField(eMatricule.Text,'matricule');
      AddField(cbService.Text,'service');
      AddField(cbFonction.Text,'fonction');
      AddField(eCin.Text,'cin');
      AddField(eEtat.Text,'etat');
      AddField(eType.Text,'tenue_civile');
      dm.tbPersonne.Open;
      lTotal.Caption := IntToStr(dm.tbPersonne.RecordCount);
    end;
    A la Recherche du Parfait il faut faire et refaire
    L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.

  13. #33
    Membre habitué Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Points : 195
    Points
    195
    Par défaut
    je suis sur qu'il y a qlq chose de tres banal qui m'échappe, mais c quoi j'arrive toujours pas à le detecter
    A la Recherche du Parfait il faut faire et refaire
    L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    ARGH !

    déjà, il faut utiliser les balises CODE pour le code

    ensuite tu as fait un gros mélange des genres !

    soit tu utilises la variable "sql:string" soit tu utilise "SQL.Add()" mais pas le deux !

    tel que tu écris ton code tu vas te retrouver avec une requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     'SELECT * FROM Personne WHERE nom LIKE "%TOTH%" AND SELECT * FORM Personne AND matricule LIKE "%1234%"'
    pour détecter ce genre d'erreur, il suffit d'ajouter un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     ShowMessage(dm.tbPersonne.SQL.Text);
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  15. #35
    Membre habitué Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Points : 195
    Points
    195
    Par défaut
    quelle balise dois je mettre?
    justement je voudrais utiliser sql comme tu m'as envoyé ds le source. Mais je n'ai ps réussi à l'integrer ds mon SQL Command pour pouvoir l'executer.
    Corrigez moi le source que je vous ai envoyé, parceque moi je suis saturé à force d'y réflechir
    Merci beaucoup d'avance
    A la Recherche du Parfait il faut faire et refaire
    L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.

  16. #36
    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
    Pour ma part je ferais plus dans ce style

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    var
      lst : TStringList;
      i : integer;
      sChamp,sValue : String;
    begin
      lst := TStringList.Create;
      try
       if eNom.Text <> '' then
        lst.Add('nom=' + eNom.Text;
     
      if cbService.Text <> '' then
        lst.add('service=' + cbService.Text;
     
      if cbFonction.Text <> '' then
        lst.Add('function=' + cbFonction.Text);
     
      if eMatricule.Text <> '' then
        lst.Add('matricule=' + eMatricule.Text);
     
      // Etc ... pour les champs
     
      with dm.tbPersonne do
      begin
        Close;
        SQL.Clear;
        SQL.Add('Select * from personne');
        if lst.Count > 0 then
          SQL.Add('where');
        for i := 0 to lst.Count -1 do
        begin
          sChamps := lst.Names[i];
          sValue := lst.Value[sChamp];
          SQL.Add(sChamps  ' LIKE ' + QuotedStr('%' + sValue + '%'));
          if i <> lst.count -1 then
            SQL.Add('And');
        end;
        SQL.Add('order by nom');
        // sauvegarde de la requete dans un fichier texte pour voir à quoi elle ressemble
        SQL.SaveToFile('Marequetetest.txt');  
        Open;
      end;
      finally
        lst.free;
      end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  17. #37
    Membre habitué Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Points : 195
    Points
    195
    Par défaut
    merci beaucoup Rayek, je vais tester cette routine, et je vous tiens au courant
    A la Recherche du Parfait il faut faire et refaire
    L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.

  18. #38
    Membre habitué Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Points : 195
    Points
    195
    Par défaut
    je vous remercie tous pour votre support, le resultat est tres satisfaisant
    Merci mille fois
    A la Recherche du Parfait il faut faire et refaire
    L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. fatal error -2147467259 lors d'une requête SQL avec Mysql
    Par Spartanjohn dans le forum ADO.NET
    Réponses: 2
    Dernier message: 18/03/2013, 17h23
  2. Requête SQL avec paramètre sous visual studio 2008
    Par Jeecer dans le forum Accès aux données
    Réponses: 3
    Dernier message: 21/08/2011, 10h18
  3. Lancer une requête sql avec sql plus sous dos
    Par feragne dans le forum Sql*Plus
    Réponses: 12
    Dernier message: 15/10/2008, 14h49
  4. [vista,VB 2005,SQL server 2005]requêtes paramétrées avec mysql
    Par olivier57b dans le forum Accès aux données
    Réponses: 4
    Dernier message: 04/09/2008, 18h58
  5. Requête SQL avec création de table sous condition
    Par misig dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 04/11/2007, 08h58

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