Filtrowanie rekordów - mały problem

0

Witam!
Mam sobie 4 rekordy z datą 2005-01-04 i 2 rekordy z datą 2005-12-05, oczywiście to w DBGridzie. Mam na formie jeszcze Edit i button.

Wpisuję tą pierwszą datę, aby mi tylko ją pokazało czyli przefiltrowało tableę i jest ok spoko, pokazuje to co chcę. Problem się pojawia, gdy wpiszę tą drugą datę, aby mi ją pokazało i gdy kliknę na Flitruj to pokazuje jeden rekord pusty zamiast tamtych dwóch rekordów. Co jest grane? Czy trzeba tabelę jakoś odświeżać czy co?
P.S. Mam jeszcze drugi button który pokazuje mi wszystkie rekordy.
DZIĘKI Z GÓRY ZA ODPOWIEDŹ!! :)

0

Ty ziomek ja się pytam o sprawy z Delphi/Pascal, a nie PHP itp., więc nie zaśmiecaj mi tu posta :///

0

A mozesz podać wiecej danych np jaka baza jakie komponenty i jak ustawiasz filtr
ale mysle ze wykonujesz drugi filtr na juz pofiltrowanej bazie i wynik wtedy bedzie zbiór pusty

0

Na formie mam DBGrid, TDataSource, TTable, DBNavigator. W edytorze utworzyłem tabelę dBASE IV. Odczytałem ją w DBGridzie.
W samym Properties nie ustawiałem nic jeśli chodzi o filtry.
Filtr napisałem tak:

//procka do filtru - filtruje nazwiska
procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
Accept:=Table1['NAZWISKO'] = edit5.Text;
end;
</delphi> //Pokazuje wszystkie rekordy procedure TForm1.Button9Click(Sender: TObject); begin Table1.Filtered:=false; end;

//filtruje rekordy
procedure TForm1.Button6Click(Sender: TObject);
begin
table1.Filtered:=true;
end; </delphi>

Wpiszę do Edit5 nazwisko np. Kowalski to mi ładnie przefiltruje wszystkich Kowalskich, ale potem gdy kliknę aby pokazało wszystkie rekordy lub wymażę Kowalskiego i wpiszę Nowak i dam na filtrowanie to mi pokazuje jeden pusty rekord:( PROSZE POMÓŻCIE MI:(

p.s. Wcześniej zrobiłem filtrowanie w odzielnych editach poprzez Nazwisko, Imię, Miasto itd. ale filtrował mi tylko poprzez Nazwisko:( Jak zrobić kilka kryterii filtrowania? Dzięki za pomoc!

0

Jak zrobić kilka kryterii filtrowania? Dzięki za pomoc!

Przy konstrukcji wyrażenia filtrującego można stosować oparatory logiczne.
Poniżej masz przykładzik jak przefiltrować tabelę na podstawie 2 pól.

Tabela - katalog książek
Pola - Autor, Tytul, .....
edAutor - TEdit
edTytul - TEdit

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  Table1.FilterOptions := [foCaseInsensitive];
  //bez rozróżniania wielkości znaków; foNoPartialCompare - zajrzyj do Helpa
  Table1.Filtered := False;

  if edAutor.Text <> '' then s := 'Autor = ''' + edAutor.Text + '''';
  if edTytul.Text <> '' then
  begin
    if s <> '' then s := s + ' AND ';
    s := s + 'Tytul = ''' + edTytul.Text + '''';
  end;

  if s <> '' then
  begin
    Table1.Filter := s;
    Table1.Filtered := True;
  end;
end;

Jeśli użytkownik wpisze jakiś tekst w obydwu editach, wówczas filtrowanie będzie uwzględniało dwa pola: AUTOR i TYTUL.
Zwróć uwagę na operator AND.
Jeśli użytkownik wpisze tekst tylko w jednym edit-cie, wówczas filtrowanie będzie uwzględniało tylko jedno pole (AUTOR lub TYTUL).
Jeśli użytkownik nie wpisze nic, filtrowanie nie wykona się.
Wykorzystałem tutaj właściwość TTable.Filter, ale można to również obsłużyć (tylko nieco inaczej) w zdarzeniu TTable.OnFilterRecord.
Zajrzyj do Helpa, tam jest troszkę informacji na ten temat (m.in. co oznacza *).

0

Fajny kodzik, ale działa tylko jak wpisuję Autora + Tytuł to wyszuka.
Nie wyszuka gdy wpisze tylko Tytuł - pokazuje pusty rekord :(
A gdy zmarzę ten tytuł i wpiszę autora to też pokazuje pusty rekord :(
I gdy np. nic nie jest wpisane w te edity i dam na filtrowanie to wyskakują ort! rekordy (to jest OK), ale po tym jak wpiszę autora to też pokazuje pusty rekord :(

Jak to naprawić?
Jak zrobic taki zakres dla siedmiu kolumn?
I gdybym chciał ten kodzik przerobić na jednozakresowy to które linie kodu muszę usunąć, aby go nie spierniczyć?
DZIĘKUJĘ ZA WSZELKĄ POMOC!!! :)

0

Fajny kodzik, ale działa tylko jak wpisuję Autora + Tytuł to wyszuka.
Nie wyszuka gdy wpisze tylko Tytuł - pokazuje pusty rekord
A gdy zmarzę ten tytuł i wpiszę autora to też pokazuje pusty rekord
I gdy np. nic nie jest wpisane w te edity i dam na filtrowanie to wyskakują ort! rekordy (to jest OK), ale po tym jak wpiszę autora to też pokazuje pusty rekord

Dziwne !

U mnie działa dokładnie tak, jak to opisałem wcześniej. Sprawdzałem!
(Delphi 5 Ent.+Paradox+Win2000Pro)
Spróbuj, zamiast dBASE-a użyć Paradox-a. Bazy Paradox mają troszkę większe możliwości.

0

No właśnie i tu był chyba problem, bo używałem tabel dBase!
Czyli wszystkie tabele, które utworzyłem w Database Desktop musze na nowo pisać ale Paradox'em?
Tam są jakieś Paradox7 i Paradox5.0 for Windows, Paradox4 i Paradox3.5...
Które jest najlepsze?

P.s.: zostało mi jeszcze sortowanie i utworzenie zasięgów wyszukiwania rekordów, np z datami.
Na necie znalazłem dużo sortowań gdy się kliknie na Tytuł kolumny, ale nie do wszystkich kolumn to sortowanie pasowało, bo wywalało błąd.
Zasięgi poszukam sobie gdzieś. Pozdrawiam!

0

Hmm już wiem co było źle :) Miałem dodatkowo obsługę OnFilterRecord w Table1. Wymazałem stamtąd kod i działa pięknie na dBase (nie musi być widocznie Paradox). Musze teraz zrobić sobie na więcej zakresów :) Dzięki wielkie!!!

0

A jak zrobić aby tabela uaktualniała się po przyciskaniu kolejnych liter a nie po wpisaniu całej nazwy?

0

Wymyśliłem aby dodać w jakiejś formie * do edit5.Text ale nie wiem jak to zrobić aby dane te tworzyły jeden string.
procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept:=Table1['NAZWISKO'] = edit5.Text;
end;

0

Cześć.

Dołączam się do posta, bo mam podobne pytanie.

Chcę zrobić filtrowanie tabeli w czasie rzeczywistym tzn. wpisuję coś w edicie i z kazdym kolejnym wpisanym znakiem tabela jest filtrowana i wyswietla rekordy ktore zawieraja dany tekst w jednej z dwoch kolumn. Opowiada to mniej wiecej temu:
SELECT * FROM tabela WHERE NAZWA like '+edtSearcj.text+' OR OPIS like '+edtSearch.Text+';

Dodam, żę tabela jest w DBaseIV a w/w polecenie jak wpisuje do TQuery i daje:
Query.open; nie dziala :(

Może jakaś podpowiedź.

Z góry dzięki

0

A dla 4 editów potrafi ktoś zrobić filtrowanie
mnie się nie udało -> proszę o pomoc

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