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 :

filtrer une table


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 56
    Points : 32
    Points
    32
    Par défaut filtrer une table
    bonjour
    j'ai utilisé ce code pour filtrer ma table au fur et à mesure que tapes sur l'edit sur le code patient qui est un entier, mais ca n'a pas marché
    voila le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Adotable1.Filtered:=false;
    if edit1.Text ='' then exit;
    AdoTable1.Filter := 'inttostr(Code_Patient) LIKE ('+''''+edit1.Text+'%'+''''+')';
    AdoTable1.filtered := True;
    j'ai utilisé ceci aussi mais c'est kifkif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AdoTable1.filter := inttostr(AdoTable1['code_Patient'].Asinteger) + '=' + '''' + Edit1.Text + '%''';
    any help please

  2. #2
    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 et bienvenue
    Citation Envoyé par nn2009
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AdoTable1.Filter := 'inttostr(Code_Patient) LIKE ('+''''+edit1.Text+'%'+''''+')';
    IntToStr(Code_Patient) ?? Là il te faut un nom de champ.

    Essaye comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AdoTable1.Filter := 'CODE_PATIENT LIKE ' + QuotedStr(Edit1.Text + '%');
    Sinon personnellement je préfère en général passer par l'évènement OnFilterRecord.

    @+ Claudius

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 56
    Points : 32
    Points
    32
    Par défaut
    Merci pour ton aide Cl@udius mais ça marche pas aussi avec QuotedStr j'ai pris ton conseil sur OnfilterRecord ça a marcher pour un seul filtre mais es ce que je peut faire plusieurs filtres avec l'événement OnfilterRecord C.à.d. filtrer ma table selon un entier ou bien selon un string...
    j'ai essayé ceci ca à foiré
    Accept :=DataSet['Code_Patient']=strtoint(Edit1.Text);
    Accept :=dataset['nom_Patient']=edit2.Text;
    ou le code_patient est un entier et nom_patient est un string
    merci

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    salut;

    Essaye ceci :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sql := 'CODE_PATIENT LIKE  "' + Edit1.Text + '%"';
     
    ADOTable1.Filtered:=true;
    ADOTable1.Filter:=sql;
    et n'oubliez pas de declarer sql comme un string;

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 56
    Points : 32
    Points
    32
    Par défaut filter une table
    Merci ing1312
    mais ça marche pas car le code patient est un entier et edit.text est un string donc comparaison de type incompatible !
    j'ai même essyé ceci
    sql := 'CODE_PATIENT LIKE "' + strtoint(Edit1.Text) + '%"';
    mais sans succées
    je penses qu'il n y a pas une méthode pour filtrer la même table une fois sur un string et une autre fois sur un entier ,
    merci pour votre aide

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 691
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    Si le nombre de digits est fixe, tu pourrais imaginer quelque chose comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Const
      NbDigits = 10; //Exemple
     
    var
      MinLimit :string;
      MaxLimit :string;
     
    MinLimit := Edit1.Text +StringOfChar('0', NbDigits -Length(Edit1.Text));
    MaxLimit := Edit1.Text +StringOfChar('9', NbDigits -Length(Edit1.Text));
     
    sql := Format('CODE_PATIENT >= %s AND CODE_PATIENT <= %s', [MinLimit, MaxLimit]);

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 56
    Points : 32
    Points
    32
    Par défaut filter une table
    Merci Adnotor mais ça marche pas

  8. #8
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    La logique voudrait que les "Code_Patient" soit des strings.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 56
    Points : 32
    Points
    32
    Par défaut filtrer table
    Merci philnext
    je sais se que tu veux dire mais je cherche une méthode pour filtrer ma table sur un entier , ça fait plus 2 mois que je cherche cette sol mais personne dans plusieurs forum de Programmation n'a pu me donner la bonne répense.

    y a pas une formule pour filtrer une table sur entier ! ?

  10. #10
    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

    Au sujet de tes codes patient, comment sont-ils formatés ?
    Plus précisement, ont-ils une longueur fixe ? Exemple: 1000, 1001, 2010, 3099, etc.
    Car dans ce cas la solution proposée par Andnotor peut fonctionner.

    Si ils n'ont pas de longueur fixe: (1, 23, 1234, 566657, etc), je te suggère d'ajouter un champ supplémentaire à ta requête où tu fais un cast du code numérique vers un CHAR. Ainsi tu pourras appliquer un filtre avec un LIKE.

    Mais le plus simple à mon goût est de passer par OnFilterRecord.
    Ce qui donne quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Query1FilterRecord(DataSet: TDataSet;
      var Accept: Boolean);
    var
      CodeStr: string[8]; // par exemple
    begin
      CodeStr := Format('%.8d', [DataSet.FieldByName('CODE_PATIENT').AsString]);
      Accept := Pos(Edit1.Text, CodeStr) = 1;
    end;
    @+ Claudius

  11. #11
    Nouveau membre du Club
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    Essayez ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sql := 'CODE_PATIENT LIKE  ' + Edit1.Text ;
     
    ADOTable1.Filtered:=true;
    ADOTable1.Filter:=sql;
    j'ai essayé ce code et il marche bien ;

  12. #12
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Query1FilterRecord(DataSet: TDataSet;
      var Accept: Boolean);
    var
      CodeStr: string[8]; // par exemple
    begin
      CodeStr := DataSet.FieldByName('CODE_PATIENT').AsString;
      Accept := Pos(Edit1.Text, CodeStr) >0;
    end;
    @+ Claudius
    désoler Cl@udius
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  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
    Citation Envoyé par edam Voir le message
    désoler Cl@udius
    Salut Edam.
    Ne soit pas désolé !

    Si je ne me trompe pas, avec un Pos renvoyant 0 cela correspond à un LIKE '%12%', alors qu'avec un Pos renvoyant 1 cela correspond à un LIKE '12%'. Avec 12 saisi dans le TEdit, bien-sûr.

    [Edit]
    Par contre il faut définir CodeStr en string et non string[8].
    @+

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 56
    Points : 32
    Points
    32
    Par défaut filtrer table sur entier
    Bonjour tout le monde
    je vous remercie pour vos efforts et de m'avoir aider, me donner des conseils, j'ai pris le conseil de philnext et j'ai changé le type de mon champ en carctère au lieu de entier, et le filtre ça marche dieu merci
    j'aurai aimé trouvé la bonne sol (filtrer la table sur un entier).
    merci à tous

  15. #15
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par nn2009 Voir le message
    j'ai pris le conseil de philnext et j'ai changé le type de mon champ en carctère au lieu de entier, et le filtre ça marche dieu merci
    c'est bien, et si tu veux trie ta table selon ce champ
    Citation Envoyé par nn2009 Voir le message
    j'aurai aimé trouvé la bonne sol (filtrer la table sur un entier).
    merci à tous
    et la solution de claudios
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Bonjours je relance le sujet car j'ai un petit problème beaucoup plus simple et plus basique que celle-ci je pense

    j'aimerais faire un filtre sur une colonne (qui s'appelle 'Description') et qui recherche par exemple le contenu d'un Edit1.
    j'ai trouver ce code en cherchant sur le net:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Table1.filter:='Description='+''''+Edit1.Text+'*''';
    // Description='Ben*'
    exemple si je rentre dans l'Edit1: Ben , le filtre s'effectuera sur tout ce qui commence par Ben.

    J'aimerais pouvoir appliquer un filtre qui ne commence pas par l'Edit1 mais qui contient l'Edit1.

    j'ai pensé a ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Table1.filter:='Description='+'''*'+Edit1.Text+'*''';
    // Description='*Ben*'
    mais aucun filtre ne s'effectue. auriez vous des idées?

    merci d'avance pour les réponses et désolé d'avoir déterré ce sujet.

    Bonne journée Jean.

  17. #17
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384

  18. #18
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    salut; voila un exemple ou je filtre une table sur le N° du malade ou patient "nmal est un entier et ca marche très bien [d7+access]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    begin
     
    DM1.tsuivibact.Filtered:=false;
    DM1.tsuivibact.Filter:='nmal = '+ inttostr(dm1.qafichmaladenmal.Value);
    DM1.tsuivibact.Filtered:=true;
    end;
    bonne utilisation

    Red

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Tout d'abord merci a vous pour vos réponses si rapides.

    Citation Envoyé par evarisnea
    merci pour le lien, j'ai pu voir que la fonction n'était pas possible, et que pour arriver a ce que je voulais il me fallait passer par du SQL, et dans ce cas j'ai plusieurs questions (et oui je suis débutant autodidacte)

    J'utilise 6 tables paradox distinctes, est ce que si je passe en SQL je pourrais les lires quand même? si non peut-on les convertir de manière a conserver les données déjà inscrite?

    puis-je utiliser uniquement le code SQL pour faire ma "recherche" et laisser le reste tel quel?

    bien évidement je ne cherche pas a ce qu'on me donne la solution servie sur un plateau... mais juste des piste comme evarisnea l'a fait

    voici la solution du lien:

    Citation Envoyé par valoji Voir le message
    J'ai fais différemment, il n'est pas possible de faire un équivalent de like '%a%'.
    J'ai donc fait un requete avec mes LIKE et ensuite j'ai filtré avec l'operateur monchamp = querychamp or etc...

    Voici un exemple de mon code :
    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
    46
    47
    48
    49
    50
    51
     
    procedure TFic_RechOrga.BitBtn_RechOrgClick(Sender: TObject);
    var
    Chaine : String;
    begin
    try
      Chaine := '';
      Query_Commun.sql.clear;
      Query_Commun.Close;
      Query_Commun.UnPrepare;
      Query_Commun.SQL.Clear;
      Query_Commun.SQL.Add('SELECT orgnumser                       ');
      Query_Commun.SQL.Add('  FROM Noorg                               ');
      //Le champ sigle est différent de vide et le champ raison sociale est vide
      if (Trim(Edit_RechSigle.Text) <> '')and (Trim(Edit_RaisSoc.Text) = '') then
      begin
            Query_Commun.SQL.Add('  Where orgsig like "%'  + Edit_RechSigle.Text +'%"');
      end;
      //Le champ raison sociale est différent de vide et le champ sigle est vide
      if (Trim(Edit_RaisSoc.Text) <> '') and (Trim(Edit_RechSigle.Text) = '') then
        begin
            Query_Commun.SQL.Add('  Where orgraisoc like "%'  + Edit_RaisSoc.Text +'%"');
        end;
      // Les deux champs sont différents de vide
      if (Trim(Edit_RaisSoc.Text) <> '') and (Trim(Edit_RechSigle.Text) <> '') then
      begin
            Query_Commun.SQL.Add('  Where orgsig like "%'  + Edit_RechSigle.Text +'%"');
            Query_Commun.SQL.Add('  and orgraisoc like "%'  + Edit_RaisSoc.Text +'%"');
      end;
            Query_Commun.Prepare;
            Query_Commun.Open;
      if (Query_Commun.RecordCount > 0) then
      begin
            Chaine := 'Orgnumser =';
            While not Query_Commun.Eof do
            begin
               Chaine := Chaine + Query_Commun.fieldbyname('orgnumser').asstring + ' or orgnumser =';
               Query_Commun.Next;
            end;
               Chaine := chaine + '0';
               Fiche_Organisme.Table.Filter := Chaine;
               Fiche_Organisme.Table.Filtered := True;
      end;
    except
      on E:Exception do
         begin
              AfficheSedIncident('RORG01 -> ', E.Message, Left+(width div 2), top+(height div 2));
         end;
      end;
      Close;
    end;
    Valoji
    si ca peut être la solution, est ce qu'il serait possible d'avoir quelques explication histoire que je comprenne ce code (la c'est encore du chinois pour moi)

    désolé de faire un poste un peut brouillon ou j'y ai un peut jeter ce qui me passé par la tête Merci d'avance

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

Discussions similaires

  1. filtrer une table excel avant de remplir un combobox
    Par alexsolex dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 21/10/2007, 19h56
  2. filtrer une table par programmation
    Par programeur dans le forum Delphi
    Réponses: 2
    Dernier message: 11/01/2007, 12h38
  3. Réponses: 5
    Dernier message: 06/06/2006, 14h12
  4. [C#] Filtrer une table
    Par diaboloche dans le forum ASP.NET
    Réponses: 8
    Dernier message: 05/12/2005, 15h17
  5. comment filtrer une table avec deux criteres càd 2 colonnes
    Par athmane2dz dans le forum Bases de données
    Réponses: 7
    Dernier message: 28/07/2004, 15h25

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