Как использовать запрос вставки, используя параметры? - PullRequest
3 голосов
/ 29 декабря 2011

Когда я пытаюсь выполнить этот запрос, я получаю сообщение об ошибке, в котором говорится, что электронная почта Perameter не существует, я уверен, что переменные: email, login_pass, payment_method, operaur действительны и существуют.

SQLQuery2.sql.Text := 'INSERT INTO registered (email,login_pass,payment_method,operateur) VALUES (":email",":login_pass",":payment_method",":avecpuce")';
SQLQuery2.ParamByName('email').AsString := email;
SQLQuery2.ParamByName('login_pass').AsString := login_pass;
SQLQuery2.ParamByName('payment_method').AsString := payment_method;
SQLQuery2.ParamByName('avecpuce').AsString := avecpuce;
SQLQuery2.ExecSQL(true);

Я пытался удалить цитату, но я получаю

У вас есть ошибка в вашем синтаксисе Sql, проверьте руководство, соответствующее вашему серверу SQL, для правильного синтаксиса для использования рядом ': email,: login_pass,: payment_method,: avecpuce)' в строке 1

Как использовать запрос на вставку выше, используя параметры?

Ответы [ 5 ]

7 голосов
/ 29 декабря 2011

Из документации TSQLQuery.ExecSQL :

ExecDirect указывает, что запрос не нужно готовить до того, как он будет выполнен. Этот параметр может быть установлен в true, если запрос не содержит никаких параметров.

Так что, если код использует

SQLQuery2.ExecSQL(true);

это означает, что не будет поддержки параметров.

Но поскольку вы используете параметры, просто используйте

SQLQuery2.ExecSQL;

, а также удаляйте кавычки вокруг параметров.

5 голосов
/ 29 декабря 2011

Удалить кавычки:

SQLQuery2.sql.Text := 'INSERT INTO registered (email,login_pass,payment_method,operateur)
   VALUES (:email, :login_pass, :payment_method, :avecpuce)';
3 голосов
/ 30 декабря 2011

Нашел ответ!

MySQLQuery2.SQL.Clear;
MySQLQuery2.SQL.Add('INSERT INTO COUNTRY (NAME, CAPITAL, POPULATION)');
MySQLQuery2.SQL.Add('VALUES (:Name, :Capital, :Population)');
MySQLQuery2.Params[0].AsString := 'Lichtenstein';
MySQLQuery2.Params[1].AsString := 'Vaduz';
MySQLQuery2.Params[2].AsInteger := 420000;
MySQLQuery2.ExecSQL;

Спасибо, все !!

3 голосов
/ 29 декабря 2011

Обычно вы не указываете параметры, только литералы.Поэтому вместо:

VALUES (":email",":login_pass",":payment_method",":avecpuce")

Попробуйте:

VALUES (:email,:login_pass,:payment_method,:avecpuce)
1 голос
/ 29 декабря 2011

Вы не должны использовать кавычки вокруг имени параметра.

Параметры генерируются автоматически для вас, если вашему TSQLQuery назначено соединение и ParamCheck имеет значение true, а вы присваиваете TSQLQuery.CommandText.

Он не будет генерировать параметры при назначении запроса для TSQLQuery.SQL.Text.

Вы можете получить параметры, сгенерированные для вас, вызвав TSQLQuery.Params.ParseSQL:

SQLQuery2.Params.ParseSQL(SQLQuery2.SQL.Text, True);

Или вы можете добавить их самостоятельно, вызвав TSQLQuery.Params.AddParameter.

...