Параметры sql ложные

я пробовал этот код

source := 'prénom';
FDQuery4.SQL.Add ('INSERT INTO  name(:pSource) Values ("kkkkk")');
FDQuery4.Params.ParamByName('pSource').Value := source;
FDQuery4.execSQL;

но это показывает мне это исключение.

Исключение "первый шанс" $75B2845D. Исключение класса EMySQLNativeException с сообщением '[FireDAC][Phys][MySQL] Ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом со значениями ''prénom') ("kkkkk")' в строке 1'.

я не понимаю, почему преном читается так "преном")


person sasa    schedule 18.05.2017    source источник
comment
Вы не можете использовать параметр для имени столбца, они предназначены только для значений. Создайте строку вручную, добавив `prénom`   -  person Alex K.    schedule 18.05.2017
comment
@Alex, FireDAC содержит поддержку макросов для параметризованных имен столбцов.   -  person Victoria    schedule 12.06.2017


Ответы (1)


Вы не можете использовать параметры для имен полей. Создайте запрос перед выполнением, как это

source := 'prénom';
FDQuery4.SQL.Add ('INSERT INTO  name(' + source + ') Values ("kkkkk")');
FDQuery4.execSQL;

И лучше использовать параметры для вашего значения

source := 'prénom';
FDQuery4.SQL.Add ('INSERT INTO  name(' + source + ') Values (:pValue)');
FDQuery4.Params.ParamByName('pValue').Value := 'kkkk';
FDQuery4.execSQL;

Как предложила Виктория, вы также можете сделать это при использовании FireDAC:
Это решает вашу первую проблему.

FDQuery4.SQL.Add('INSERT INTO name (&TheColumn) VALUES ("TheValue")');     
FDQuery4.MacroByName('TheColumn').AsIdentifier := 'prénom';
person GuidoG    schedule 19.05.2017
comment
Лучше создать макрос для параметризованного имени столбца (FireDAC). В коде они используются аналогично параметрам. Вы можете написать FDQuery4.SQL.Add('INSERT INTO name (&TheColumn) VALUES ("TheValue")'); FDQuery4.MacroByName('TheColumn').AsIdentifier := 'prénom'; - person Victoria; 12.06.2017
comment
@Victoria Добавил это в мой ответ - person GuidoG; 12.06.2017