当我尝试使用此查询时,我收到错误消息称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)
如何使用参数使用上面的插入查询?
答案 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来自行添加它们。