[Delphi] Zapytanie SQL - szukanie w bazie

0

Cześć!
W programie za pomocą SQL'a szukam firm o określonym regonie, nipie itd.

DataModule1.quPodmiotSzukaj.Close;
 DataModule1.quPodmiotSzukaj.SQL.Clear;
 DataModule1.quPodmiotSzukaj.SQL.Add(Format('SELECT * FROM Podmioty WHERE REGON = ''%s''',[edREGON.Text]));
 DataModule1.quPodmiotSzukaj.Open;

Mam dwa problemy;

  1. Jak zrobić aby szukanie było nie tylko po całym regonie lecz również po jego części np. 456 a nie 123456789
  2. Jak zrobić zapytanie aby jednocześnie szukało z warunkiem: znajdź firmę o pdanym regonie i nipie

Pozdr.
Dzięki za wszelkie uwagi!

0

Na 2 pytanie sam odpowaidam ale z pierwszym jestem zielony.
DataModule1.quPodmiotSzukaj.SQL.Add(Format('SELECT * FROM Podmioty WHERE REGON = ''%s'' AND NIP = %s',[edREGON.Text, edNIP.Text]));

Pomóżcie!!

0
with DataModule1.quPodmiotSzukaj do
begin
  Close;
  SQL.Clear;
  SQL.Add('SELECT * FROM Podmioty WHERE REGON LIKE ''%' + edREGON.Text + '%''');
  Open;
end;

zamiast operatora "=" trzeba uzyc like i dodatkowo dodac "%" na poczatku lub koncu w zaleznosci czy region ma sie zaczynac od podanego ciagu (% wstawiamy na koncu) czy ma sie konczyc podanym ciagiem (% na poczatku). Jezeli wstawimy % na poczatku i na koncu to uzuskamy warunek ze region ma zawierac podany ciag.

Pozdrawiam
Gothmog

0

Dzięki i oto mi chodziło :)

Ale pojawił się kolejny problem nie każda pozycja regon i nip dla danej firmy jest wpisana, czasami jest tylko regon czasami tylko nip.
Problem jest w tym że to zapytanie szuka tylko po rekordach w których jest wpisany regon i nip. Jak zrobić aby szukał po wszystkich.

DataModule1.quPodmiotSzukaj.SQL.Add('SELECT * FROM Podmioty WHERE REGON LIKE ''%' + edREGON.Text + '%'' AND NIP LIKE ''%' + edNIP.Text + '%''');

Pozdr. ;)

0

SELECT * FROM Podmioty WHERE (REGON LIKE %' + edREGON.Text + '% OR REGON IS NULL) AND (NIP LIKE %' + edNIP.Text + '% OR NIP IS NULL)'

ewentualnie możesz pokombinować z join left

0
ŁF napisał(a)

SELECT * FROM Podmioty WHERE (REGON LIKE %' + edREGON.Text + '% OR REGON IS NULL) AND (NIP LIKE %' + edNIP.Text + '% OR NIP IS NULL)'

Tylko że wtym przypadku jeżeli podam część regonu i nipu to pojawią się te rekordy gdzie:

  1. regon i nip spełnia moje zapytania
  2. regon spełnia a nipu może nie być
  3. regonu może nie być a nip spełnia moje warunki

a powinno sie pojawić tylko to z 1 punktu.

Może jeszcze jakieś inne rady ;)

0

na innym forum za proponowali coś takiego

DataModule1.quPodmiotSzukaj.SQL.Add(Format('SELECT * FROM Podmioty WHERE COALESCE(REGON,'''') LIKE ''%%%s%%'' AND COALESCE(NIP,'''') LIKE ''%%%s%%''',[edREGON.Text, edNIP.Text]));

Tylko że pojawia się błąd: Capability not supported

Pomóżcie ;)

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