[Delphi] ADOQuery + locate + wyszukanie drugiego słowa

0

Cześć, załóżmy, że mam w bazie danych imiona i nazwiska w jednym polu.
Oczywiście człowiek jest taką mądrą istotą, że czasem będzie jako pierwsze wpisywał imię, a czasem nazwisko.

Teraz jeśli mam "Jan Kowalski", to kod:

  adoQuery.Locate('name', 'jan', [loPartialKey, loCaseInsensitive]);

wyszuka mi ten rekord. Ale już:

  adoQuery.Locate('name', 'kow', [loPartialKey, loCaseInsensitive]);

nie zostanie wyszukane. Jak zmusić go, żeby przeszukiwał wszystkie słowa, a nie zaczynał od pierwszego? Da się?

0
Juhas napisał(a)

Ale już:

  adoQuery.Locate('name', 'kow', [loPartialKey, loCaseInsensitive]);

nie zostanie wyszukane. Jak zmusić go, żeby przeszukiwał wszystkie słowa, a nie zaczynał od pierwszego? Da się?

Nie da się. Ale możesz użyć do tego property Filter i na bieŻąco (Boże, widzisz takie błędy i nie grzmisz) odfiltrowywać wyniki nie spełniające zadanych kryterii ;)

Pozdrawiam

0

Problem jest taki, że muszę mieć wszystkie dane widoczne. Ale ok, jak się nie da to trudno i szkoda ;)

0

Da się ale troszkę na około. Mogłbyś stworzyć oddzielne TADOQuery, które robiłoby selecta na tej samej tabeli.

Miałoby ono postac, np taka:

DECLARE @Lancuch varchar(40)

SET @Lancuch = :Lancuch

SELECT NameID FROM dbo.MyTable WHERE Name LIKE '%' + @Lancuch + '%'

I teraz zakładając ze NameID jest indexem, robisz po nim Locate.

To czy dac w selekcie TOP 1, to juz Twoja decyzja.

:)

0

Rozwiązanie wydaje mi się głupie ale jak się nie co się lubi...
W select można dodać pole, przepisać do niego imię i nazwisko usuwając spacje i szukać po tym polu, nie sprawdzałem więc nie wiem czy zadziała.

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