Dodawanie danych do tabeli typu nchar(255)

0

Witam,

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

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:

Incorret syntax near "0"

W programie mogę wprowadzić dane w postaci:

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

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

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.

0

Jak kolega wyżej i ponadto powinno być:

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.

4
programy-na-zamowienie napisał(a):
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:

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

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

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 ?

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:

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:

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:

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.

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