![]() |
|
|
![]()
|
|
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 1 Всего: 108 |
задача заключается в следующем:
есть поле парадокс БД типа DateTime, но отображать пользователю содержимое необходимо в часах. Вопрос : как это можно реализовать? Заранее спасибо! -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 2 Всего: 64 |
При выборке данных использовать метод AsTime
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 1 Всего: 108 |
а можно по подробнее?
-------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| bas |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 446 Регистрация: 14.8.2002 Где: Молдова, Кишинев Репутация: 1 Всего: 2 |
Где отображать? |
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 1 Всего: 108 |
в таблице типа DBGrid...
-------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
Так тебе нужно от времени часы отделить?
|
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 1 Всего: 108 |
отделить не проблема...
вопрос как отобразить....например пользователь задал '224:20:45' в формате Tdatetime:Double будет ~ 9,354...(целое дни начиная от 31.12.1899, дробная часы от 0:0:0 до 24:00:00), т.е. отображаться в этом поле цифра будет '8.1.1900 8:20:45',в том и вопрос как сделать так чтобы поле отображала '240:20:45', т.е. подменить отображаемые данные на переведённые в удобочитаемый вид. -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
Честно говоря, я выпил маловато, что бы с этим разобраться
Но насколько я понял, ты хочешь вместо 224:20:45 вывести 240:20:45? Если так, то используй вычисляемые поля, в которых будет твой алгоритм чудесно превращающий 224:20:45 в 240:20:45 |
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 1 Всего: 108 |
нет...попробую объяснить сначала.... у меня есть поле типа DateTime, но туда записывается не дата и время, а промежуток времени. Пользователь задаёт этот промежуток в формате [HH]:MM:SS, т.е. часы:минуты:секунды, количество часов может превышать 24 часа(т.е. больше суток). Для записи в БД я соответственно это привожу к типу TDateTime. Формат этого типа жанных в делфи подразумевает, как я выше писал: целое дни начиная от 31.12.1899 (при целой части равной 0), дробная часы от 0:0:0:0 до 24:00:00:00. следовательно в поле БД запишется вместо 224:20:45 приблизительно 9,354... Но тип поля стоит DateTime, поэтому если посмотреть содержимое поля, то мы увидим: 8.1.1900 8:20:45. что не является удобочитаемым (долго придётся пользователю объяснять как расшифровать эту запись -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| YurikGL |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 5.7.2005 Где: Уфа Репутация: нет Всего: 2 |
Если я не ошибаюсь, тип TTime принципиально не позволит отобразить 222 часов т.к. у него ограничение в 24 часа. Самый простой способ, ИМХО, хранить отдельно три целых поля для часов, минут и секунд. --------------------
|
|||
|
||||
| offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
я понял
если я не понял, то напиши, что ты хочешь ввести и что нужно отобразить. если я правильно понял, то сделай это поле просто текстовым или если не хочешь переделывать, то создай вычисляемое поле, которое будет по 8.1.1900 8:20:45 собирать его обратно в 224:20:45 (вычисляемое поле на структуру БД не влияет, т.ч. ни какой реорганизации) Это сообщение отредактировал(а) kirilllius - 6.12.2005, 00:30 |
|||
|
||||
| YurikGL |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 5.7.2005 Где: Уфа Репутация: нет Всего: 2 |
Ой... не увидел.... Ну это.... DateTime, насколько я помню, является Double.... не помню сколько там байт, но можно извратиться и первый байт (или два) пользовать для хранения количества часов, второй для минут, третий для секунд... В сущности, там сделано аналогичным образом, только напиханы еще и дни и месяцы и годы...вот и нужно все, что пользуется под часы, дни, месяцы и годы использовать для хранения только часов. Итог: считываем как double разбираем по байтам и выводим на экран.... P.S. Неужели так тяжело реорганизовать базу? --------------------
|
|||
|
||||
| Albinos_x |
|
||||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 1 Всего: 108 |
не ошибаешься, он не может быть больше 1.
угадал... если применять StrToDateTime('224:20:45'), то такую строку он и не переведёт... будет сильно ругаться и выдавать ошибки, поэтому перевод заключается в применении EncodeTime(1,0,0,0)*240+... и так далее... вот и получается 9,354...., что заносится в БД как 8.1.1900 8:20:45, да и в дальнейшем в программе я работаю именно с числом 9,354...., а не со строкой, но в программе предусмотрено редактирование(добавление, удаление, редактирование записей) БД и соответственно я отображаю содержимое БД через DBGrid. В режиме редактирования и удаления текущая запись отображается в отдельном компаненте, но перед тем как туда записать, я соответственно пересчитываю в удобочитаемый формат. А вот как сделать чтоб DBGrid (или подобном компаненте) отображалось в удобочитаемом формате... здесь возникла загвоздка... Пока предпологаю сделать дополнительное текстовое поле с записью в удобочитаемом формате. Но решил зайти сюда спросить, может как лучше сделать... -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
||||
|
|||||
| offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
ну так создай вычисляемое поле и делов то. вычисляемое поле на структуру БД не влияет, т.ч. ни какой реорганизации
|
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 1 Всего: 108 |
спасибо за совет... сделаю наверно отдельное текстовое поле, так наверно проще будет...
-------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |