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 :

[FILTER TABLE] Equivalent de like '%A%'


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de valoji
    Inscrit en
    Septembre 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Septembre 2005
    Messages : 124
    Par défaut [FILTER TABLE] Equivalent de like '%A%'
    Bonjour,

    voila je fais un filtre de ma table :
    Table.filter := 'Monchamp = ''A*"'
    Ca fonctionne

    Mais si je fais cela :
    Table.filter := 'Monchamp = ''*A"ou
    Table.filter := 'Monchamp like "%A%"'
    Cela ne fonctionne pas
    Qu'est ce que je dois faire pour avoir l'équivalent de like '%A%'
    VALOJI 8)

  2. #2
    Membre confirmé Avatar de valoji
    Inscrit en
    Septembre 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Septembre 2005
    Messages : 124
    Par défaut
    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

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2002
    Messages : 245
    Par défaut
    J'ai le meme probleme que toi, mais moi j'ai pas d'autres alternatives que d'utiliser les filtres.
    Suis-je dans une impasse??

    ::

  4. #4
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Citation Envoyé par valoji
    Bonjour,

    voila je fais un filtre de ma table :
    Ca fonctionne

    Mais si je fais cela :
    Cela ne fonctionne pas
    Qu'est ce que je dois faire pour avoir l'équivalent de like '%A%'
    VALOJI 8)
    Tu peux aussi utiliser TTAble.OnFilterRecord pour filtrer
    et dedans tu mets le code que tu souhaites
    Dans l'exemple ce serait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure MaForm.TableFilterRecord( Dataset:TDataSet);
    begin
    Accept := Pos( 'A', Monchamp ) > 0;
    end
    bon courage !
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2002
    Messages : 245
    Par défaut
    Certes c'est une bonne solution, mais elle ne m'arrange pas vraiment.
    Voici mon probleme en detail:
    Je cree une forme ou l'utlisateur peut construire des filtres et les utiliser soit seuls, soit en les combinant. Donc pour chaque filtre construit, je dois sauvegarder entre-autres sa chaine de caracteres. Dans une autre forme, l'utilisateur peut selectionner les filtres a appliquer. D'ou mon impossibilite a appliquer des requetes et la complexite d'utiliser l'evenement OnFilterRecord.

    ::

  6. #6
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Je comprends

    J'utilise moi même la propriété filter, en amont de mes grilles, pour proposer à l'utilisateurs de construire lui meme ses filtres sur tout types.
    Et il y a qq années, il me semble que je suis tombé sur le même pb que toi, et du coup, dans ce cas précis je ne gere que le 'A*', et pas le '*A'.

    J'ai mis d'autres outils de filtrages plus souple, qui par contre passent cette fois ci par le OnFilterRecord.
    Rien ne t'empeche, d'implémenter ceci dans un cas général pour le FilterRecord:

    1. tu créés tes propre fonctions utilisateur 'Contenant tous les termes', 'contenant un des termes' etc...Chaque mode de recherche en interne doit être identifier (par ex. mrTousTermes, mrUnTerme...)

    2. Une fois que tu sais quelles est le mode de filtre du user, tu stockes tous ca qq part (par exe, le couple (mrTousTerme, 'ici labas') )

    3. tu traites ta listes des filtres, avec une fonction de ton cru dans tous les OnFilterRecords, en fonction du Couple (Mode de recherche, Chaine).

    Avec ceci, tu peux te permettre d'implémenter des fonctions à l'infinis car tout se passe par code, plus de bridage par formatage (filter ou SQL).

    Bon courage !
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2002
    Messages : 245
    Par défaut
    Citation Envoyé par TicTacToe
    Je comprends

    J'utilise moi même la propriété filter, en amont de mes grilles, pour proposer à l'utilisateurs de construire lui meme ses filtres sur tout types.
    Et il y a qq années, il me semble que je suis tombé sur le même pb que toi, et du coup, dans ce cas précis je ne gere que le 'A*', et pas le '*A'.

    J'ai mis d'autres outils de filtrages plus souple, qui par contre passent cette fois ci par le OnFilterRecord.
    Rien ne t'empeche, d'implémenter ceci dans un cas général pour le FilterRecord:

    1. tu créés tes propre fonctions utilisateur 'Contenant tous les termes', 'contenant un des termes' etc...Chaque mode de recherche en interne doit être identifier (par ex. mrTousTermes, mrUnTerme...)

    2. Une fois que tu sais quelles est le mode de filtre du user, tu stockes tous ca qq part (par exe, le couple (mrTousTerme, 'ici labas') )

    3. tu traites ta listes des filtres, avec une fonction de ton cru dans tous les OnFilterRecords, en fonction du Couple (Mode de recherche, Chaine).

    Avec ceci, tu peux te permettre d'implémenter des fonctions à l'infinis car tout se passe par code, plus de bridage par formatage (filter ou SQL).

    Bon courage !
    Merci, je crois que c'est la seule option qui me reste.
    Neanmoins, je suis entrain de negocier avec l'administrateur de Base de donnees pour changer le structure de quelques tables. Si c'est faisable, ca simplifierai ma tache.

    Merci encore.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Par défaut ça m'intéresse
    Bonjour,
    Je reprend cette discussion car je suis sur le même problème.
    Ma question subsidiaire est comment vous traitez une chaîne avec des contient(a,b), des ET, des OU, des NON et des parenthèses imbriquées en Delphi.
    J'ai essayé d'écrire une fonction en PascalScript et de la lancer en Delphi dans le OnFilterRecord sans succès mais c'est une usine à gaz mais il doit y avoir plus simple ?
    Merci de votre aide.

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

Discussions similaires

  1. Equivalent de LIKE dans une étape DATA
    Par SB_Pro dans le forum SAS Base
    Réponses: 2
    Dernier message: 29/06/2015, 14h53
  2. Equivalent de LIKE dans une étape DATA
    Par Oreo_ dans le forum SAS Base
    Réponses: 2
    Dernier message: 30/04/2013, 12h09
  3. Equivalent LIKE dans filter d'un TTable
    Par futneguet dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/07/2010, 18h53
  4. Equivalent de Like en XML
    Par Identifiant dans le forum PL/SQL
    Réponses: 1
    Dernier message: 22/12/2009, 12h34
  5. Equivalent de LIKE en JAVA
    Par Archange21 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 29/04/2008, 21h55

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