DateTime в поле Comp (binary(8))

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
ilshat
Местный житель
Сообщения: 222
Зарегистрирован: 04 июн 2008, 14:35
Откуда: Стерлитамак
Контактная информация:

DateTime в поле Comp (binary(8))

Сообщение ilshat »

В таблице PRKACHVO есть поле DTPROBE тип его сапорт показывает как DateTime. Если смотреть MSSQL мэнеджмент студией там binary(8) т.е. вроде как Comp
Мы не можем понять как в Comp запихать DateTime ? Пишем в эту таблицу "снаружи" (негалактическими средствами).
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Re: DateTime в поле Comp (binary(8))

Сообщение Vik »

Скорее всего так (только предположение по аналогии с типом Date и типом Time):
1 байт (самый младший) : сантисекунды
2 байт : секунды
3 байт : минуты
4 байт : часы
5 байт : день
6 байт : месяц
7-8 байт : год

Для примера код на Java, который преобразует время (тип Time), представленное в виде часов, минут, секунд и сантисекунд в тип integer (не знаю на чем вы пишете, но, думаю, суть будет ясна):

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

public static int toInt(int hour, int minute, int second, int santiSecond)
   {
        return (hour % 24) << 24 | (minute % 60) << 16 | (second % 60) << 8 | (santiSecond % 100);
   }
Скорее всего и DateTime несложно по аналогии преобразовать
ilshat
Местный житель
Сообщения: 222
Зарегистрирован: 04 июн 2008, 14:35
Откуда: Стерлитамак
Контактная информация:

Re: DateTime в поле Comp (binary(8))

Сообщение ilshat »

Спасибо за наводку. Давно не ковырялся в скалярных функциях живущих в БД Галки на MSSQL. Эту датувремя можно конвертнуть функциями ToMsDateTime и обратно ToAtlDateTime.
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Re: DateTime в поле Comp (binary(8))

Сообщение Vik »

Еще встречаются в Галактике такие таблицы, в которых дата хранится в типе Comp в сантисекундах (например, таблица RsvOper). Тогда приходилось делать, например, такое преобразование: dbo.toMsDateTime(dbo.fromSEC100(t$RsvOper.f$cRoleAn1)). Но функция fromSEC100 очень медленно работает, во всяком случае на MsSQL.
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: DateTime в поле Comp (binary(8))

Сообщение savov »

А вот что делать, если не MS SQL сервер, а Pervasive? Пробую извлечь поле dtdoc таблицы rezkontr в Delphi, ничего не получается! Как только не пытался. Использовал компонент ADO (причем даже те, которые здесь в опыте выложили). Не могу ни вернуть поле, ни сделать выборку по нему. Подскажите, что можно сделать?
LaaLaa

Re: DateTime в поле Comp (binary(8))

Сообщение LaaLaa »

Для первасива может попробовать PDAC for RAD Studio 2010 - Design Time Components http://www.pervasivedb.com/psqlv11/Pages/Default.aspx

Сам не пробовал, но может получится.
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: DateTime в поле Comp (binary(8))

Сообщение savov »

Пробовал и PDAC. Поле выводится как bigint (в ADO, PDAC дает ошибку). Пробовал перевести в дату (делил на 1000 (перевод в сек), потом на 60(в минуты), 60 (в часы), 24 (дни)), но получил что-то большую цифру. Может там не в миллисекундах хранится?
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Re: DateTime в поле Comp (binary(8))

Сообщение Vik »

Ну так bigint недолго перевести в дату. Смотрите выше посты. Хранится не в милисекундах.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: DateTime в поле Comp (binary(8))

Сообщение Алексей »

ilshat писал(а):Спасибо за наводку. Давно не ковырялся в скалярных функциях живущих в БД Галки на MSSQL. Эту датувремя можно конвертнуть функциями ToMsDateTime и обратно ToAtlDateTime.
Из vip эти функции доступы? У меня не получилось.
Как в vip считать год дату день из поля такого типа?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: DateTime в поле Comp (binary(8))

Сообщение edward_K »

если у вас сапорт показывает тип DateTime - то без проблем в переменную соотв. типа. Если же как число(longint или comp) , то DateTime(поле). В галактике(и не только) все типы Date|Time|DateTime по сути те же числа, отличаются меж собой упаковкой в биты.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: DateTime в поле Comp (binary(8))

Сообщение Den »

Если я правильно понял вопрос , то так как то :

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

sql select top 100
   CREATEDATETIME
  ,day(CREATEDATETIME)
  ,month(CREATEDATETIME)
  ,year(CREATEDATETIME)
 from katparty
  where CREATEDATETIME<>0
 ;
Ответить