8
votes

Utilisation de la déclaration comme filtrage

im Utilise ce code pour filtrer ma table:

Table.Filtered := False;
Table.Filter := '[' + Field_Search + '] LIKE ''%' + Edit_Search.Text + '%''';
Table.Filtered := True;


0 commentaires

7 Réponses :


12
votes

A TTAble.Filter n'est pas une requête SQL. comme n'est pas pris en charge (non plus dans ). Les opérateurs pris en charge sont = , <> , > , << / code>, > = , '<= , et , pas et ou`, selon la documentation

Pour un filtrage plus compliqué, utilisez le tdataseet.onfilterrecord événement: xxx


5 commentaires

Comme est pris en charge dans des filtres de jeu de données. DOCWIKI.EMBARCADERO.com/LIBRAGES/EN/DATA.DB.TDATASET. Filtre


Selon le Liste des opérateurs logiques pris en charge


Je pense que Ken a raison. L'opérateur similaire est pris en charge par certaines bases de données, telles que DBISAM (TDBisamtable), mais pas TTable.


Tu as raison. Lorsque vous utilisez le BDE, TTable ne prend pas en charge comme dans les filtres et donne le même message que l'OP rapporté. Il devait soit utiliser un autre jeu de données ou utiliser un clientTaTaset avec sa configuration actuelle.


@Bruce: Ou utilisez le code que j'ai posté dans ma réponse, qui ne nécessite pas autant de travail que de changer de jeu de données ou d'un clientDataset.



3
votes
Table.Filtered := False;
Table.Filter := Field_Search + ' LIKE ' + QuotedStr('*' + Edit_Search.Text + '*');
Table.Filtered := True;

1 commentaires

Vous devriez ajouter quelques détails à votre réponse!



-1
votes

Je recommande d'utiliser une requête SQL pour effectuer cette opération.

Exemple: P>

query1.SQL.Text:='Select * FROM table_name WHERE field like '+ QuotedStr(edit1.text+'%');
query1.Active:=true;


0 commentaires

0
votes

Le code suivant fonctionnera comme comme aussi: xxx


0 commentaires

2
votes

Vous devez utiliser ceci:

   DataModule.Table.Filtered := False;
   DataModule.Table.FilterOptions := [foCaseInsensitive];
   DataModule.Table.Filter := 'Field_Name' + ' LIKE ' + QuotedStr(Edt_SearchByCode.Text +'%');
   DataModule.Table.Filtered := True;


0 commentaires

0
votes

J'utilise principalement avec Tedit Voici le code

if (EditSerarch.Text <> '') then
begin
FDQQuery.Filtered := false;
FDQQuery.Filter:=   'Name LIKE'+ QuotedStr('%'+EditSerarch.Text+'%') +
            ' OR Company LIKE '+ QuotedStr('%'+EditSerarch.Text+'%') +
              ' OR Phone LIKE '+ QuotedStr('%'+EditSerarch.Text+'%') +
             ' OR Mobile LIKE '+ QuotedStr('%'+EditSerarch.Text+'%');
FDQQuery.Filtered:= True;
end else FDQQuery.Filtered := false;


1 commentaires

@kobik: Oups, mon erreur, commentaire supprimé. Merci]



1
votes

J'ai trouvé ce sujet à la recherche de quelque chose d'autre. J'utilise toujours l'événement Tdataset.AnfilterRecord et, dans la plupart des cas, j'utilise un événement Tedit.Onchange afin que la recherche soit "active"; xxx pré>

et avec l'événement OnFilter p>

procedure TForm1.TableFilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
  Accept := AnsiContainsStr(Table.Fields[xx].asString,Criteria);
end;


0 commentaires