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 :

Problème de filtre sur une table


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 46
    Points : 28
    Points
    28
    Par défaut Problème de filtre sur une table
    j'ai une table qui contient un numero de quittance, et je veux filtrer cette table par ce numero de quittance en utilisant la propriete Filter de l'inspecteur d'objet, j'ai met dans l'evenement onChance d'un Edit le programe suivant :
    tquittous.Filter:='numquit like '+QuotedStr(Edit1.Text)+'%';
    tquittous.Filtered:=true;
    mais le probleme c'est que ca ne marche pas.

    aide SVP.

  2. #2
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Tu ne dis pas exactement en qui "ça ne marche pas", mais il y a en tous cas un petit problème : ton QuotedStr met une quote entre le texte et le % ! Donc plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QuotedStr(Edit1.Text + '%')
    ;
    Roland
    Roland

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Le probleme ne se regle pas , toujour y a un message d'erreur qui dit : Impossible d'ouvrir le filtre

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Quels sont les composants que tu utilises pour récupérer les données de la BDD ?
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    j'utilise pour ca ADOTable. et j'utilise aussi edit comme parametre du filtre, lorsque je tape 1 dans le champ Edit je doit avoir tous les quittances qui start par le numero 1, et lorsque je continue de tapez les chiffres j'aurais que les numero de quittance qui contient la partie composée, par exemple lorsque je continue de tapez le numero 2 apres le 1 j'aurais que les numero de quittance qui debutent par 12, ainsi de suite.
    Merci.

  6. #6
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Salut,

    Tu peux faire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.Edit1Change(Sender: TObject);
    var
    Filtre:string;
    begin
     
    if tquittous.Filtered=True then tquittous.Filtered:=false;
    Filtre:=Concat(numquit=','''',edit1.Text,'*','''');
    tquittous.Filter:=Filtre;
     
    If Edit1.Text='' then quittous.Filtered:=False
    Else tquittous.Filtered:=True;
    end;
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 265
    Points : 290
    Points
    290
    Par défaut
    Je ne pense pas que l'opérateur Like soit autorisé dans la propriété filter.

    Sinon, tu peux :
    -Un composant requête
    -L'événement OnFilterRecord
    -Construire un filtre comme indiqué dans l'aide pour TDataSet.FilterOptions

    a+

  8. #8
    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 freud Voir le message
    Salut,

    Tu peux faire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.Edit1Change(Sender: TObject);
    var
    Filtre:string;
    begin
     
    if tquittous.Filtered=True then tquittous.Filtered:=false;
    Filtre:=Concat(numquit=','''',edit1.Text,'*','''');
    tquittous.Filter:=Filtre;
     
    If Edit1.Text='' then quittous.Filtered:=False
    Else tquittous.Filtered:=True;
    end;
    Pourquoi faire simple quand on peut faire compliquer ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      tquittous.Filtered:=false;
      If Edit1.Text <> '' then
      begin
        tquittous.Filter:= 'numquit=' + QuotedStr(edit1.text + '%');
        tquittous.Filtered:=True;
      end;
    @Bilal_ini: ton champ numquit est il un champ numérique ou alphanumérique dans ta table ?
    Modérateur Delphi

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

  9. #9
    Membre habitué Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Points : 164
    Points
    164
    Par défaut
    Bonsoir,

    je relance le sujet car je me retrouve pratiquement dans la meme situation,

    Dans mon code je fait appel a une procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fun_filtre(8,dat,'dates like ');
    la procédure en question est comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure Fun_filtre(i:integer;text:tedit;champ:string);
    begin
    if text.text<>'' then
      begin
      filtres[1,i]:=champ;
      filtres[2,i]:=quotedstr('%'+text.Text+'%')
      end
      else
      begin
      filtres[1,i]:='';
      filtres[2,i]:='';
      end;
    end;
    Puis j'execute la procedure finale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TUserdrwing.Image1Click(Sender: TObject);
    var i: Integer;filtr:string;
    begin
    main.Drawing.Filtered:=false;
    for i := 1 to 13 do
      begin
        filtr:=filtr+filtres[1,i]+filtres[2,i];
        if ((filtres[1,i+1]<>''))and(filtr<>'') then
        filtr:=filtr+' and ';
      end;
    main.Drawing.Filter:=filtr;
    main.Drawing.Filtered:=true;
    end;
    avant de mettre like j'avais mis le symbole " = " sa fonctionnais bien mais maintenant que j'ai mis like sa m'affiche le message d'erreur : "impossible d'ouvrir le filtre"

    le type de donnée dans la BDD est de type date.

    En attente,

    Merci

  10. #10
    Rédacteur/Modérateur

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

    je ne comprends pas cette manie de toujours vouloir utiliser des filtres au lieu d'utiliser des requêtes mais bon, s'il y a peu d'enregistrements et si le SGBD est optimisé pour ce genre de chose cela peut encore être justifié.
    Votre problème est que vous pensez, à tort, que tout peut se gérer comme des chaines de caractères (like) ce qui n'est pas le cas d'une date donc : oubliez l'opérateur like pour toute colonne non alpha numérique.
    Si vous voulez utiliser une partie de date ce n'est pas avec la propriété filter que vous pourrez le faire mais avec l'évènement OnFilterRecord


    exemple : // toutes les lignes du mois de juillet même si je ne recommande pas ce genre d'écriture !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
     begin
       Accept := formatDateTime('mm/yyyy',DataSet['ladate'].asDateTime)='07/2019';
     end;
    // déjà mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
     var aa,mm,jj : word;
     begin
       Decodedate(DataSet['ladate'].asDateTime,aa,mm,jj)
       Accept := (aa=2019) and (mm=7);
     end;
    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

Discussions similaires

  1. [WD 12] Problème de tri sur une table
    Par L.Lemarchand dans le forum WinDev
    Réponses: 7
    Dernier message: 26/06/2008, 01h00
  2. Probléme de Filtre sur une Table
    Par souminet dans le forum Débuter
    Réponses: 1
    Dernier message: 28/04/2008, 12h34
  3. Probléme de concurrence sur une table
    Par D_light dans le forum Administration
    Réponses: 2
    Dernier message: 03/03/2008, 14h14
  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, 16h52
  5. Problème de pointeur sur une table de hashage
    Par nicdesf dans le forum Langage
    Réponses: 3
    Dernier message: 07/09/2006, 20h23

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