【发布时间】:2019-05-27 04:09:21
【问题描述】:
我正在尝试在 lazarus 中创建一个程序,该程序应该在 mysql 中创建一个表。
在我写的代码下面:
sqlquery2.SQL.AddText('CREATE TABLE `oferte`.:id (`idnew_table` INT NOT NULL, PRIMARY KEY (`idnew_table`));');
sqlquery2.Params.ParamByName('id').asstring:=client.text;
当我启动此代码时,我收到以下错误:
“您的 sql 语法有错误...”
我试过了:
sqlquery2.SQL.AddText('CREATE TABLE `oferte`.`test1` (`idnew_table` INT NOT NULL, PRIMARY KEY (`idnew_table`));');
程序按预期运行,表被创建到数据库中,没有错误。
我还写了一段代码,参数传入 sql,用于将数据插入表中,效果很好。
我运行的代码没问题:
sqlquery1.sql.Clear;
sqlquery1.SQL.Text:='insert into stocpiese(denumire,stoc,furnizor,client,pretintrare,adaoscom,'+'cod,pretiesire, moneda ,schimbvalutar,datacumpararii)'+'values ( (:den),(:stoc),(:furn),(:client),(:pretin),(:adcom),'+'(:cod),(:preties),(:moneda),(:schimb),(:data));';
sqlquery1.Params.ParamByName('den').AsString:=denumire.text;
sqlquery1.Params.ParamByName('stoc').AsString:=stoc.text;
sqlquery1.Params.ParamByName('furn').AsString:=furnizorsele.text;
sqlquery1.Params.ParamByName('client').AsString:=clientsele.text;
sqlquery1.Params.ParamByName('pretin').AsString:=pretintrare.text;
sqlquery1.Params.ParamByName('adcom').AsString:=adcom.text;
sqlquery1.Params.ParamByName('cod').AsString:=codsele.text;
sqlquery1.Params.ParamByName('preties').AsString:=pretiesire.text;
sqlquery1.Params.ParamByName('moneda').AsString:='lei';
sqlquery1.Params.ParamByName('schimb').AsString:=edit3.text;
sqlquery1.Params.ParamByName('data').AsString:=FormatDateTime('dd-mm-yy', data+201);
if(MySQL57Connection1.connected=false)then MySQL57Connection1.connected:=true;
if(SQLTransaction1.active=false)then SQLTransaction1.active:=true;
sqlquery1.ExecSQL;
SQLTransaction1.CommitRetaining;
sqlquery1.Open;
我不明白,我错过了什么吗?
【问题讨论】:
-
您不能参数化表名。您只能参数化列值。
-
好的,那么如何在运行时创建通过编辑框选择名称的表?
-
你不应该假设你可以在 Sql 中使用反引号 (`)。 Delphi 会将它们转发到您的 Sql 后端,但是服务器是否以及在什么情况下可以接受它们是一个不同的问题,并且对于大多数服务器来说可能是负面的。
标签: lazarus