Страница 1 из 1

MySQL + DB toolkit

Добавлено: 30 ноя 2015, 15:21
Artem.spb
Задача: с некоторой периодичностью кидать 50 строк в базу.

Использую MySQL + DB toolkit.
Чтобы процесс не занимал много времени, создаю запрос вида

INSERT INTO datet (Controller, Channel, Time, value) VALUES (1, 5, '2015-11-30 11:33:32', 1000.0000000000);
INSERT INTO datet (Controller, Channel, Time, value) VALUES (1, 6, '2015-11-30 11:33:32', 1001.0000000000);


(все 50 строк)
получаю ошибку:

Error -2147217900 occurred at NI_Database_API.lvlib:Conn Execute.vi->PC_procc_pack2.vi:6020001->test_write_data.vi

Possible reason(s):
ADO Error: 0x80040E14
Exception occured in Microsoft OLE DB Provider for ODBC Drivers: [MySQL][ODBC 5.3(a) Driver][mysqld-5.5.46-log]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 '11:33:32, 1000.0000000000);
INSERT INTO datet (Controller, Channel, Time, value' at line 1 in NI_Database_API.lvlib:Conn Execute.vi->PC_procc_pack2.vi:6020001->test_write_data.vi

копирую эти строки и отправляю в MySQL workbenсh, запрос успешно выполняется (данные добавляются).
Перепробовал кавычки, одинарные кавычки, без кавычек. На всё ругается, причём место примерно одно и то же.

В чём глюк, что не так в запросе?

В принципе проблему решил через DB Tools Insert Data VI (кидаю по строке), но обработка занимает приличное время, хочется ускориться.

Re: MySQL + DB toolkit

Добавлено: 30 ноя 2015, 15:43
Borjomy_1
Может, дело в формате даты/времени. Посмотрите, как кодирует формат даты штатная функция, поменяйте дату и время местами.

Re: MySQL + DB toolkit

Добавлено: 30 ноя 2015, 16:02
IvanLis
Artem.spb писал(а):Чтобы процесс не занимал много времени, создаю запрос вида

INSERT INTO datet (Controller, Channel, Time, value) VALUES (1, 5, '2015-11-30 11:33:32', 1000.0000000000);
INSERT INTO datet (Controller, Channel, Time, value) VALUES (1, 6, '2015-11-30 11:33:32', 1001.0000000000);
Если ты пишешь сразу во все поля, то их по идее прописывать не обязательно, можно попробовать запрос типа:

Код: Выделить всё

INSERT INTO datet  VALUES (1, 6, '2015-11-30 11:33:32', 1001.0000000000);
Ну и соответственно очередность их следования должна совпадать.
Так же при записи сразу нескольких строк, можно сделать так:

Код: Выделить всё

INSERT INTO datet VALUES (1, 6, '2015-11-30 11:33:32', 1001.0000000000), (1, 6, '2015-11-30 11:33:33', 1002.0000000000), (1, 6, '2015-11-30 11:33:33', 1003.0000000000);
Попробуй экранировать все значения, этого в принципе не нужно делать, но может поможет:

Код: Выделить всё

INSERT INTO datet  VALUES ('1', '6', '2015-11-30 11:33:32', '1001.0000000000');
А ключевое поле в таблице имеется?

Re: MySQL + DB toolkit

Добавлено: 01 дек 2015, 11:44
Artem.spb
Borjomy_1 писал(а):Может, дело в формате даты/времени. Посмотрите, как кодирует формат даты штатная функция, поменяйте дату и время местами.
формат взял из справки:
http://www.mysql.ru/docs/man/DATETIME.html
Сейчас посмотрю, как без неё совсем
IvanLis писал(а): Если ты пишешь сразу во все поля, то их по идее прописывать не обязательно, можно попробовать запрос типа:
Код: Выделить всё
INSERT INTO datet VALUES (1, 6, '2015-11-30 11:33:32', 1001.0000000000);
Пишу не во все поля, поэтому и указываю их. Есть ключевое поле, которое я не трогаю.
IvanLis писал(а):Попробуй экранировать все значения, этого в принципе не нужно делать, но может поможет:
Код: Выделить всё
INSERT INTO datet VALUES ('1', '6', '2015-11-30 11:33:32', '1001.0000000000');
Экранировать - это одинарные кавычки? пробовал, не помогло

Re: MySQL + DB toolkit

Добавлено: 01 дек 2015, 12:04
Artem.spb
С датой всё норм, в итоге заработал такой вариант:

Код: Выделить всё

INSERT INTO datet (Controller, Channel, Time, value) VALUES (1, 5, '2015-11-30 11:33:32', 1000.0000000000),  (1, 6, '2015-11-30 11:33:32', 1000.0000000000),  (1, 7, '2015-11-30 11:33:32', 1002.0000000000),  (1, 8, '2015-11-30 11:33:32'
Спасибо за подсказку.

Re: MySQL + DB toolkit

Добавлено: 01 дек 2015, 12:15
Borjomy_1
А можно спросить, чем отличается тот вариант, который работает от первоначального??? Я что-то различий не нашел...

Re: MySQL + DB toolkit

Добавлено: 01 дек 2015, 13:08
Artem.spb
Было

Код: Выделить всё

INSERT INTO datet (Controller, Channel, Time, value) VALUES (1, 5, '2015-11-30 11:33:32', 1000.0000000000);
INSERT INTO datet (Controller, Channel, Time, value) VALUES (1, 6, '2015-11-30 11:33:32', 1001.0000000000);
стало

Код: Выделить всё

INSERT INTO datet (Controller, Channel, Time, value) VALUES (1, 5, '2015-11-30 11:33:32', 1000.0000000000),  (1, 6, '2015-11-30 11:33:32', 1000.0000000000),  (1, 7, '2015-11-30 11:33:32', 1002.0000000000);
Я пытался каждую строку данных отправлять отдельной строкой запроса. Почему-то такой вариант тулкиту не нравится. причём сегодня в ошибке было явно указано "во второй строке".
Получилось, что надо все строки через запятую задавать.

Re: MySQL + DB toolkit

Добавлено: 01 дек 2015, 15:05
IvanLis
Artem.spb писал(а):Я пытался каждую строку данных отправлять отдельной строкой запроса. Почему-то такой вариант тулкиту не нравится. причём сегодня в ошибке было явно указано "во второй строке".
Получилось, что надо все строки через запятую задавать.
Сейчас некогда искать, но сталкивался с подобной ерундой при работе с БД Access через ADO из под VBA.
Там тоже нужно или пачкой писать, или по одному, но после каждой записи обновлять таблицу, типа UpDate. Это наверное потому, что работа ведется не непосредственно с таблицей, а с сущностью.