Проблема с TOraTimeStampField

Обсуждение возникших проблем, предложений и ошибок ODAC компонентов
Закрыто
paulmstr
Сообщения: 3
Зарегистрирован: Пт 06 июл 2012 12:11

Проблема с TOraTimeStampField

Сообщение paulmstr » Ср 25 ноя 2015 14:49

Сервер Оракл 10g 10.2.0.5.0, клиент Оракл 11g 11.2.0
ODAC версии 9.2.7
WIndows 7, Delphi XE Architect
Настройка NLS_LANG клиента RUSSIAN_RUSSIA.CL8MSWIN1251

Объект TOraQuery созданный и настроенный в дизайн-тайме в курсоре имеет поле типа TOraTimeStampField.

При работе с этим полем возникают следующие проблемы:

1. При получении значения поля в виде строки (метод TOraTimeStamp.AsString) в результирующей строке разделители полей даты не соответствуют локалу, например 17/04/2015 09:15:34,055000, хотя ожидается 17.04.2015 09:15:34,055000

2. При получении значения поля в виде даты (метод TOraTimeStamp.AsDateTime) в результирующем значении типа TDateTime миллисекунды обрезаются, хотя тип TDateTime поддерживает миллисекунды. Например, получается 17.04.2015 09:15:34,000, хотя ожидается 17.04.2015 09:15:34,055.

Пожалуйста подскажите, каким образом можно побороть указанные проблемы?

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: Проблема с TOraTimeStampField

Сообщение Alexp » Чт 26 ноя 2015 10:35

Добрый день,

Формат отображения данных в Delphi зависит от региональных настроек самой системы. Чтобы поменять формат Вам достаточно изменить record TFormatSettings. Для отображения миллисекунд
необходимо использовать свойство AsSQLTimeStamp вместо AsDateTime.

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

  FormatSettings.DateSeparator := '.';
  ShowMessage(SQLTimeStampToStr('dd/mm/yyyy HH:mm:ss:ZZZ', TOraTimeStampField(OraQuery1.Fields[0]).AsSQLTimeStamp));

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: Проблема с TOraTimeStampField

Сообщение Alexp » Чт 26 ноя 2015 10:35

Добрый день,

Формат отображения данных в Delphi зависит от региональных настроек самой системы. Чтобы поменять формат Вам достаточно изменить record TFormatSettings. Для отображения миллисекунд
необходимо использовать свойство AsSQLTimeStamp вместо AsDateTime.

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

  FormatSettings.DateSeparator := '.';
  ShowMessage(SQLTimeStampToStr('dd/mm/yyyy HH:mm:ss:ZZZ', TOraTimeStampField(OraQuery1.Fields[0]).AsSQLTimeStamp));

Закрыто