błąd przy dodaniu rekordu do bazy

błąd przy dodaniu rekordu do bazy
ZE
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam grupowiczów, zwracam sie z prośbą o pomoc w rozwiązaniu problemu/błędu przy próbie zapisu danych. Procedura utworzona w delphi 12 i komponentach ZEOS baza danych POSTGRES (zrzut ekranu w załączniku. Za wszelkie sugestie dziękuję
pozdrawiam

dodatkowo pozwalam sobie zamieścić kod który wywoluje ten bląd

      with Dane.ZQuery20, SQL do    //urzad marszałkowski
        begin
          Close;
          Clear;
          Add('insert into  pasazer_pkikicsv (nazwisko, imie, miasto, kod_pocztowy, ulica, pesel, trasa, nr_dokumentu, szkola, przystanekpt, przystanekkt, przystanekpp, przystanekkp)');
          Add('values (:nazwisko, :imie, :miasto, :kod_pocztowy, :ulica, :pesel, :trasa, :nr_dokumentu, :szkola, :przystanekpt, :przystanekkt, :przystanekpp, :przystanekkp)');
          ParamByName('nazwisko').AsString := trim(pnazwisko);
          ParamByName('imie').AsString := Trim(pimie);
          ParamByName('miasto').AsString := Trim(pmiasto);
          ParamByName('kod_pocztowy').AsString := trim(pkodpocztowy);
          ParamByName('ulica').AsString := trim(pulica);
          ParamByName('pesel').AsString := Trim(ppesel);
          ParamByName('trasa').AsString := trim(plinia);
          ParamByName('nr_dokumentu').AsString := Trim(pdokument);
          ParamByName('przystanekpt').AsString := trim(przystanek1);
          ParamByName('przystanekkt').AsString := trim(przystanek2);
          ParamByName('przystanekpp').AsString := trim(przystanek11);
          ParamByName('przystanekkp').AsString := trim(przystanek22);
          ParamByName('szkola').AsString := trim(edit2.Text);
          ExecSQL;
        end;

Januszblad1.jpg

KK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
1
  1. Dlaczego wpisujesz kod SQL ręcznie, a nie używasz Append DatSet-u? Prosisz się o błędy.
  2. I te błędy masz. Przecież to błąd składni - co to za dwa otwarte nawiasy na końcu???
    Zasada nr 1. Nie rób niepotrzebnego SQL w kontrolkach.
WA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

Błąd masz w tej linii:

Kopiuj
with Dane.ZQuery20, SQL do

Nie możesz odwołać się do dwóch obiektów w with.

Spróbuj zrobić tak:

Kopiuj
with Dane.ZQuery20 do
  with SQL do
  begin
    Close;
    Clear;
    Add('insert into pasazer_pkikicsv (nazwisko, imie, miasto, kod_pocztowy, ulica, pesel, trasa, nr_dokumentu, szkola, przystanekpt, przystanekkt, przystanekpp, przystanekkp)');
    Add('values (:nazwisko, :imie, :miasto, :kod_pocztowy, :ulica, :pesel, :trasa, :nr_dokumentu, :szkola, :przystanekpt, :przystanekkt, :przystanekpp, :przystanekkp)');
    ParamByName('nazwisko').AsString := trim(pnazwisko);
    // ... reszta parametrów
    ExecSQL;
  end;

lub tak:

Kopiuj
Dane.ZQuery20.SQL.Close;
Dane.ZQuery20.SQL.Clear;
Dane.ZQuery20.SQL.Add('insert into pasazer_pkikicsv (nazwisko, imie, miasto, kod_pocztowy, ulica, pesel, trasa, nr_dokumentu, szkola, przystanekpt, przystanekkt, przystanekpp, przystanekkp)');
Dane.ZQuery20.SQL.Add('values (:nazwisko, :imie, :miasto, :kod_pocztowy, :ulica, :pesel, :trasa, :nr_dokumentu, :szkola, :przystanekpt, :przystanekkt, :przystanekpp, :przystanekkp)');
Dane.ZQuery20.ParamByName('nazwisko').AsString := trim(pnazwisko);
// ... reszta parametrów
Dane.ZQuery20.ExecSQL;
flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12311
0
wala napisał(a):

Błąd masz w tej linii:

Kopiuj
with Dane.ZQuery20, SQL do

Nie możesz odwołać się do dwóch obiektów w with.

Można, do jednego lub wielu, jest to składniowo poprawne i opisane w dokumentacji — With Statements. Jednak nie polecam używania tej konstrukcji, bo praktycznie niczego nie naprawia, a przy wielu związanych obiektach pojawia się problem z przesłanianiem. To zwykły cukier składniowy, który niby rozwiązuje jeden problem, ale powoduje trzy kolejne.

KK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

A ogólnie to wróćmy do początku. Po co w ten sposób pisać, zwłaszcza z wykorzystaniem ZeosLib. Należało po prostu użyć: Append, FiledByName.Value i Post. Po to właśnie wprowadzono DataSet 30 lat temu, żeby nie robić tak jak w pierwszym poście.

GS
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
Add('insert into  pasazer_pkikicsv (nazwisko, imie, miasto, kod_pocztowy, ulica, pesel, trasa, nr_dokumentu, szkola, przystanekpt, przystanekkt, przystanekpp, przystanekkp)');
Add('values (:nazwisko, :imie, :miasto, :kod_pocztowy, :ulica, :pesel, :trasa, :nr_dokumentu, :szkola, :przystanekpt, :przystanekkt, :przystanekpp, :przystanekkp)');

na końcu pierwszego Add dodaj znak spacji !! Sklejasz bez żadnego separatora (spacji) dwa stringi i praser postgresa rzuca wyjątek (błąd)

kaczus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 1405
2

Na pewno jest to ten wklejony kod? Błąd na obrazku wskazuje na to, że VALUES masz podwójnie otwarty nawias...

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.