To dlatego, że
VALUES (%s,%s)
nie otacza imienia i zawartości zmiennej rodziny cudzysłowami. Dlatego twój back-endowy silnik SQL myśli, że twój mohsen
to nazwa kolumny, a nie wartość.
Zamiast tego użyj np.
VALUES (''%s'',''%s'')
jak w
Namee := 'mohsen';
Family := 'dolatshah';
aSQLText:= 'INSERT INTO b_tbl(Name,Family) VALUES (''%s'',''%s'')';
aSQLCommand := Format(aSQLText,[namee,family]);
W pierwotnej wersji mojej odpowiedzi wyjaśniłem, jak rozwiązać problem, „podwajając” pojedyncze cudzysłowy w Sql, który próbowałeś zbudować, ponieważ wydawało mi się, że masz trudności z dostrzeżeniem (dosłownie), co jest nie tak z czym robiłeś.
Alternatywnym (i lepszym) sposobem uniknięcia problemu (i tym, którego zawsze używam w prawdziwym życiu) jest użycie QuotedStr()
funkcjonować. Ten sam kod stałby się wtedy
aSQLText := 'INSERT INTO b_tbl (Name, Family) VALUES (%s, %s)';
aSQLCommand := Format(aSQLText, [QuotedStr(namee), QuotedStr(family)]);
Według pomocy online:
Przez „powtórzenie” rozumie się to, co nazwałem „podwajaniem”. Dlaczego to ważne, a głównym powodem, dla którego używam QuotedStr, jest uniknięcie błędu mechanizmu bazy danych SQL, gdy wartość, którą chcesz wysłać, zawiera pojedynczy znak cudzysłowu, jak w O'Reilly .
Spróbuj dodać wiersz zawierający tę nazwę do swojej tabeli za pomocą MySql Workbench, a zobaczysz, o co mi chodzi.
Tak więc użycie QuotedStr nie tylko sprawia, że konstruowanie instrukcji SQL jako ciągów w kodzie Delphi jest mniej podatne na błędy, ale także pozwala uniknąć problemów na zapleczu.