по нажатию клавиши выполняется процедура:
var q : string;
begin
if Sender.Tag=1 then begin //здесь Sender.Tag=1
//применить
if IdPPSelect.Value<1 then begin //здесь IdPPSelect.Value=0
// новая ПП
q:='select ifnull(max(id)+1,1) NextId from pp';
RunSQL(q,nil,230);
end else begin
end;
end;
WinParamPP.CloseClient(ClientName);
end.
кусок процедуры "выполнился запрос"
var i,row : integer;
fl : boolean;
s,s1 : string;
cb : TM_ComboBox;
txt : TM_Text;
varVes,tmpVar : TM_Variable;
d1,d2 : double;
begin
case DataSet.Tag of
230:begin //старт создания ПП
if PPIdGP.Value>0 then
PPNewId.Value:=DataSet.Fields[0].AsInt;
s:='INSERT INTO '+DBName+'`pp` (`id`,`kod`,`Name`,`typ`,`time_suh`,`time_mokr`,`speedmel`,`plotn`,'+
'`VesPart`, `VesPort`, `PortKol`, `PortCompl`, `Compl`, `idGP`, dtCreate) '+
'VALUES ('+
QuotedStr(PPNewId.AsStr)+', '+
QuotedStr(PPKod.AsStr)+', '+
QuotedStr(PPName.AsStr)+', '+
QuotedStr(PPTyp.AsStr)+', '+
QuotedStr(PPSuh.AsStr)+', '+
QuotedStr(PPMokr.AsStr)+', '+
QuotedStr(PPSpeedMel.AsStr)+', '+
QuotedStr(PPPlotn.AsStr)+', '+
QuotedStr(PPPart.AsStr)+', '+
QuotedStr(PPPort.AsStr)+', '+
QuotedStr(PPKolPort.AsStr)+', '+
QuotedStr('0')+', '+
QuotedStr('0')+', '+
QuotedStr(PPIdGP.AsStr)+', '+
MySQLDateTime(Now, dttSecond)+');';
// добавили ПП
//дальше детализация
Text281.Text:=s; //вот здесь s почему-то равно не 'INSERT INTO `dbname`.`pp` (`id`,....' , а ''''''''''''''''INSERT INTO `dbname`.`pp` (`id`,....'
RunSQL(s,nil,231);
end;
end;
откуда то в начале строки берутся куча кавычек.
если перед строкой присвоения (s:='INSERT INTO '+DBName+'`pp` (`id`,) поставить присвоение переменной s чего-нибудь, то все будет нормально.
т.е.
s:='что-нибудь';
s:='INSERT INTO '+DBName+'`pp` (`id`,...
то всё будет нормально.
Здравствуйте.
Проблема возможно возникает из-за смешивания кодировок, либо из-за неправильной работы с указателями в других скриптах. Строку "Text281.Text:=s;" нужно заменить на:
Text281.Text := UTF8Encode(s);
Также непонятно какой тип имеет переменная DBName и как значение присваивается в неё. Какой тип данных у колонок в таблице "pp"? Таблица "pp" создана в кодировке UTF8?
Чтобы выявить другие возможные причины нужно проверять проект. Если есть желание, то вышлите проект на support@simple-scada.com для проверки.
Во-первых поле id AUTO INCREMENT так зачем его вычислять и писать в базу? Если нужно получить в переменную id только что внесенной записи, то делаем запись в базу по нажатию кнопки и закрытию окна и сразу же шлём следующий запрос на получение max(id) и уже по этому запросу в SQLDone записываем в переменную последний id.
Во-вторых зачем вообще в скрипте промежуточная переменная "s"? Вроде она нигде больше не используется, может просто вписать запрос в процедуру RunSQL?
RunSQL('INSERT INTO '+DBName+'`pp` (`id`,`kod`,`Name`,`typ`,`time_suh`,`time_mokr`,`speedmel`,`plotn`,'+
'`VesPart`, `VesPort`, `PortKol`, `PortCompl`, `Compl`, `idGP`, dtCreate) '+
'VALUES ('+
QuotedStr(DataSet.Fields[0].AsStr)+', '+
QuotedStr(PPKod.AsStr)+', '+
QuotedStr(PPName.AsStr)+', '+
QuotedStr(PPTyp.AsStr)+', '+
QuotedStr(PPSuh.AsStr)+', '+
QuotedStr(PPMokr.AsStr)+', '+
QuotedStr(PPSpeedMel.AsStr)+', '+
QuotedStr(PPPlotn.AsStr)+', '+
QuotedStr(PPPart.AsStr)+', '+
QuotedStr(PPPort.AsStr)+', '+
QuotedStr(PPKolPort.AsStr)+', '+
QuotedStr('0')+', '+
QuotedStr('0')+', '+
QuotedStr(PPIdGP.AsStr)+', '+
MySQLDateTime(Now, dttSecond)+');', nil, 231);
Переменная s уже приходит с кучей начальных кавычек.
Это верно, если проблема связана с результатом выборки из таблицы "pp" после запроса к которой был вызван скрипт "Выполнен SQL-запрос" в котором Вы получаете проблему. Если наше предположение верно, то переменная "s" с самого начала будет проблемной. Пожалуйста, проделайте простой тест описанный ниже, который даст необходимые данные.
Упрощаю код.
s:='select * from pp';
RunSQL(s,nil,0);
Вы проверяли именно этот код? В идеале нужно оставить такой код:
var
s: string;
begin
s := 'select * from pp';
RunSQL(s, nil, 0);
end.
Чтобы в коде не было никаких локальных переменных помимо s и ничего другого помимо двух строк между begin..end. Добавляются ли лишние символы? Если да, то уберите этот код со скрипта "Выполнен SQL-запрос" и вставьте его в скрипт OnClick кнопки. Запустите проект и кликните кнопку. Добавляются ли лишние символы в этом случае?