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 :

Filtre multi-critères dans une base Paradox


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 57
    Points : 56
    Points
    56
    Par défaut Filtre multi-critères dans une base Paradox
    Bonjour,

    Suite à la déception de la qualité de l'option Stretch dans Lazarus, je viens de repasser sous Delphi et tente de transcrire une application.

    En essayant de transcrire un tri d'une base DBase VII dans Lazarus vers une base Paradox dans Delphi 2005, il apparait un problème. En effet, j'écris le même code dans les deux versions pour filtrer des éléments partiels :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Filtre := 'Champ1 = ''*' + Edit1.Text + '*'' and Champ2 = '*'' + ....... ;
    Table1.Filter := Filtre;
    Table1.Filtered := True;
    Sous Lazarus, tout fonctionne correctement mais pas sous Delphi.

    Quelqu'un aurait-il une idée ?

    Lohot

  2. #2
    Membre habitué

    Inscrit en
    Août 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 253
    Points : 197
    Points
    197
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Filtre := 'Champ1 = *' + quotedstr(Edit1.Text)+'* and ' + 'Champ2 = *' + quotedstr(Edit2.Text)+'*'...
    Table1.Filter := Filtre;
    Table1.Filtered := True;

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 57
    Points : 56
    Points
    56
    Par défaut
    Après avoir essayer ce qu'helmis me conseillait, l'application me renvois un message d'erreur :

    Expression attendue mais '*' trouvé


    Une précision, le filtre type TA* fonctionne correctement mais ni *TA ou *TA*.

    Quelqu'un aurait-il un conseil ?

    Lohot

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    tu peux essayer un truc de ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filter := 'chaine like ''%'+ edit1.text +'%''';

  5. #5
    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
    Helmis a fait une grosse faute dans son filtre c'est qu'il a mis les * à l'extérieur du QuotedStr, alors qu'il faut que les * soit à l'intérieur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Filtre := 'Champ1 = '+ QuotedStr('*' + Edit1.Text + '*') + ' and Champ2 = ' + QuotedStr('*' + Edit.text + '*') + .... ;
    Table1.Filter := Filtre;
    Table1.Filtered := True;
    Modérateur Delphi

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

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    L'étoile ne marche comme l'indique lohot que si la chaine ne commence pas par *, surement un bug delphi. Le like fonctionne parfaitement par contre.

  7. #7
    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 macumba
    L'étoile ne marche comme l'indique lohot que si la chaine ne commence pas par *, surement un bug delphi. Le like fonctionne parfaitement par contre.
    C'est normal vu que ce qu'helmis proposait étais faux, relis bien le code d'helmis et tu verras.

    Citation Envoyé par code helmis
    Filtre := 'Champ1 = *' + quotedstr(Edit1.Text)+'* and ' + 'Champ2 = *' + quotedstr(Edit2.Text)+'*'...
    prenons edit1.text = toto et edit2.text = tata

    Filtre sera égal à : Champ1 = *'toto'* and Champ2 = *'tata'*

    Normal que ca lui fasse une erreur vu que la synthaxe SQL est fausse.

    Après il est vrai que * ne fonctionnera pas pour certaine base de données (parfois faut mettre %)
    Modérateur Delphi

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

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 57
    Points : 56
    Points
    56
    Par défaut
    Il est vrai que le tri dont le critère est de type *TATA* ne renvoit pas d'erreur, mais a priori Delphi (2005) ne reconnait pas l'étoile devant comme signifiant n'importe quelle chaine de caractère avant donc filtre tous les mots ne commençant pas par *TATA (et ce n'est pas ce que je recherche).

    Par contre, j'utilise une base de d onnée PARADOX et quand je me connecte à celle-ci et que j'essaye d'écrire CHAMP1 like '%MOT%' dans le champ filter de l'inspecteur d'objet de la TTable Delphi me renvois cette erreur : Erreur du moteur de base de donnée Opération non applicable.

    Si cela fonctionne avec un autre type de base de donnée, je suis preneur du rensenseignement.

    Lohot

  9. #9
    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
    *Fait un mix des réponses*


    Essaie cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Filtre := 'Champ1 = '+ QuotedStr('%' + Edit1.Text + '%') + ' and Champ2 = ' + QuotedStr('%' + Edit.text + '%') + .... ;
    Table1.Filter := Filtre;
    Table1.Filtered := True;
    Modérateur Delphi

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

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 57
    Points : 56
    Points
    56
    Par défaut
    Après maints essais infructueux, j'ai décidé de créer ma propre procédure de tri permettant de contourner le problème de majuscule et minuscule et autres de Delphi.

    Je posterai le code dès que je serai sûr du bon fonctionnement de celui-ci.

    Lohot

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    Citation:
    macumba a écrit :
    L'étoile ne marche comme l'indique lohot que si la chaine ne commence pas par *, surement un bug delphi. Le like fonctionne parfaitement par contre.


    C'est normal vu que ce qu'helmis proposait étais faux, relis bien le code d'helmis et tu verras.
    Non j'ai testé avec un code correct car je savais que celui d'helmis était faux. Pour info il n'y a pas que delphi 2005 qui plante avec cette écriture delphi 6 aussi. Le like n'est pas indiqué dans l'aide mais il fonctionne bien uniquement sur des TClientDataset et malheureusement pas sur des TTable ou des TQuery.

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

Discussions similaires

  1. [MySQL] Requête multi-critère dans une table très simple
    Par flashnet dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/05/2013, 20h56
  2. [AC-2003] Recherche multi-critère dans une même table
    Par Tadao dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/03/2010, 19h01
  3. insérer une image dans une base paradox par sql
    Par maamar1979 dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/06/2009, 14h15
  4. [WD10] multi-critères dans une requete
    Par ezeckia dans le forum WinDev
    Réponses: 6
    Dernier message: 17/09/2008, 14h21
  5. Créer un champ contenant un son wav dans une base Paradox
    Par Grandad95 dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/07/2004, 17h00

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