如何使用参数的插入查询?

时间:2011-12-29 12:13:27

标签: sql delphi delphi-2010

当我尝试使用此查询时,我收到错误消息称Perameter电子邮件不存在,我确定变量:email,login_pass,payment_method,operateur是有效且存在的。

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服务器对应的手册,以获得正确的语法   第1行':email,:login_pass,:payment_method,:avecpuce)

如何使用参数使用上面的插入查询?

5 个答案:

答案 0 :(得分:7)

来自TSQLQuery.ExecSQL文档:

  

ExecDirect表示不需要准备查询   在执行之前。如果查询,此参数可以设置为true   不包括任何参数。

所以如果代码使用

SQLQuery2.ExecSQL(true);

这意味着不会支持参数。

但是因为你使用参数,只需使用

SQLQuery2.ExecSQL;

并删除参数周围的引号。

答案 1 :(得分:5)

删除引号:

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

答案 2 :(得分:3)

您通常不引用参数,只引用文字。所以而不是:

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

尝试:

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

答案 3 :(得分:3)

找到答案!

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;

谢谢你们所有人!!

答案 4 :(得分:1)

您不应在参数名称周围使用引号。

如果您的TSQLQuery已分配连接且ParamCheck为true且您分配了TSQLQuery.CommandText,则会自动为您生成参数。

将查询分配给TSQLQuery.SQL.Text时,它不会生成参数。

您可以通过调用TSQLQuery.Params.ParseSQL:

为您生成参数
SQLQuery2.Params.ParseSQL(SQLQuery2.SQL.Text, True);

或者您可以通过调用TSQLQuery.Params.AddParameter来自行添加它们。