SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 11.07.2018 16:08:39

Zakuskin
Участник
Зарегистрирован: 11.07.2018
Сообщений: 8

SQL 1064

Доброго вечера суток, уважаемые форумчане.
Пишу тут себе программку на дельфях, понадобилось хранить данные в бд, выбрал mysql.
При попытке отправить запрос через программу - выходит ошибка 1064, через phpmyadmin все отрабатывает без проблем. Запрос прилагаю:

INSERT INTO `spis` VALUES (102, "wqewgfdgd", "2018-07-11","2018-07-11",500,500,500,"Да",500,500);

Подскажите где накосячил или пните в нужную сторону. Заранее благодарен.

Отредактированно Zakuskin (11.07.2018 16:09:01)

Неактивен

 

#2 11.07.2018 16:22:53

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2191

Re: SQL 1064

C некоторой вероятностью поможет замена двойных кавычек на одинарные в запросе.
А какой текст ошибки прилагается к 1064?
Посмотрите еще
https://sqlinfo.ru/articles/info/15.html
здесь основные случаи разобраны.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 12.07.2018 05:18:09

Zakuskin
Участник
Зарегистрирован: 11.07.2018
Сообщений: 8

Re: SQL 1064

deadka написал:

C некоторой вероятностью поможет замена двойных кавычек на одинарные в запросе.
А какой текст ошибки прилагается к 1064?
Посмотрите еще
https://sqlinfo.ru/articles/info/15.html
здесь основные случаи разобраны.

При одинарных кавычках компилятор не отрабатывает запрос, не может отличить содержимое переменной string от запроса.
Полный текст ошибки:
[MySQL][OBDC 5.1 Driver][mysqld-5.5.25]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 'INSERT INTO `spis`VALUES (102, "wqewgfdgd", "2018-07-11","2018-07-11",500,500,5' at line 2.

Неактивен

 

#4 12.07.2018 08:07:12

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2191

Re: SQL 1064

Так экранируйте кавычки в запросе

INSERT INTO `spis` VALUES (102, \'wqewgfdgd\', \'2018-07-11\',\'2018-07-11\',500,500,500,\'Да\',500,500);


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 12.07.2018 11:29:38

Zakuskin
Участник
Зарегистрирован: 11.07.2018
Сообщений: 8

Re: SQL 1064

Экранировал, не помогло

Неактивен

 

#6 12.07.2018 11:42:49

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2191

Re: SQL 1064

Покажите код, которым вставляете?
И перед непосредственной вставкой в базу сделайте вывод планируемого запроса в файл какой-нибудь и приложите файл сюда к сообшение.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 12.07.2018 11:46:51

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2191

Re: SQL 1064

И покажите результат запроса

show create  table `spis`;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#8 12.07.2018 12:04:39

Zakuskin
Участник
Зарегистрирован: 11.07.2018
Сообщений: 8

Re: SQL 1064

procedure TForm1.Button6Click(Sender: TObject);
var q:string;
begin
q:sad'INSERT INTO `spis` VALUES (102, ''wqewgfdgd'', ''2018-07-11'',''2018-07-11'',500,500,500,''Да'',500,500);');
ADOQuery1.SQL.Add(q);
memo1.Lines.Clear;
memo1.Lines.Add(q);//вывод запроса в мемо
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
ADOQuery1.Active:=true;
end;

Запрос выводится такой:
INSERT INTO `spis` VALUES (102, 'wqewgfdgd', '2018-07-11','2018-07-11',500,500,500,'Да',500,500);

show create table `spis`:
CREATE TABLE `spis` (  `Numpp` smallint(6) NOT NULL AUTO_INCREMENT,  `fio` varchar(100) CHARACTER SET cp1251 NOT NULL,  `dataz` varchar(100) NOT NULL,  `datav` varchar(100) NOT NULL,  `cenap` varchar(6) NOT NULL,  `room` varchar(4) NOT NULL,  `sump` varchar(6) NOT NULL,  `stop` enum('Да','Нет') CHARACTER SET cp1251 NOT NULL,  `cenas` varchar(6) NOT NULL,  `sumall` varchar(6) NOT NULL,  PRIMARY KEY (`Numpp`),  UNIQUE KEY `Номер` (`Numpp`)) ENGINE=InnoDB AUTO_INCREMENT=102 DEFAULT CHARSET=cp1251

Неактивен

 

#9 12.07.2018 12:28:33

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2191

Re: SQL 1064

В структуре таблицы идут поля не так, как Вы их в VALUES передаёте.
И к слову, auto_increment'ное поле передавать уж точно не нужно, оно автоматом генерируется. попробуйте для теста так:

INSERT INTO `spis` VALUES (NULL, 'wqewgfdgd', '2018-07-11','2018-07-11','100','200','300','да');


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#10 12.07.2018 12:55:16

Zakuskin
Участник
Зарегистрирован: 11.07.2018
Сообщений: 8

Re: SQL 1064

Результат тот же.
Запрос делался по образцу выдаваемому пхпма:
INSERT INTO `spis`(`Numpp`, `fio`, `dataz`, `datav`, `cenap`, `room`, `sump`, `stop`, `cenas`, `sumall`) VALUES ([value-1],[value-2],[value-3],[value-4],[value-5],[value-6],[value-7],[value-8],[value-9],[value-10])

Отредактированно Zakuskin (12.07.2018 13:01:08)

Неактивен

 

#11 12.07.2018 13:06:45

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2191

Re: SQL 1064

Я два поля не добавил, а если так?

INSERT INTO `spis` VALUES (NULL, 'wqewgfdgd', '2018-07-11','2018-07-11','100','200','300','да','400','500');


Вот на этот запрос пришлите ошибку, которая выдается, если будет ошибка снова.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#12 12.07.2018 13:14:37

Zakuskin
Участник
Зарегистрирован: 11.07.2018
Сообщений: 8

Re: SQL 1064

https://image.ibb.co/j85EU8/image.jpg

Отредактированно Zakuskin (12.07.2018 13:14:53)

Неактивен

 

#13 12.07.2018 13:16:47

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2191

Re: SQL 1064

В то же время ровно этот запрос проходит через phpmyadmin? Если "копипастом" его туда отправить.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#14 12.07.2018 13:22:17

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6691

Re: SQL 1064

Тест ошибки есть только в одном месте тредика, поэтому буду ориентироваться на сообщение #3. В ней написано, что запрос состоит из двух частей, и ошибка на второй строке.

Не может так оказаться, что у Вас два запроса в одной строке, и нету точки с запятой в первом из них?
Можете явно делать AdoQuery1.Clear до того, как добавлять туда Insert?

http://docs.embarcadero.com/products/ra … y_xml.html

Неактивен

 

#15 12.07.2018 13:36:19

Zakuskin
Участник
Зарегистрирован: 11.07.2018
Сообщений: 8

Re: SQL 1064

paulus написал:

Можете явно делать AdoQuery1.Clear до того, как добавлять туда Insert?

Вот это помогло. Почему-то нужно очищать, хотя в компоненте было пусто.
Огромное спасибо за помощьsmile

Еще один вопрос - есть ли способ, чтобы запрос на INSERT возвращал какой-то ответ?

Неактивен

 

#16 12.07.2018 13:49:15

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6691

Re: SQL 1064

А какой ответ Вы ожидаете? Есть поле RowsAffected smile

Если нужен id записи, то без документации не разберешься, а документацию я как раз найти и не могу sad
Можно сделать SELECT LAST_INSERT_ID() следующим запросом в качестве костыля.

На форумах рекомендуют пробовать через параметры, тут совсем не знаю, дельфи последние лет десять в руках не держал sad
https://stackoverflow.com/questions/332 … i-adoquery

Неактивен

 

#17 12.07.2018 14:00:13

Zakuskin
Участник
Зарегистрирован: 11.07.2018
Сообщений: 8

Re: SQL 1064

Да собственно ответ нужен любой) Компилятор ругается, что сервер ничего не возвращает в ответ)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson