Dodawanie danych do tabeli typu nchar(255)

Dodawanie danych do tabeli typu nchar(255)
K1
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 5 lat
  • Postów:93
0

Witam,

mam problem z dodawaniem danych do tabeli **dane **która jest typu nchar(255).

Kopiuj
with ADOQuery, SQL do
  begin
    Close;
    Clear;
    Add(Format('INSERT INTO Przystanki (dane) VALUES (%s)', [edit1.Text]));
    ExecSQL;
  end

Gdy w edit1 znajujde się wartość: ,,1" - wszystko działa dobrze.
Ale gdy w edit1 znajduje się wartość ,,1 0" - otrzymuje błąd postaci:

Kopiuj
Incorret syntax near "0"

W programie mogę wprowadzić dane w postaci:

Kopiuj
1 0 1 0,1 0 0 1...

Nie wiem jak to rozwiązać.
Proszę o pomoc.

edytowany 1x, ostatnio: flowCRANE
HI
  • Rejestracja:prawie 13 lat
  • Ostatnio:dzień
  • Postów:1857
1

Zgaduje że treść edita trzeba zamknąć w apostrofy.

Poza tym (nie wiem czy w tym przypadku się da), lepiej wstawiając dane do zapytania używając parametrów.

edytowany 2x, ostatnio: hipekk
PN
  • Rejestracja:prawie 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:22
0

Jak kolega wyżej i ponadto powinno być:

Kopiuj
Add(Format('INSERT INTO Przystanki (dane) VALUES ('%s')', [edit1.Text]));

ponadto nchar to typ danych o stałej długości lepszym rozwiązaniem będzie nvarchar jako typ danych.

edytowany 1x, ostatnio: flowCRANE
flowCRANE
Wstawiaj kod w znaczniki kolorujące składnię;
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 10 godzin
4
programy-na-zamowienie napisał(a):
Kopiuj
Add(Format('INSERT INTO Przystanki (dane) VALUES ('%s')', [edit1.Text]));

Tak to się nie skompiluje.
Ale to nie ważne.

Bo to jest HORROR.

Trzeba użyć parametrów, jakoś tak:

Kopiuj
Add('INSERT INTO Przystanki (dane) VALUES (:Edit1)');
Parameters.ParamByName('Edit1').Value := edit1.Text;

No i oczywiście nie "edit1" tylko sensownie nazwać kontrolkę.

edytowany 3x, ostatnio: Azarien
K1
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 5 lat
  • Postów:93
0

Ok udało się, dzięki za pomoc!

Ale mam pytanie.
Dlaczego w mojej wersji to się nie udało?
Czy moja wersja sczytuje jeden znak ?

WL
  • Rejestracja:ponad 21 lat
  • Ostatnio:9 dni
  • Postów:1083
1

Nie działało nie dlatego, że odczytuje jeden znak, tylko wszystkie. A przy okazji tworzysz błędne polecenie SQL.
Czyli, w Twojej wersji, jeśli do edita wpiszesz 1 to SQL, który zostanie wysłany do serwera, będzie wyglądał tak:

Kopiuj
INSERT INTO Przystanki (dane) VALUES (1)

Zauważ, że nie podajesz tam wartości typu tekstowego tylko liczbę. Ale baza danych automatycznie rzutuje typ liczbowy na tekst i dlatego zadziała.
Natomiast jeśli wpiszesz w edit 1 0 to SQL będzie wyglądał tak:

Kopiuj
INSERT INTO Przystanki (dane) VALUES (1 0)

No i baza danych już nie wie co ma z tym zrobić, dlatego tez dostałeś wyjątek z bazy danych Incorret syntax near "0"
Podpowiedziano Ci, żebyś dodał apostrofy co tymczasowo rozwiązuje problem, ponieważ wtedy ten SQL będzie wyglądał tak:

Kopiuj
INSERT INTO Przystanki (dane) VALUES (`1 0`)

I to jest poprawne.
Ale lepiej posłuchaj @Azarien i używaj zapytań sparametryzowanych, doczytaj sobie po co, dlaczego i jak.

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.