MySQL + DB toolkit

Работа с файлами и базами данных

MySQL + DB toolkit

Postby Artem.spb on 30 Nov 2015, 15:21

Задача: с некоторой периодичностью кидать 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 (кидаю по строке), но обработка занимает приличное время, хочется ускориться.
Artem.spb
expert
expert
 
Posts: 1308
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 224
CLD hardware I/O VIP freelance

Re: MySQL + DB toolkit

Postby Borjomy_1 on 30 Nov 2015, 15:43

Может, дело в формате даты/времени. Посмотрите, как кодирует формат даты штатная функция, поменяйте дату и время местами.
Borjomy_1
expert
expert
 
Posts: 1786
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 310
VIP

Re: MySQL + DB toolkit

Postby IvanLis on 30 Nov 2015, 16:02

Artem.spb wrote:Чтобы процесс не занимал много времени, создаю запрос вида

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);


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

Ну и соответственно очередность их следования должна совпадать.
Так же при записи сразу нескольких строк, можно сделать так:
Code: Select all
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);


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


А ключевое поле в таблице имеется?
User avatar
IvanLis
professor
professor
 
Posts: 4573
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 722
hardware VIP bloggers teachers

Re: MySQL + DB toolkit

Postby Artem.spb on 01 Dec 2015, 11:44

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


формат взял из справки:
http://www.mysql.ru/docs/man/DATETIME.html
Сейчас посмотрю, как без неё совсем

IvanLis wrote:Если ты пишешь сразу во все поля, то их по идее прописывать не обязательно, можно попробовать запрос типа:
Код: Выделить всё
INSERT INTO datet VALUES (1, 6, '2015-11-30 11:33:32', 1001.0000000000);

Пишу не во все поля, поэтому и указываю их. Есть ключевое поле, которое я не трогаю.

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

Экранировать - это одинарные кавычки? пробовал, не помогло
Artem.spb
expert
expert
 
Posts: 1308
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 224
CLD hardware I/O VIP freelance

Re: MySQL + DB toolkit

Postby Artem.spb on 01 Dec 2015, 12:04

С датой всё норм, в итоге заработал такой вариант:
Code: Select all
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'


Спасибо за подсказку.
Artem.spb
expert
expert
 
Posts: 1308
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 224
CLD hardware I/O VIP freelance

Re: MySQL + DB toolkit

Postby Borjomy_1 on 01 Dec 2015, 12:15

А можно спросить, чем отличается тот вариант, который работает от первоначального??? Я что-то различий не нашел...
Borjomy_1
expert
expert
 
Posts: 1786
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 310
VIP

Re: MySQL + DB toolkit

Postby Artem.spb on 01 Dec 2015, 13:08

Было
Code: Select all
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);


стало
Code: Select all
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);


Я пытался каждую строку данных отправлять отдельной строкой запроса. Почему-то такой вариант тулкиту не нравится. причём сегодня в ошибке было явно указано "во второй строке".
Получилось, что надо все строки через запятую задавать.
Artem.spb
expert
expert
 
Posts: 1308
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 224
CLD hardware I/O VIP freelance

Re: MySQL + DB toolkit

Postby IvanLis on 01 Dec 2015, 15:05

Artem.spb wrote:Я пытался каждую строку данных отправлять отдельной строкой запроса. Почему-то такой вариант тулкиту не нравится. причём сегодня в ошибке было явно указано "во второй строке".
Получилось, что надо все строки через запятую задавать.


Сейчас некогда искать, но сталкивался с подобной ерундой при работе с БД Access через ADO из под VBA.
Там тоже нужно или пачкой писать, или по одному, но после каждой записи обновлять таблицу, типа UpDate. Это наверное потому, что работа ведется не непосредственно с таблицей, а с сущностью.
User avatar
IvanLis
professor
professor
 
Posts: 4573
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 722
hardware VIP bloggers teachers


Return to Сохранение данных

Who is online

Users browsing this forum: No registered users and 3 guests

cron