DBGrid, wyszukiwanie pozycji

0

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

0

właściwość FILTER komponentu table :>

0

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:

  1. wpisując jakies imię z polskimi znakami - nie wyświetla nic
  2. jeżeli wpiszę Waldemar, potem skasuję to jak zrobić żeby wróciło do starej wersji tabeli
0
ensim napisał(a)
  1. wpisując jakies imię z polskimi znakami - nie wyświetla nic
    najprawdopodobniej kodowanie się nie zgadza (tabele w innym niż WIN1250)
  1. jeżeli wpiszę Waldemar, potem skasuję to jak zrobić żeby wróciło do starej wersji tabeli
    myDbf.Filtered := False;
0

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

0

zobacz '%demar%'

0

Niestety ale :

wpisane := '%'+Form1.Edit1.Text+'%';

nie pomaga, nie wyświetla żadnego rekordu. W czym może być problem?

0

brak koncepcji? czyli wychodzi na to że nie da się wyszukiwać w bazie DBF po części kolumny?

0

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 ?

0

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

0

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

0

W dalszym ciągu brak pomysłu, dlaczego * przed zapytaniem powoduje że znikają rekordy?

0

wznawiam temat ;) a raczej posta powyżej...

0

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

0

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 :-/

0

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ć

0

Paweł a mógłbyś podać maila?

0

q_sloncu(at)wp.pl

0

wysłane ;)

0

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;

0

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????

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