Problem z filtrowaniem pola bazy MSAccess

Problem z filtrowaniem pola bazy MSAccess
RO
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 5 lat
  • Postów:7
0

Delphi. 10,3 . Baza Access połączona z komponentem adoquery.
Pole , które chcę filtrować to pole tekstowe zawierające takie znaki 'Zg/2019/123a' rosnąco do 'Zg/2019/998a'
poniższe kody , które próbowałem zastosować pokazują błąd.

Kopiuj
adoquery1.Active:=false;
adoquery1.SQL.Text:='Select * FROM zabytki WHERE nr_inwentarza  like '+ QuotedStr('%'+edit1.text+ '%' );
adoquery1.Active:=true;

lub

Kopiuj
adotable1.Filter :=  'nr_inwentarza LIKE ' + QuotedStr('%' + Edit1.Text + '%');
adotable1.Filtered := TRUE;

poniższy kod nie pokazuje błędu lecz wynikiem filtrowania jest pusta tabela

Kopiuj
adoquery1.Active:=false;
adoquery1.SQL.Text:='Select * FROM zabytki WHERE "nr_inwentarza"  like '+ QuotedStr('%'+edit1.text+ '%' );
adoquery1.Active:=true;

a wynikiem tego kodu

Kopiuj
adoquery1.Active:=false;
adoquery1.SQL.Text:='Select * FROM zabytki WHERE [nr_inwentarza]  like '+ QuotedStr('%'+edit1.text+ '%' );
adoquery1.Active:=true;

jest komunikat o brakujących parametrach pomimo wyłączenia Kontroli parametrów w ADoquery

Inne pola zawierające np sam text same liczby lub samą datę filtrowane lub wyszukiwane są bez problemów.

Ktoś ma jakieś pomysły jak to rozwiązać?

edytowany 1x, ostatnio: flowCRANE
robertz68
  • Rejestracja:ponad 18 lat
  • Ostatnio:około godziny
  • Lokalizacja:Zielona Góra
0

piszę z pamięci ale powinno zadziałać:

Kopiuj
with adoquery1, sql do
begin
  Clear;
  Close;
  Add('select * from zabytki where nr_inwentarza like :szukaj');
  Parameters.ParamByName('szukaj').Value:='%' + edit1.Text + '%';
  Open;
end;
WL
Eee... nie, nie takie parametry Jet.Engine miał na myśli.
robertz68
@wloochacz: eee, masz rację, teraz mi się przypomniało, dowolne znaki to gwiazdka a pojedynczy znak to podkreślenie. Unikam accessa jak tylko można :)
WL
  • Rejestracja:około 21 lat
  • Ostatnio:6 dni
  • Postów:1083
0
rodom napisał(a):

Delphi. 10,3 . Baza Access połączona z komponentem adoquery.
Pole , które chcę filtrować to pole tekstowe zawierające takie znaki 'Zg/2019/123a' rosnąco do 'Zg/2019/998a'
poniższe kody , które próbowałem zastosować pokazują błąd.

Przydałby się ten błąd pokazać dokładnie, a nie jakieś fiku-miku...

/ciach/

Ktoś ma jakieś pomysły jak to rozwiązać?

Tak, mam.
Za moich czasów, kiedy fora był dla lamusów a profesjonaliści siedzieli na newsach podstawą było:
Read The Fucking Manual!

Proszę, oto manual:
https://support.office.com/en-us/article/like-operator-b2f7ef03-9085-4ffb-9829-eef18358e931

PS1.
Dla leniwych: w MS Access operatorem like jest * a nie %
A taka skucha...

PS2.
I stąd jasno wynika, że Access to takie badziewie jak SQLite, jeśli idzie o możliwości SQL i zgodność ze standardem.
Im szybciej się go pozbędziesz, tym lepiej.
Na co?
Oczywiście na MSSQL Express lub SQL LocalDB jeśli to jednostanowiskowa aplikacja.

WL
  • Rejestracja:około 21 lat
  • Ostatnio:6 dni
  • Postów:1083
0
rodom napisał(a):

Delphi. 10,3 . Baza Access połączona z komponentem adoquery.

Ktoś ma jakieś pomysły jak to rozwiązać?

Mam jeszcze inny pomysł; zamiast męczyć tego Accessa SQLem (co i tak słabo działa) użyj filtrowania po stronie klienta.
Będzie szybciej.

Oczywiście ADO musi działać z lokalnym kursorem (to jest domyślne ustawienie).

PS.
Też piszę z pamięci, ADO i Accessa dotykałem ostatnio prawie 20 lat temu.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.