Delphi - TTable - filter
Chcel by som nastaviť v TTable takýto filter:
1. "case sensitive"
2. možnosť zadania aj textu zo stredu položky
3. kontrola všetkých položiek
Je takáto možnosť? Ja mám teraz nastavený takýto a ďalej sa neviem pohnúť:
1. možnosť zadania len od začiatku položky
2. kontrola všetkých položiek
Tu je "zdroják" filtra:
procedure TCllientsForm.edSearchChange(Sender: TObject);
var
s: String;
begin
Table.Filtered := False;
s := edSearch.Text + '*';
if s <> '' then
begin
Table.Filter := '([0] = ' + QuotedStr(s) +
') or ([1] = ' + QuotedStr(s) +
') or ([2] = ' + QuotedStr(s) +
') or ([3] = ' + QuotedStr(s) +
') or ([4] = ' + QuotedStr(s) +
') or ([5] = ' + QuotedStr(s) +
') or ([6] = ' + QuotedStr(s) + ')';
Table.Filtered := True;
end;
end;
Na zadani filtru podle zacatku obsahu polozky by mela slouzit property FilterOptions:
TFilterOption = (foCaseInsensitive, foNoPartialCompare);
Takze pokud nic nevyplnis, nemel by byt filtr zavisly na velikosti pismen a mel by automaticky brat (i bez hvezdicky) zacatek retezce
Bez hviezdičky to berie iba položky s obsahom, ktorý sa zhoduje so zadaným textom. Vyskúšam čo píšete.
Nepozná TTable.FilterOption.
Edit: Trošku som sa s tým pohral a zistil som, že to je:
TTable.FilterOptions
Dobre mám "case sensitive", ale stále to nehľadá uprostred položky, iba od začiatku. Čo teraz? V helpe som nič na toto nenašiel. Je teda možnosť nadefinovať si vlastnú metódu na porovnávanie obsahu?
Na toto sa pouzivaju standartne "zoliky"
? - nahradny znak
* - vsetko
Ked chces najst nieco v strede napriklad '*jan*' tak najde aj 'janko' aj 'vojanko' aj 'novakjan' atd
pohraj sa s tymi zolikmi a uvidis...
este je tam volba na [foNoPartialCompare] - skus aj to...
Ale ja tam chcem partial. *jan* som skúšal. Inak by som sa to nepýtal. Hviezvička funguje ako v DOSe, čiže iba na konci. Skús.
Neviem o aku tabulku ide , /databazovy system/ ...
Ani % nefunguje?
Ak nejde priamo cez filter da sa to urobit aj cez udalost Table1
table1filterrecord(Dataset:Tdataset;Var Accept:Boolean);
begin
//Napriklad aj takto , ine si urcite domyslis...:)
accept:=pos('JAN',table1.fieldbyname ('meno').asstring)>0;
end;
Muzes si to resit sam v udalosti OnFilterRecord (aspon tak se to tusim jmenuje)
Přesně tak. Zde nabízím (moji vlastní) rutinu, na porovnání řetězce s žolíky:
Uvnitře je použita tato funkce (možno jí nacpat dovnitř).
Nezkousel jsi pouzit funkci MatchesMask() z unity Masks ?
To moje je podstatně rychlejší.
Mas pravdu, je to asi 4x rychlejsi. Na 100000 porovnani tva pulsekunda oproti 2s funkce MatchesMasks()
Já to právě třeba používám v OnFiltered. Mám ve vyhledávacích oknech (třeba adresářů) takovou funkci, že píšeš do políčka a ono to vyhledá text ať je v kterémkoliv sloupečku a kdekoliv. Filtruje to současně za psaní. Třeba víš kus jména firmy, ulici a nevíš přesně jak to v tom adresáři je. Pak se musí tato funkce použít v OnFiltered na všechny sloupce tabulky krát počet řádků. Tam je pak to pak každá instrukce navíc znát (aby to při pasní nezadrhávalo a plynule filtrovalo). Samozřejmě, když to použiješ v programu "jen občas", tak je to putna, jak je to rychlé.
//Edit: BTW tu funkci jsem dělal v době kamenné Delphi, kdy tam ještě nebyla od přírody.
Áno, áno, presne to robím aj ja.
Edit: Tú procedúru teda len zaradím k udalosti OnFilterRecord?
Nechceš poslat někam celý program s tou tabulkou, jak to řeším já?
Ja žew som ťa nahneval som si myslel v prvej chvíli. Môžeš a pozriem saa naň.. Ďakujem. Myslím, že to asi odfajknem teda.
Proč bych se měl hněvat?
Zde máš inspiraci: HF.zip
Veľmi pekne ďakujem.
Tento havo vyzerá zo všetkých najlepšie navrhujem ponechať. A keď nie, tak mám lepší nápad: Vložiť do PSPadu ako pomocníka (niečo ako Spinka v Office) A to som teraz myslel vážne. Ten havo by sa pekne hodil do PSPadu.
Nechni ani domejšlet, co to má za vobláček na vocáskem...
Aspoň vieme, že je načase vyvetrať.
Škoda, že niečo takéto sa nedá nájsť v resource. To by bolo dobré. Spomenul som si, ako raz dávali v telke dokument, kde ukazovali chlapíkov, ktorí nerobili nič iné, len rozoberali čipy a hľadali na nich kresby. V čipe kalkulačky bol nakreslený nejaký mimozemšťan a podobne.
Kdybys viděl moje komentáře k assemblerským programům pro sálové počítače (tam je třeba komentovat skoro každou instrukci, nebo se v tom nikdo za měsíc už nevyzná - třeba kompilátor Cobolu měl cca 80 000 řádek)... Když jsem odcházel na vlastní nohu, tak při předávce se místo kontroly všichni nezřízeně chechtali...
Aspoň je človeku pri tom veselo, keď niečo programuje. Kamoš mi dal zdroják na dokončenie v Delphi. Až po čase som si všimol, že tam popisoval výpočet súradníc TImage a na konci toho komentáru napísal: prije*aná matematika. Skoro som pustil od smiechu. Bolo to samozrejme bez hviezdičky.
Kdybys videl moje promenne radsi nekomentovat.