Problem z filtrowaniem pola bazy MSAccess

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.

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

lub

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

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

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

a wynikiem tego kodu

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

0

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

with adoquery1, sql do
begin
  Clear;
  Close;
  Add('select * from zabytki where nr_inwentarza like :szukaj');
  Parameters.ParamByName('szukaj').Value:='%' + edit1.Text + '%';
  Open;
end;
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.

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.

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