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 de recherche multicritère avec filtre


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Points : 17
    Points
    17
    Par défaut Requête de recherche multicritère avec filtre
    j'ai une connexion ADO, adoquery, datasource, dbgrid, edit1, edit2
    edit1.text=10
    edit2.text=411*

    je voudrais faire une recherche multicritere avec un filtre, dans mon dbgrid affiche champ1 qui trouve tous la valeur 10 (edit1.text) et champ2 commence par 411.

    sur mon champ2 j'ai 4010000,40123585,4020000,4110000,4112655 (je voudrais faire un filtre qui commence par 411)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ADOQuery1.Active := false ;
    ADOQuery1.SQL.Text := 'SELECT * FROM table WHERE champ1 Like "%'+edit1.Text+'%" AND champ2 Like "%'+edit2.Text+'%"';
    ADOQuery1.Active := true ;

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 451
    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 451
    Points : 24 859
    Points
    24 859
    Par défaut
    Pas de Question !
    Pas de Réponse !
    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

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    ma question

    j'ai besoin de faire une recherche avec un filtre, je voudrais dans un champ tous les 10, et dans un autre champ ce qui commence par 411

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 451
    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 451
    Points : 24 859
    Points
    24 859
    Par défaut
    Pour le moment, ton code semble correct

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Tout ce qui contient 10
    SELECT * FROM table WHERE champ1 Like "%10%" AND champ2 like "411%"
     
    // Tout ce qui est égal à 10
    SELECT * FROM table WHERE champ1 Like = "10" AND champ2 like "411%"
    as-tu un problème, une erreur, ... tu dis ce que tu veux, oui, mais comme ta requête y répond déjà, je ne vois pas de question !

    est-ce la différence ente "%411%" et "411%" qui te pose un problème ?
    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

  5. #5
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    En fait si je lit bien, la requête que tu fais c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM table WHERE champ1 Like "%10%" AND champ2 like "%411%"
    C'est à dire que tu cherches non pas les enregistrements dont champ1 commencent par '10' et champ2 commencent pas '411', mais tous les enregistrement dont champ1 contient la sous-chaine '10' (n'importe où) et dont champ2 contient la sous-chaine '411' également n'importe où.

    Comme le dit ShaiLeTroll, ce que tu sembles vouloir c'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Tout ce qui est égal à 10
    SELECT * FROM table WHERE champ1 Like = "10" AND champ2 like "411%"
    De plus dans edit2.text, il faut saisir '411' pas '411*'.

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADOQuery1.SQL.Text := 'SELECT * FROM tableC WHERE champ1 Like "%'+edit1.Text+'%" AND champ2 like "411%"';
    ça marche merci

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Points : 17
    Points
    17
    Par défaut je voudrais ajoute un filtre ! du date au date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADOQuery1.SQL.Text := 'SELECT * FROM table WHERE Champ1 Like "%'+combobox5.Text+'%" AND Champ2 like "411%"AND champ3 Like (Dt>='''+DatetoStr(Dt_du.date)+''')And (Dt<='''+DateToStr(Dt_Au.date)+''')';
    Dt_du.date=DateTimePicker1
    Dt_au.date=DateTimePicker2

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 451
    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 451
    Points : 24 859
    Points
    24 859
    Par défaut
    tu devrais consulter la Doc sur le SQL, tu y découvriras le Between, ainsi la syntaxe général du SQL que tu ne maîtrises pas !
    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

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Quel est ton SGBD ? Car la syntaxe sur les dates change suivant celui que tu utilises.

    @+

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    Qu 'est ce qu 'un SGBD?

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    SGBD: Système de Gestion de Base de Données

    Quel type de bases de données utilise-tu ?

  12. #12
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    j'utilise une base access ou j'ai un lien avec une base sql (driver ODBC).
    ADOConnection en utilisant une chaine de construction

  13. #13
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Access utilises ce format pour les dates: #mm/dd/yyyy#

    Donc comme le suggère ShaiLeTroll utilise Between pour spécifier ta plage de dates:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      -- ...
      where ... and (DT between #01/01/2008# and #03/31/2008#);

    @+

  14. #14
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    problème je dois utiliser mes dateTimePicker

  15. #15
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Ce serait bien que tu fasses un petit effort de recherche. est ton ami sur ce coup là.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FormatDateTime('#mm/dd/yyyy#', DateTimePicker1.Date)
    @+

  16. #16
    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
    Citation Envoyé par Cl@udius Voir le message
    Access utilises ce format pour les dates: #mm/dd/yyyy#

    Donc comme le suggère ShaiLeTroll utilise Between pour spécifier ta plage de dates:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      -- ...
      where ... and (DT between #01/01/2008# and #03/31/2008#);

    @+
    Il serait préférable d'utiliser les paramètres

    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
     
    With AdoQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT * FROM table');
      SQL.Add('WHERE Champ1 Like :Param1 AND Champ2 like :Param2');
      SQL.Add('and (DT between :PDebut and :PFin)');
      ParamCheck := True;
      With Parameters do
      begin
        ParamByName('Param1').Value := '%'+combobox5.Text+'%';
        ParamByName('Param2').Value := '411%';
        ParamByName('PDebut').Value := Dt_du.date;
        ParamByName('PFin').Value := Dt_au.date
      end;
      Open;
    end;
    Modérateur Delphi

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

  17. #17
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Rayek Voir le message
    Il serait préférable d'utiliser les paramètres
    C'est exact, et je suis on ne peut plus d'accord avec toi.

  18. #18
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FormatDateTime('#mm/dd/yyyy#', DateTimePicker1.Date)
    ce code je la connais déja.

    mais ca répond pas à ma réponse

  19. #19
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    j'essaye d'utilise la methode de RAYEK


    message d'erreur

    type de donnee incompatible dans l'expression du critere

  20. #20
    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
    Citation Envoyé par totoff80 Voir le message
    j'essaye d'utilise la methode de RAYEK


    message d'erreur

    type de donnee incompatible dans l'expression du critere
    DT est il un champ de type Date ou bien d'un autre type ?
    Modérateur Delphi

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

Discussions similaires

  1. Recherche multicritère avec VB excel
    Par mathieu03101987 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/11/2009, 22h06
  2. [MySQL] Recherche multicritère avec plusieurs mots
    Par rblade dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 19/08/2008, 12h26
  3. Recherche multicritère avec C# & Sql server 2k5
    Par Invité dans le forum Accès aux données
    Réponses: 3
    Dernier message: 26/05/2008, 23h50
  4. Réponses: 8
    Dernier message: 16/02/2008, 10h30
  5. Traduire en code une requête de recherche multicritère.
    Par xycoco dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 15/11/2007, 16h14

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