Cześć,
Mam prośbę o pomoc, pisze program na zaliczenie który operuje na bazie danych (plikowej - dBase), baza jest prosta, składa się z kolumn (Imie, Nazwisko, Pesel). Do programu chcę zaimplementować wyszukiwarkę, żeby szukała rekordów w DBGrid, i wyświetlała tam te które tylko pasują. Czy mógłbym prosić o pomoc? Dzięki
właściwość FILTER komponentu table :>
mam coś takiego:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
var
wpisane: string;
szukane: string;
begin
wpisane := Form1.Edit1.Text;
if wpisane <> then szukane := 'IMIE =
' + wpisane + `';
if szukane <> '' then
begin
myDbf.Filter := szukane;
myDbf.Filtered := True;
end;
end;
działa ok, ale:
- wpisując jakies imię z polskimi znakami - nie wyświetla nic
- jeżeli wpiszę Waldemar, potem skasuję to jak zrobić żeby wróciło do starej wersji tabeli
ensim napisał(a)
- wpisując jakies imię z polskimi znakami - nie wyświetla nic
najprawdopodobniej kodowanie się nie zgadza (tabele w innym niż WIN1250)
- jeżeli wpiszę Waldemar, potem skasuję to jak zrobić żeby wróciło do starej wersji tabeli
myDbf.Filtered := False;
Misiekd, a w jaki sposób mogę sprawdzić w jakim kodowaniu są tabele, ew. jak przekonwertować na CP1250 ?,
Z wyszukiwaniem sobie poradziłem, nie rozumiem jeszcze w jaki sposób zrobić PartialSearch. Zebym jak wpiszę 'demar' żeby znalazło Waldemara, Odemara
zobacz '%demar%'
Niestety ale :
wpisane := '%'+Form1.Edit1.Text+'%';
nie pomaga, nie wyświetla żadnego rekordu. W czym może być problem?
brak koncepcji? czyli wychodzi na to że nie da się wyszukiwać w bazie DBF po części kolumny?
nie mam pojęcia, już próbowałem w różnoraki sposób, czy ma ktoś koncepcję w jaki sposób zrobić wyszukiwanie po cześci pola ?
Witam
Ja co prawda pisze w Lazarusie, ale w Delphi powinno być tak samo. U mnie działa w taki sposób:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
var
wpisane: string;
szukane: string;
begin
wpisane := Form1.Edit1.Text;
if wpisane <> '' then szukane := 'IMIE = ''*' + wpisane + '*''';
if szukane <> '' then
begin
myDbf.Filter := szukane;
myDbf.Filtered := True;
end;
end;
Pozdrawiam
Paweł Dmitruk
Dzięki wielkie Paweł, ja też piszę w Lazarusie ;-)
Kod który mi podałeś rozwiązuje temat połowicznie, ale już i tak rewelacja ;-)
jeżeli jest 'IMIE = *' + wpisane + '*
'; to wpisujac 'ukasz' zamiast Łukasz, nie robi nic, wpisując 'Łukasz' znikają wszystkie Łukasze, zostają pozostałe rekordy
natomiast 'IMIE = + wpisane + '*
; -> wpisując 'Łuk' pokazuje wszystkich Łukaszów
czyli szuka dobrze to co jest po wpisanym, a jak jest * przed, to juz jest problem
W dalszym ciągu brak pomysłu, dlaczego * przed zapytaniem powoduje że znikają rekordy?
wznawiam temat ;) a raczej posta powyżej...
Witam
Kiedyś pisałem aplikację i miałem podobny problem jak używałem KeyPress dla edita. Zrobiłem to przez KeyPress dla DBGrig (nie musiałem edytować rekordów) - problem nie występował również w przypadku gdy wyszukiwał po wciśnięciu buttona
procedure TForm1.tabelaKeyPress(Sender: TObject; var Key: char);
var
filtr: String;
begin
if ord(Key)>31 then
begin
if Key='''' then
Key:='"';
tabela.DataSource.DataSet.Refresh;
szukaj.Text:=szukaj.text+Key;
filtr:='nazwa_artykulu like ''*'+szukaj.text+'*'' or indeks_katalogowy like ''*'+szukaj.text+'*''';
tabela.DataSource.DataSet.Filter:=filtr;
tabela.DataSource.DataSet.Filtered:=True;
end;
end;
Pozdrawiam
Paweł Dmitruk
Spróbowałem, dać Edit2 i Button i dla Button dać akcję onClick z kodem:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
var
wpisane: string;
szukane: string;
begin
wpisane := Form1.Edit1.Text;
if wpisane <> then szukane := 'IMIE =
' + wpisane + '+ ' OR ' + 'NAZWISKO =
+ wpisane + '+ ' OR ' + 'PSEUDONIM =
+ wpisane + '+ ' OR ' + 'PESEL =
+ wpisane + '+ ' OR ' + 'ADRES =
+ wpisane + '+ ' OR ' + 'TELEFON =
+ wpisane + '+ ' OR ' + 'POJAZD =
+ wpisane + '+ ' OR ' + 'KONTAKTY =
+ wpisane + '+ ' OR ' + 'UWAGI =
+ wpisane + '`;
if szukane <> '' then
begin
myDbf.Filter := szukane;
myDbf.Filtered := True;
end;
if wpisane = '' then myDbf.Filtered := False;
end;
ale nie pomogło, wpisanie 'ukasz' nie zmienia nic, a jak już wpiszę 'Łukasz' to znikają wszystkie Łukasze :-/
Jeżeli możesz podesłać dbf-a to zobaczyłbym jak to wygląda u mnie. oczywiście wszystkie kolumny oprócz IMIE wyrzuć
Paweł a mógłbyś podać maila?
q_sloncu(at)wp.pl
wysłane ;)
orłem nie jestem ale u mnie super zadzialalo to:
procedure TForm1.IBTable1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
if Edit1.Text<>'' then
begin
if pos(edit1.text,ibtable1.fieldvalues['NAZWA'])>0 then Accept:=true
else Accept:=false;
end;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
IBTable1.Filtered:=False;
IBTable1.Filtered:=True;
end;
A spróbuj za pomocą tego swojego kodu wyszukać z bazy wpisane wcześniej polskie nazwisko np. Żywiecki -> lipa nic nie wyszuka filtr nie przyjmuje zaczynających się na Ż czy Ź i tylko tych dwóch liter... pisałem o tym już na forum ale nikt nie może rozwiązać problemu....
Kod z Waszego postu tez nie filtruje wyrażeń na Ż i Ź dlaczego ????
co jest nie tak????