Показать сообщение отдельно
Старый 21.01.2016, 17:24   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,983 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Ошибки с типом dateTime при работе через ODBC при использовании класса ResultSet
Привет всем.
Хотелось обсудить странный глюк.
Дано.
Внешная база на SQL Server (версия Microsoft SQL Server 2014 - 12.0.4213.0 (X64) )

В табличке хранятся данные с типом dateTime
SQL Management studio показывает значение 2016-01-20 13:28:00.000

При подключении из Аксапты через ODBC делаем простейший запрос select from
Затем при чтении метод ResultSet.getDateTime() возвращает какую-то фигню.

Отладчик в аксапте показывает значение CL.01.2016 20:00:13

то же самое выводится в инфолог.
попробовал доставать значения даты времени по кускам выводится так (u - переменная с типом utcdateTime, в которую начитали результат):

dateTimeUtil::date(u) = CL.01.2016
dateTimeUtil::year(u) = 2016
dateTimeUtil::month(u) = 1
dateTimeUtil::day(u) = 32
dateTimeUtil::time(u) = 72013
dateTimeUtil::hour(u) = 20
dateTimeUtil::minute(u) = 0
dateTimeUtil::second(u) = 13
dateTimeUtil::toStr(u) = 2016-01-256T20:00:13

Налицо какое то переполнение. Самое интересно что значения dateTimeUtil::toStr(u) и dateTimeUtil::day(u) друг с другом не согласуются.

Встречался ли кто-нибудь с таким эффектом ? Из-за чего это бывает ? Как лечить ?

P.S.
Для себя обошел это глюк за счет того что выбирал не само поле FieldName, а строковую функцию от него
X++:
convert(char(19),[FieldName], 20) AS FieldName
которую потом можно в X++ разобрать и превратить уже в utcDateTime

P.P.S.
Глюк воспроизводится на ax2009 билды
5.0.1600.3090
5.0.1500.4570 (RU7)

На 2012 R3 не воспроизводится (аосы стоят на одном сервере Win2012 и используют один и тот же ODBC датасорс)

P.P.P.S.
Интересно, что ResultSet не позволяет дважды подряд вызвать метод получения значения.
Например однократный вызов
X++:
ResultSet.getDateTime();
не приводит к ошибке, а если дважды подряд вызвать
X++:
ResultSet.getDateTime();
ResultSet.getDateTime();
то валится по ошибке на 2-м вызове (и в 2012-й и в 2009-й)

Давно его используем, но ни разу до сих пор не натыкались

Последний раз редактировалось Logger; 21.01.2016 в 17:58.