Тип данных при выгрузке в MySQL через ODBC. Баг?, Поле "инструмент"
Пользователь
Сообщений: Регистрация: 20.09.2017
12.12.2017 13:56:59
Здравствуйте! При выборе сопоставляемого поля MySQL таблицы для параметра "Инструмент" доступны почему-то только типы: DATE, TIME, DATETIME. Все остальные доступные типы (TEXT, CHAR, VARCHAR) в выпадающем списке просто отсутствуют, хотя это самый что ни на есть TEXT. ЧЯДНТ?
Пользователь
Сообщений: Регистрация: 20.09.2017
12.12.2017 14:01:46
Забыл указать: MySQL server version: 5.7.15 Protocol version: 10 Server charset: UTF-8 Unicode (utf8
QUIK clients support
Сообщений: Регистрация: 27.01.2015
13.12.2017 12:53:51
Цитата
AndyJOKER написал: Забыл указать: MySQL server version: 5.7.15 Protocol version: 10 Server charset: UTF-8 Unicode (utf8
Добрый день,
Дополнительно просьба сообщить версию рабочего места QUIK, а также прислать скриншот таблицы в MySQL, где были бы видны настроенные типы данных для полей "dat", "_dattim", "_timst", "_tim".
Пользователь
Сообщений: Регистрация: 20.09.2017
13.12.2017 17:25:48
QUIK 7.14.1.7
Пользователь
Сообщений: Регистрация: 20.09.2017
13.12.2017 17:34:03
В ODBC используется MySQL ODBC 5.3 Unicode Driver.
Пользователь
Сообщений: Регистрация: 20.09.2017
14.12.2017 09:24:02
Аналогичная проблема с текстовым типом данным и в таблице обезличенных сделок:
ODBC драйверы:
Ошибка проявляется одинаково вне зависимости от разрядности ОСи и драйверов. Пробовал на Win7 x86 и Win7 x64.
Пользователь
Сообщений: Регистрация: 20.09.2017
14.12.2017 10:03:58
Еще одна проблема. Формат даты в MySQL по-умолчанию имеет вид 'YYYY-DD-MM', и, насколько мне известно изменить его нельзя. Т.е. работать приходится через:
Код
INS ERT IN TO `table` (`dat`) VALUES (STR_TO_DATE('13.12.2017','%d.%m.%Y'))
Поэтому в итоге получаем: В обмене данными через ODBC не специалист, поэтому вопрос: самостоятельно руками в QUIK можно где-нибудь добавить для всех INSERT STR_TO_DATE или это всё hard-coded? Попутно просьба ткнуть носом где удалось подружить QLUA и MySQL - пока в качеств временного решения проблемы. Благодарю.
QUIK clients support
Сообщений: Регистрация: 27.01.2015
14.12.2017 10:20:56
Цитата
AndyJOKER написал: Аналогичная проблема с текстовым типом данным и в таблице обезличенных сделок:
ODBC драйверы:
Ошибка проявляется одинаково вне зависимости от разрядности ОСи и драйверов. Пробовал на Win7 x86 и Win7 x64.
Добрый день,
Ваше сообщение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
QUIK clients support
Сообщений: Регистрация: 27.01.2015
14.12.2017 10:48:05
Цитата
AndyJOKER написал: Еще одна проблема. Формат даты в MySQL по-умолчанию имеет вид 'YYYY-DD-MM', и, насколько мне известно изменить его нельзя. Т.е. работать приходится через:
Код
INS ERT IN TO `table` (`dat`) VALUES (STR_TO_DATE( '13.12.2017' ,'%d.%m.%Y'))
Средствами QUIK изменить формат даты к сожалению, нельзя. Вы можете сделать это с помощью функционала триггеров MySQL.
Цитата
AndyJOKER написал: В обмене данными через ODBC не специалист, поэтому вопрос: самостоятельно руками в QUIK можно где-нибудь добавить для всех INSERT STR_TO_DATE или это всё hard-coded? Попутно просьба ткнуть носом где удалось подружить QLUA и MySQL - пока в качеств временного решения проблемы.
К сожалению, информации по использованию QLUA в MySQL у нас нет. Для изменения формата даты рекомендуем воспользоваться функционалом триггеров в MySQL.
Пользователь
Сообщений: Регистрация: 20.09.2017
16.12.2017 17:07:46
Триггерами это пофиксить не удается. Ни так:
Код
CREATE TRIGGER `trig` BEFORE INSERT ON `temp`
FOR EACH ROW BEGIN
INS ERT IN TO ticks (`tick_date`,`tick_time`,`tick_price`,`tick_val`) VALUES (NEW.dat, NEW.tim, NEW.price, NEW.val);
END
Ни так:
Код
CREATE TRIGGER `trig` BEFORE INSERT ON `temp`
FOR EACH ROW BEGIN
INS ERT IN TO ticks (`tick_date`,`tick_time`,`tick_price`,`tick_val`) VALUES (STR_TO_DATE(NEW.dat,'%d.%m.%Y'), NEW.tim, NEW.price, NEW.val);
END
Ни так:
Код
CREATE TRIGGER `trig` BEFORE INSERT ON `temp`
FOR EACH ROW BEGIN
INS ERT IN TO ticks (`tick_date`,`tick_time`,`tick_price`,`tick_val`) VALUES (DATE_FORMAT(NEW.dat,'%d.%m.%Y'), NEW.tim, NEW.price, NEW.val);
END
Ни так:
Код
CREATE TRIGGER `trig` BEFORE INSERT ON `temp`
FOR EACH ROW BEGIN
INS ERT IN TO ticks (`tick_date`,`tick_time`,`tick_price`,`tick_val`) VALUES (CONVERT(NEW.dat,DATE), NEW.tim, NEW.price, NEW.val);
END
Неужели я первый, кто выбрал связку QUIK -> ODBC -> MySQL...
Пользователь
Сообщений: Регистрация: 20.09.2017
16.12.2017 20:57:40
Проблема сопоставления полей решилась заменой с Unicode на ANSI драйвер в ODBC:
Т.е. проблема проявляется только на Unicode драйвере. Буду признателен, если кто подскажет по триггеру с подменой формата даты при INSERT.
Пользователь
Сообщений: Регистрация: 20.09.2017
17.12.2017 10:39:42
Вторая проблема также решена. Пример для таблицы обезличенных сделок:
Код
CRE ATE TABLE `temp` (
`id` int(10) UNSIGNED NOT NULL,
`t_date` char(10) NOT NULL,
`t_time` time NOT NULL,
`t_price` decimal(6,2) UNSIGNED NOT NULL,
`t_val` int(11) NOT NULL,
`t_op` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
CRE ATE TABLE `tick` (
`id` int(10) UNSIGNED NOT NULL,
`t_d` date NOT NULL,
`t_t` time NOT NULL,
`t_p` decimal(6,2) UNSIGNED NOT NULL,
`t_v` int(10) UNSIGNED NOT NULL,
`t_op` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Триггер:
Код
CREATE TRIGGER `temp` BEFORE INSERT ON `temp`
FOR EACH ROW BEGIN
INS ERT IN TO tick VALUES(NEW.id, STR_TO_DATE(NEW.t_date,'%d.%m.%Y'), NEW.t_time, NEW.t_price, NEW.t_val, NEW.t_op);
END