Filtrowanie DBGrida za pomocą Comboboxa

0

Witam po raz pierwszy na forum :-)

Od razu przejdę do mojego problemu.
A więc mam tabelkę z 2 kolumnami, której zawartość wyświetlam na komponencie DBGrid. Komponent łączy sie z tabelą za pomocą TTable oraz DataSource.
Na formie mam 2 ComboBoxy, do których wczytywane są dane z tabeli. Do każdego Comboboxa 1 kolumna. Powtarzające się itemy są eliminowane. No i wszystko pięknie gra ale no własnie. Tutaj już nie wiem co zrobić. Jak użytkownik wybierze z jakiegoś comboboxa jakiś item, jak oprogramować to zdarzenie aby została przefiltrowana tabelka.
Aby było jaśniej to:
Do comboboxa ładują się nazwy: czerwony , zielony, niebieski. Użytkownik wybrał poprzez kliknięcie "niebieski" i w tym momencie tabelka została przefiltrowana, a w kolumnie z kolorami są tylko rekordy z napisem "niebieski". Jestem jak "tabaka w rogu" po prostu nie umiem przefiltrować tej tabelki. PROSZĘ O POMOC.

0

Tabelka.Filter oraz Tabelka.Filtered + F1

0

Zrobiłem tak:

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
  table1.Filter := 'Kolory='+Combobox1.Text;
  table1.Filtered := True;
end;

Kolory to nazwa kolumny z której ładowane są nazwy kolorów do comboboxa.
Jak np. wybiorę z comboboxa kolor niebieski to mam komunikat że pole o nazwie "niebieski" nie istnieje , no bo faktycznie nie istnieje to jest tylko nazwa rekordu.
Może jakaś kolejna podpowiedź. A może w ogóle źle robię?

0
Specifies the text of the current filter for a dataset.

Delphi syntax:

property Filter: String;

C++ syntax:

__property System::AnsiString Filter = {read=FFilterText, write=SetFilterText};

Description

Use Filter to specify a dataset filter. When filtering is applied to a dataset, only those records that meet a filter’s conditions are available to an application. Filter describes the filter condition. For example, the following filter displays only those records where the State field is 'CA' or 'MA':

State = 'CA' or State = 'MA'


Note the use of single quotes in the filter expression, rather than the double quotes normally used for strings. These are counted as SQL string delimiters rather than the string literal delimiters of C++.
:	When building a filter string programmatically, use the QuotedStr function to ease expressing the embedded spaces of the filter value:

Table1.Filter := 'State = ' + QuotedStr('M*');

To filter strings bases on partial comparisons, use an asterisk as a wildcard. For example:

State = 'M*'


When dealing with fields that have nonstandard or non-compliant names (such as those with spaces embedded in the names), enclosed the field name in square brackets.

[Species Name] = 'Gymnothorax mordax'


For a complete list of operators you can use in filter strings, see SettingTheFilterProperty.

Note:	You can set Filter at runtime to change a dataset’s filtering condition (for example, in response to user input).

widzisz czego Ci brakuje :>

0

No nie kumam [wstyd]

Misiekd wrzuciłeś mnie na głęboką wodę. To mój pierwszy kontakt z Delphi.
Jak użyłem;

Table1.Filter := 'Kolory = ' + QuotedStr('M*');

To co prawda nie ma błędu w programie, alw DBGrid całkowicie czyści rekordy (jest pusty), więc to nie to. Podejrzewam , że to jakiś banalny błąd. Ale jaki?

0

o mamo

jak podajesz filtr tak

table1.Filter := 'Kolory='+Combobox1.Text;

to jeśli w Combobox1.Text jest np. text dom to filtr wygląda tak

table1.Filter := 'Kolory=dom'

i program myśli, że ma porównać kolumnę kolory z kolumną (bo nie jest to string) dom. Żeby traktował dom jak wartość textową trzeba ją wziąć w pojedyńcze cudzysłowie, czyli albo dać `' albo QuotedStr, o czym pisze zresztą w helpie. Koniec końców powinno to wyglądać tak

table1.Filter := 'Kolory=' + GuotedStr(Combobox1.Text);
0

No tak, teraz to działa jak należy, i jak palcem pokazałeś gdzie leży problem to wydaje się proste :-D . To Delphi zaczyna mi się podobać :-) . Ale muszę się duuużo jeszcze naczytać i chyba sporo pisać takich prostych programików.
Dziękuję za pomoc i cierpliwośc Misiekd :-)
Ps. Jeszcze Was nie raz zanudzę swoimi pytaniami [green]

1 użytkowników online, w tym zalogowanych: 0, gości: 1