[PostgreSQL]

0

Witam mam do was pytanko zrobilem sobie funkcje w delphi dodajaca userow do bazy wyglada tak:

zap:=
        'INSERT INTO public.users (' +
          'idx_osoby, ' +
          'login, ' +
          'pass, ' +
          'imie, ' +
          'imie2, ' +
          'nazwisko, ' +
          'pesel, ' +
          'data_ur, ' +
          'plec, ' +
          'kod, ' +
          'miasto, ' +
          'ulica, ' +
          'dom, ' +
          'lokal, ' +
          'tel, ' +
          'email, ' +
          'nip, ' +
          'opis,' +
          'idx_dzialu, ' +
          'idx_autora, ' +
          'data_zmiany )' +
          'SELECT ' +
                         edtID.Text +
              ', ' +#39+ edtLogin.Text+#39+
              ', ' +#39+ pass +#39+
              ', ' +#39+ edtImie.Text +#39+
              ', ' +#39+ edtImie2.Text +#39+
              ', ' +#39+ edtNazwisko.Text +#39+
              ', ' +#39+ edtPesel.Text +#39+
              ', ' +#39+ DateToStr(datDataUr.Date) +#39+
              ', ' +#39+ edtPlec.Text +#39+
              ', ' +#39+ edtKod.Text +#39+
              ', ' +#39+ edtMiasto.Text +#39+
              ', ' +#39+ edtUlica.Text +#39+
              ', ' +#39+ edtDom.Text +#39+
              ', ' +#39+ edtLokal.Text +#39+
              ', ' +#39+ edtTelefon.Text +#39+
              ', ' +#39+ edtEmail.Text +#39+
              ', ' +#39+ edtNip.Text +#39+
              ', ' +#39+ memInfo.Text +#39+
              ', ' + idx_dzialu +
              ', ' + IntToStr(idx_autora) +
              ', to_timestamp(' +#39+ DateTimeToStr(Now) +#39+ ', '+#39+'YYYY-MM-DD HH:mm'+#39+')' +
          'where not EXISTS ' + //sprawdzamy czy user o takim ID lub peselu juz istnieje
            '(select idx_osoby from public.users where idx_osoby = ' + edtID.Text +
                                                      ' OR pesel = ' +#39+ edtPesel.Text +#39+ ');';
        qrAdd.SQL.Clear;
        qrAdd.SQL.Add(zap);
        qrAdd.ExecSQL;
        Application.MessageBox('Użytkownik został dodany', 'Dodano użytkownika', MB_OK + MB_ICONEXCLAMATION);

User sam na formularzu deklaruje swoj id w dodatku wczesniej jest sprawdzanie sumy kontrolnej PESELA itd itd wszystko dziala pielnie jak nalezy ALE chcialbym napisac funkcje w SQL ktora bedzie wywolana z poziomu delphi z przekazaniem parametrow do funkcji ... funkcja zwraca true lub false w zaleznosci od tego czy user zostal dodany czy nie wyswietla sie odpowiedni komunikat. Moze mi ktos pomoc to napisac bo nigdy tego nie robilem i nie bardzo wiem jak sie za to zabrac

0

Po pierwsze wyrzuć ten kod jak najszybciej możesz!!!!
To idealny przykład jak pisać formularze podatne na sql iniection.
Poczytaj o prepered statement.

http://www.e-pomocnik.pl/artykul.php?id=5 Tu znajdziesz przykłąd jak pisać funkcje w PostgreSQL przy użyciu plpgsql.

Nigdy też nie wyświetaj ani nie pozwalaj użytkownikowi na wybieranie sobie identyfikatora. Od tego sa sekwencje.

0

A dajmy na to ze uda mi sie napisac ta funkcje to jak mam ja wywolac z poziomu delphi i przekierowac ja na ta jedna konkretna tabele ??

0

Ok zrobilem cos takiego:

DECLARE
l_bool INTEGER;
BEGIN
	IF NOT EXISTS (SELECT 1 from public.test where idx_osoby = p_idx_osoby) then
    	INSERT INTO test(idx_osoby, imie, pass) VALUES(p_idx_osoby, p_imie, p_pass); 
    end IF;
    l_bool = 1;
RETURN l_bool;
END;

w Delphi mam wywolanie:

  zap := 'Select public.adduser(' +Edit2.Text+ ', ' +#39+Edit3.Text+#39+ ', ' +#39+Edit4.Text+#39');';
  qr.SQL.Clear;
  qr.SQL.Add(zap);
  qr.ExecSQL;

Pytanie teraz jak zrobic zeby wylapac ta zwracana 1 lub 0 ewentualnie przerobic to na typ boolean i w zaleznosci od tego czy sie doda user czy nie zwraca true albo false

0

Wszystko zależy od tego jakich komponentów uzywasz.
Nie wiem czym jest qr.

0

pewnie TZQuery z zeosow

0

Tak query z zeosow

0

Nie znam tego pakietu.
Jednak wydaje mi się, że powinno znajdować się tam coś takiego jak Parameters.
To w nich powinny być przekazywane wszelkie parametry wklejane do query.
Natomiast do procedur/funkcji jest zazwyczaj osobny komponent.

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