J'ai table client et je veux filtrer la table sur le champ choisi par l'utilisateur tous les champs de table inclus dans le composant combobox à l'exécution si le champ/item est type de chaîne quel que soit le type d'utilisateur dans EdtSearch. texte du travail de filtre si l'utilisateur a choisi l'identifiant qui est un entier firebird champ auto_inc get exception:Filtre sur champ entier
Exception class EVariantTypeCastError with message 'Could not convert variant of type (OleStr) into type (Boolean)'.
code:
procedure Tfrm_Personnes.EdtSearchChange(Sender: TObject);
var
Pattern: string;
begin
if CbxSearchOptions.Text = 'Commence' then Pattern := QuotedStr(EdtSearch.Text + '*');
if CbxSearchOptions.Text = 'Contient' then Pattern := QuotedStr('*' + EdtSearch.Text + '*');
with TClientDataSet(dts_Tableau_Personnes.DataSet) do
begin
if EdtSearch.Text <> EmptyStr then
begin
Filter := DisplayToOriginName(dts_Tableau_Personnes, CbxField.Text)+' = ' + Pattern;
Filtered := True;
end else
Filtered := False;
end;
end;
function DisplayToOriginName(DataSource: TDataSource; DisplayName: string): string;
var
I: Integer;
begin
with TClientDataSet(DataSource.DataSet) do
for I := 0 to FieldCount - 1 do
begin
if SameStr(Fields[i].DisplayName, DisplayName) then
Result := Fields[i].FieldName;
end;
end;
quelle est la bonne façon de faire le travail de filtre sur le champ entier remercient
Connaissez-vous l'événement OnFilterRecord? Cela vous donnera plus de contrôle que la chaîne de filtre. –
Uwe Raabe merci je vais essayer je recherche avant de demander ici, mais aucun point à l'événement OnFilterRecord une solution a dit que je devrais ajouter champ calculé asString et le filtrage avec elle la solution ne m'a pas convaincu .... –
Êtes-vous aussi sachant que vous ne pouvez pas utiliser les caractères génériques 'LIKE' avec des champs numériques? (Essayer de filtrer sur un nombre 'LIKE 1 *' n'aurait aucun sens, mais ce n'est pas non plus un SQL valide ou une condition de filtre.) –