im Utilise ce code pour filtrer ma table:
Table.Filtered := False; Table.Filter := '[' + Field_Search + '] LIKE ''%' + Edit_Search.Text + '%'''; Table.Filtered := True;
7 Réponses :
A Pour un filtrage plus compliqué, utilisez le tdataseet.onfilterrecord événement: p> TTAble.Filter code> n'est pas une requête SQL.
comme code> n'est pas pris en charge (non plus
dans code>). Les opérateurs pris en charge sont
= code>,
<> code>,
> code>,
<< / code>,
> = code> , '<=
, code> et
, code> pas
et code> ou`, selon la documentation
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.
Table.Filtered := False; Table.Filter := Field_Search + ' LIKE ' + QuotedStr('*' + Edit_Search.Text + '*'); Table.Filtered := True;
Vous devriez ajouter quelques détails à votre réponse!
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;
Le code suivant fonctionnera comme
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;
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;
@kobik: Oups, mon erreur, commentaire supprimé. Merci]
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"; et avec l'événement OnFilter p> procedure TForm1.TableFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept := AnsiContainsStr(Table.Fields[xx].asString,Criteria);
end;