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 :

Erreur de filtre sur une table Firebird


Sujet :

Bases de données Delphi

  1. #1
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut Erreur de filtre sur une table Firebird
    Hello

    L'erreur «ParseError ) expected» est provoquée par le filtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FirstNameTable.Filter := SubString(FirstName From 1 For 5) = 'Marie';
    FirstNameTable.Filtered := True;
    Si quelqu'un voit d'où provient l'erreur, je lui serais reconnaissant.

    Je suis d'autant plus étonné qu'une sélection avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT  FirstName, GENDER FROM
    FirstNameTable WHERE SubString(UpperFirstName From 1 For 5) = 'MARIE'
    fonctionne sans problème.

    Merci pour votre attention

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 33
    Points : 31
    Points
    31
    Par défaut
    Je pense que ce problème ne concerne pas firebird mais le composant Table que vous utilisez.

    Pour des filtres de ce genre (substring), j'utilise plutôt l'evnt OnFilterRecord de la table (si votre composant Table en est pourvu !) et si ça répond à vos attentes.

    Bon courage.

  3. #3
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    FireBird supporte l'opérateur LIKE dans le filtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FirstNameTable.Filter := 'FirstName LIKE Marie%';
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  4. #4
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Je reviens sur ce post après un court séjour à Rome.

    Je veux utiliser Substring pour que le filtre porte obligatoirement sur les premiers caractères du champs, ce que "LIKE" ne permet pas.

    Ce qui m'interpelle c'est que le filtre sur une table provoque une erreur alors qu'un Query fonctionne parfaitement avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select * FROM
    FIRSTNAME WHERE SubString(UpperFirstName From 1 For 5) = 'MARIE'

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Parce que le filtre ne supporte pas tous les opérateurs , c'est plus une syntaxe à la Paradox , je ne crois même pas qu'il accepte de champ calculés .
    J'évite les filtres

    suggestion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT  FirstName, GENDER,SubString(FirstName From 1 For 5) AS PLF FROM FirstNameTable
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FirstNameTable.Filter :=  'PLF = "Marie"';
    FirstNameTable.Filtered := True;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Citation Envoyé par defluc Voir le message
    Je veux utiliser Substring pour que le filtre porte obligatoirement sur les premiers caractères du champs, ce que "LIKE" ne permet pas.
    Non, Like 'TRUC%' va prendre tout ce qui commence par TRUC
    Donc TRUC TRUC0 TRUCTRUC TRUCS
    Mais pas LETRUC

    De même %TRUC sera pour TRUC en fin et %TRUC% pour n'importe ou dans la chaine.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  7. #7
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    D'accord mais cela me demande de passer par une requête et de changer le DataSource de mes composants visuels en leur passant cette requête.

    C'est donc plus lourd et moins «propre».

    En puriste, je pousse la question jusqu'au bout.
    Si la requête avec Substring fonctionne et que la méthode "Filter" du composant table provoque une erreur de syntaxe, soit il y a un bug du composant table, soit c'est effectivement une erreur de syntaxe et alors il doit y avoir une solution.

  8. #8
    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
    Citation Envoyé par defluc Voir le message
    ... soit il y a un bug du composant table
    Non, point de bug, la propriété Filter ne supporte pas les expressions "complexes".
    A ta place j'utiliserais l'événement OnFilterRecord, beaucoup plus souple.

    Nota: La proposition de Sergio est aussi une solution.

    @+ Claudius.

  9. #9
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    J'ai adopté la solution de yvesagha qui fonctionne parfaitement.

    Merci à tous

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

Discussions similaires

  1. Problème de filtre sur une table
    Par bilal_ini dans le forum Bases de données
    Réponses: 9
    Dernier message: 18/07/2019, 07h35
  2. Probléme de Filtre sur une Table
    Par souminet dans le forum Débuter
    Réponses: 1
    Dernier message: 28/04/2008, 11h34
  3. Recupérer le résultat d'une requête sur une table Firebird
    Par defluc dans le forum Bases de données
    Réponses: 7
    Dernier message: 20/04/2007, 18h30
  4. [SQL Server] Filtré sur une table avant une jointure externe
    Par TangoZoulou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/11/2006, 15h52

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