Поиск:

Ответ в темуСоздание новой темы Создание опроса
> показать преобразованные данные 
:(
    Опции темы
Albinos_x
Дата 4.12.2005, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 1
Всего: 108



задача заключается в следующем:
есть поле парадокс БД типа DateTime, но отображать пользователю содержимое необходимо в часах.
Вопрос : как это можно реализовать?

Заранее спасибо! smile


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
<Spawn>
Дата 5.12.2005, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 2
Всего: 64



При выборке данных использовать метод AsTime


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Albinos_x
Дата 5.12.2005, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 1
Всего: 108



а можно по подробнее?


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
bas
Дата 5.12.2005, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

Репутация: 1
Всего: 2



Цитата(Albinos_x @ 4.12.2005, 22:47)
но отображать пользователю содержимое необходимо в часах.

Где отображать?
PM MAIL   Вверх
Albinos_x
Дата 5.12.2005, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 1
Всего: 108



в таблице типа DBGrid...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
offline
Дата 5.12.2005, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Так тебе нужно от времени часы отделить?
PM MAIL   Вверх
Albinos_x
Дата 5.12.2005, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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', т.е. подменить отображаемые данные на переведённые в удобочитаемый вид.


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
offline
Дата 5.12.2005, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Честно говоря, я выпил маловато, что бы с этим разобраться smile

Но насколько я понял, ты хочешь вместо 224:20:45 вывести 240:20:45?
Если так, то используй вычисляемые поля, в которых будет твой алгоритм чудесно превращающий 224:20:45 в 240:20:45

PM MAIL   Вверх
Albinos_x
Дата 5.12.2005, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 1
Всего: 108



Цитата(kirilllius @ 5.12.2005, 22:50)
Но насколько я понял, ты хочешь вместо 224:20:45 вывести 240:20:45?

нет...попробую объяснить сначала.... у меня есть поле типа 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. что не является удобочитаемым (долго придётся пользователю объяснять как расшифровать эту запись smile ). До этого применял DBGrid, для отображения данных, через Table. Но он отображает, так как есть в БД. Что мне соответственно не подходит. Вопрос заключается в том, как можно сделать через тот же или другие компаненты работы с БД отображение этого промежутка времени в удобочитаемом виде (типа 224:20:45). Реорганизацию БД не предлагать, т.к. программа основной функционал выполняет безотказно.


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
YurikGL
Дата 6.12.2005, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 5.7.2005
Где: Уфа

Репутация: нет
Всего: 2



Цитата
Albinos_x (Online)


Если я не ошибаюсь, тип TTime принципиально не позволит отобразить 222 часов т.к. у него ограничение в 24 часа. Самый простой способ, ИМХО, хранить отдельно три целых поля для часов, минут и секунд.

--------------------
 
PM MAIL WWW ICQ   Вверх
offline
Дата 6.12.2005, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



я понял smile т.е. когда ты вводишь 224:20:45 то база у тебя ругается, что такого времени нет или сама переводит в 8.1.1900 8:20:45, а тебе нужно в 224:20:45 оставить, так или я опять не понял smile
если я не понял, то напиши, что ты хочешь ввести и что нужно отобразить.
если я правильно понял, то сделай это поле просто текстовым или если не хочешь переделывать, то создай вычисляемое поле, которое будет по 8.1.1900 8:20:45 собирать его обратно в 224:20:45 (вычисляемое поле на структуру БД не влияет, т.ч. ни какой реорганизации)

Это сообщение отредактировал(а) kirilllius - 6.12.2005, 00:30
PM MAIL   Вверх
YurikGL
Дата 6.12.2005, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 5.7.2005
Где: Уфа

Репутация: нет
Всего: 2



Цитата
Реорганизацию БД не предлагать, т.к. программа основной функционал выполняет безотказно.

Ой... не увидел.... smile

Ну это.... DateTime, насколько я помню, является Double.... не помню сколько там байт, но можно извратиться и первый байт (или два) пользовать для хранения количества часов, второй для минут, третий для секунд...
В сущности, там сделано аналогичным образом, только напиханы еще и дни и месяцы и годы...вот и нужно все, что пользуется под часы, дни, месяцы и годы использовать для хранения только часов.
Итог: считываем как double разбираем по байтам и выводим на экран....

P.S. Неужели так тяжело реорганизовать базу?
--------------------
 
PM MAIL WWW ICQ   Вверх
Albinos_x
Дата 6.12.2005, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 1
Всего: 108



Цитата(YurikGL @ 6.12.2005, 00:07)
Если я не ошибаюсь, тип TTime

не ошибаешься, он не может быть больше 1.
Цитата(kirilllius @ 6.12.2005, 00:09)
я понял  т.е. когда ты вводишь 224:20:45 то база у тебя ругается, что такого времени нет или сама переводит в 8.1.1900 8:20:45, а тебе нужно в 224:20:45 оставить

угадал...
если применять StrToDateTime('224:20:45'), то такую строку он и не переведёт... будет сильно ругаться и выдавать ошибки, поэтому перевод заключается в применении EncodeTime(1,0,0,0)*240+... и так далее... вот и получается 9,354...., что заносится в БД как 8.1.1900 8:20:45, да и в дальнейшем в программе я работаю именно с числом 9,354...., а не со строкой, но в программе предусмотрено редактирование(добавление, удаление, редактирование записей) БД и соответственно я отображаю содержимое БД через DBGrid. В режиме редактирования и удаления текущая запись отображается в отдельном компаненте, но перед тем как туда записать, я соответственно пересчитываю в удобочитаемый формат. А вот как сделать чтоб DBGrid (или подобном компаненте) отображалось в удобочитаемом формате... здесь возникла загвоздка... Пока предпологаю сделать дополнительное текстовое поле с записью в удобочитаемом формате. Но решил зайти сюда спросить, может как лучше сделать...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
offline
Дата 6.12.2005, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



ну так создай вычисляемое поле и делов то. вычисляемое поле на структуру БД не влияет, т.ч. ни какой реорганизации
PM MAIL   Вверх
Albinos_x
Дата 6.12.2005, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 1
Всего: 108



спасибо за совет... сделаю наверно отдельное текстовое поле, так наверно проще будет...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0690 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.