| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > показать преобразованные данные |
| Автор: Albinos_x 4.12.2005, 22:47 |
| задача заключается в следующем: есть поле парадокс БД типа DateTime, но отображать пользователю содержимое необходимо в часах. Вопрос : как это можно реализовать? Заранее спасибо! |
| Автор: <Spawn> 5.12.2005, 07:45 |
| При выборке данных использовать метод AsTime |
| Автор: Albinos_x 5.12.2005, 09:07 |
| а можно по подробнее? |
| Автор: bas 5.12.2005, 17:55 | ||
Где отображать? |
| Автор: Albinos_x 5.12.2005, 18:44 |
| в таблице типа DBGrid... |
| Автор: offline 5.12.2005, 19:16 |
| Так тебе нужно от времени часы отделить? |
| Автор: Albinos_x 5.12.2005, 20:41 |
| отделить не проблема... вопрос как отобразить....например пользователь задал '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 5.12.2005, 22:50 |
| Честно говоря, я выпил маловато, что бы с этим разобраться Но насколько я понял, ты хочешь вместо 224:20:45 вывести 240:20:45? Если так, то используй вычисляемые поля, в которых будет твой алгоритм чудесно превращающий 224:20:45 в 240:20:45 |
| Автор: Albinos_x 5.12.2005, 23:42 | ||
нет...попробую объяснить сначала.... у меня есть поле типа 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 6.12.2005, 00:07 | ||
Если я не ошибаюсь, тип TTime принципиально не позволит отобразить 222 часов т.к. у него ограничение в 24 часа. Самый простой способ, ИМХО, хранить отдельно три целых поля для часов, минут и секунд. |
| Автор: offline 6.12.2005, 00:09 |
| я понял если я не понял, то напиши, что ты хочешь ввести и что нужно отобразить. если я правильно понял, то сделай это поле просто текстовым или если не хочешь переделывать, то создай вычисляемое поле, которое будет по 8.1.1900 8:20:45 собирать его обратно в 224:20:45 (вычисляемое поле на структуру БД не влияет, т.ч. ни какой реорганизации) |
| Автор: YurikGL 6.12.2005, 00:17 | ||
Ой... не увидел.... Ну это.... DateTime, насколько я помню, является Double.... не помню сколько там байт, но можно извратиться и первый байт (или два) пользовать для хранения количества часов, второй для минут, третий для секунд... В сущности, там сделано аналогичным образом, только напиханы еще и дни и месяцы и годы...вот и нужно все, что пользуется под часы, дни, месяцы и годы использовать для хранения только часов. Итог: считываем как double разбираем по байтам и выводим на экран.... P.S. Неужели так тяжело реорганизовать базу? |
| Автор: Albinos_x 6.12.2005, 00:28 | ||||
не ошибаешься, он не может быть больше 1.
угадал... если применять StrToDateTime('224:20:45'), то такую строку он и не переведёт... будет сильно ругаться и выдавать ошибки, поэтому перевод заключается в применении EncodeTime(1,0,0,0)*240+... и так далее... вот и получается 9,354...., что заносится в БД как 8.1.1900 8:20:45, да и в дальнейшем в программе я работаю именно с числом 9,354...., а не со строкой, но в программе предусмотрено редактирование(добавление, удаление, редактирование записей) БД и соответственно я отображаю содержимое БД через DBGrid. В режиме редактирования и удаления текущая запись отображается в отдельном компаненте, но перед тем как туда записать, я соответственно пересчитываю в удобочитаемый формат. А вот как сделать чтоб DBGrid (или подобном компаненте) отображалось в удобочитаемом формате... здесь возникла загвоздка... Пока предпологаю сделать дополнительное текстовое поле с записью в удобочитаемом формате. Но решил зайти сюда спросить, может как лучше сделать... |
| Автор: offline 6.12.2005, 00:35 |
| ну так создай вычисляемое поле и делов то. вычисляемое поле на структуру БД не влияет, т.ч. ни какой реорганизации |
| Автор: Albinos_x 6.12.2005, 01:41 |
| спасибо за совет... сделаю наверно отдельное текстовое поле, так наверно проще будет... |