MySQL + DB toolkit

Работа с файлами и базами данных
Ответить
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

MySQL + DB toolkit

Сообщение 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 (кидаю по строке), но обработка занимает приличное время, хочется ускориться.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: MySQL + DB toolkit

Сообщение Borjomy_1 »

Может, дело в формате даты/времени. Посмотрите, как кодирует формат даты штатная функция, поменяйте дату и время местами.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: MySQL + DB toolkit

Сообщение 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');
А ключевое поле в таблице имеется?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: MySQL + DB toolkit

Сообщение 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');
Экранировать - это одинарные кавычки? пробовал, не помогло
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: MySQL + DB toolkit

Сообщение 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'
Спасибо за подсказку.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: MySQL + DB toolkit

Сообщение Borjomy_1 »

А можно спросить, чем отличается тот вариант, который работает от первоначального??? Я что-то различий не нашел...
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: MySQL + DB toolkit

Сообщение 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);
Я пытался каждую строку данных отправлять отдельной строкой запроса. Почему-то такой вариант тулкиту не нравится. причём сегодня в ошибке было явно указано "во второй строке".
Получилось, что надо все строки через запятую задавать.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: MySQL + DB toolkit

Сообщение IvanLis »

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

Вернуться в «Сохранение данных»