У меня возникла проблема с моей операцией mysql.Sql Синтаксис, дающий неизвестную ошибку синтаксиса
в основном код отлично работает при вставке, но как только addnew
variable = false и он переключается на обновление, он дает мне ошибку, которую я не могу решить.
Кодекс:
procedure Tadddomain.BitBtn2Click(Sender: TObject);
Var
PrevSql:String;
ID:String;
begin
With Datalive.domains Do
Begin
id:=fieldbyname('id').AsString;
Active:=False;
prevsql:=sql.Text;
Sql.Clear;
Params.Clear;
Addparam(Datalive.domains,'client_id',ftinteger,datalive.clients.FieldByName('id').AsString);
Addparam(Datalive.domains,'domain_name',ftString,Edit1.Text);
Addparam(Datalive.domains,'register_date',ftdate,DateTimePicker1.Date);
Addparam(Datalive.domains,'registered_until',ftdate,DateTimePicker2.Date);
if addnew=true then
Sql.Text:='Insert into domains (client_id,domain_name,register_date,registered_until) VALUES (:client_id,:domain_name,:register_date,:registered_until)'
Else if addnew=False then
Sql.Text:='Update domains (domain_name=:domain_name, register_date=:register_date, registered_until=:registered_until) where id='''+id+'''';
Showmessage(sql.text);
execsql;
sleep(100);
sql.Text:=prevsql;
active:=True;
done:=True;
adddomain.Close;
End;
end;
Ошибка:
Project project1.exe raised exception class EZSQLException with message 'SQL Error: You have an error in your SQL syntax; check the manual that corresponds to your mysql server version for the right syntax to use near '(domain_name='asd',register_date='2014-11-09',registered_until='2015-11-09') w' at line 1'.
Любая помощь будет большим, я искал и искал и не может найти неисправность.
Update:
Я изменил код редактирования, как предложено ниже, а теперь нет ошибок появляться, что так всегда. Но и ничего не происходит. Он не редактирует запись.
if addnew=true then
Sql.Text:='Insert into domains (client_id,domain_name,register_date,registered_until) VALUES (:client_id,:domain_name,:register_date,:registered_until)'
Else if addnew=False then
Begin
sql.Add('Update domains');
sql.Add('set domain_name=:domain_name,');
sql.Add('register_date=:register_date,');
sql.Add('registered_until=:registered_until');
sql.Add('where id=:id');
End;
команда обновления в mysql идет как 'набор команд обновления col1 =: col1, col2 =: col2, где id =: id', используя подготовленный оператор. –
Я не уверен в добавлении значений параметров до того, как запрос разобран (или скомпилирован базовой СУБД). Но в вашем коде есть и другие проблемы. Параметр типа 'ftInteger' вы заполняете строковым значением. 'AddNew', так как некоторая глобальная переменная области видимости не может быть чем-то еще, кроме' False', если ее проверка на 'True' терпит неудачу. Бессмысленный 'Сон', используя' with' ... – TLama
Привет @Tlama Я не замечал целую и строчную ошибку. Но это не вызвало проблемы с вставкой. Переменная addNew - это логическое значение, которое просто указывает код, следует ли вставить, если он является ложным, а затем пытается обновить. Но вы не решили проблему. Вы упомянули все, кроме основной проблемы. – Marcel