как исправить параметры для sqlquery в Lazarus - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь создать программу на 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;                                                                   

Я не понимаюя что-то упустил?

1 Ответ

0 голосов
/ 09 января 2019

Вы можете создать хранимую процедуру следующим образом:

DELIMITER $$
CREATE PROCEDURE `create_my_table`(IN `table_name` TEXT)
BEGIN

SET @s=CONCAT('CREATE TABLE IF NOT EXISTS ',
  `table_name`,
  ' (
    `idnew_table` INT NOT NULL,  PRIMARY KEY (`idnew_table`)
  )
);

  PREPARE stmt FROM @s;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;

и затем передать любую строку (или параметр) при ее вызове:

CALL create_my_table("anything");

Вы также можете увидеть мой ответ здесь

...