Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2014, 21:42   #1
0parol0lorap0
Пользователь
 
Регистрация: 05.10.2013
Сообщений: 13
Вопрос Задание формата времени в DBGrid.

У меня в таблице есть поле, с типом данных дата\время.

В Access'e установлен формат "hh:nn", чтобы отображалось только время, например 21:12. А в DBGrid'e данные отображаются полным форматом т.е. 30.12.1899 21: 12: 00. Мне нужно, чтобы данные в DBGrid'e имели именно такой формат "21:12".

Нашел причину - Стандартный TColumn такого свойства не имеет.

Что сумел найти: Класс TField способен провернуть это дело, через потомка TDateTimeField (Значения даты и времени), а именно TDateTimeField(Название_колонки).Di splayFormat='hh:nn';

Но как все, ЭТО соединить, не знаю ?
P.S. Вот исходник программы которую нужно довести до ума...
Вложения
Тип файла: rar TimeVDBGride.rar (332.4 Кб, 23 просмотров)
0parol0lorap0 вне форума Ответить с цитированием
Старый 07.01.2014, 22:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Так, у тебя есть на DataModule2 компонент ADOTable1.
Выставь ему Active:=true в дизайне, потом раскрой свойство Fields, и нажми на кнопку получения списка полей из открытого набора. Найди в полученном списке нужное поле - у него в свойствах в инспекторе объектов будет DisplayFormat.
Там и поставишь нужное.
Короче пусть в дизайне список полей составится сразу, а не динамически.
Либо же (не проверял) в динамике после открытия:
Код:
TDateTimeField(ADOTable.FieldsByName(Поле)).DisplayFormat:='hh:nn';
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.01.2014, 23:44   #3
0parol0lorap0
Пользователь
 
Регистрация: 05.10.2013
Сообщений: 13
По умолчанию

Stilet, Спасибо, ВСЕ нашел, но есть маленькая проблема, а именно: При редактировании поля появляется опять полный формат... Я сделал "Маску" в свойствах и уж было решил что все получилось, а нет... он по маске меняет минуты т.е. в таблице 15:23, а при попытке отредактировать появляется 15:00 как мне кажется Я не правильно задаю тип маски или Я что-то сделал не так ?
Изображения
Тип файла: jpg 1.jpg (18.4 Кб, 372 просмотров)
Тип файла: jpg 3.jpg (58.3 Кб, 363 просмотров)
Тип файла: jpg 2.jpg (17.6 Кб, 363 просмотров)
0parol0lorap0 вне форума Ответить с цитированием
Старый 08.01.2014, 01:18   #4
0parol0lorap0
Пользователь
 
Регистрация: 05.10.2013
Сообщений: 13
По умолчанию

По поводу маски нашел вот что:

Маска состоит из разделенных символом трех полей:
1) первое поле является собственно маской;

2) второе поле— это символ, определяющий, считаются ли литеральные символы частью данных. По умолчанию используется 1, и литеральные символы маски являются частью не только значения, редактируемого в визуальном компоненте, но и значения, содержащегося в поле. Если вместо 1 установить символ о, то литеральные символы маски по-прежнему будут отображаться при редактировании значения, однако в поле не сохраняются. Литеральные символы удобно применять в качестве разделителей, например, при вводе телефонных номеров;

3) третье поле содержит символ, используемый для указания незаполненных символов во вводимом тексте, по умолчанию это символ подчеркивания.

Если второе и/или третье поля не определены, то для них действуют значения по умолчанию.

В маске могут использоваться следующие специальные символы:
! — в тексте подавляются начальные пробелы; если символ ! отсутствует, то подавляются конечные пробелы;
>— символы, следующие за этим символом, до появления символа < переводятся в верхний регистр;
<— символы, следующие за этим символом, до появления символа > переводятся в нижний регистр;
<> — проверка регистра символов не производится;
\ — символ, следующий за этим символом, является литеральным;
L — в позиции должен быть введен алфавитный символ;
l — (строчная латинская буква l)— в позиции может быть введен алфавитный символ;
A— в позиции должен быть введен алфавитно-цифровой символ;
а — в позиции может быть введен алфавитно-цифровой символ;
C — в позиции должен быть введен символ;
с — в позиции может быть введен символ;
0 — в позиции должен быть введен цифровой символ;
9 — в позиции может быть введен цифровой символ;
# — в позиции может быть введен цифровой символ или знаки + и — ;
:— используется для разделения часов, минут и секунд в показаниях времени;
/ — используется для разделения дней, месяцев и лет в датах;
; — разделяет поля маски;
_ — оставляет в окне редактирования пустое пространство, являющееся автоматически пропускаемым разделителем, в которое нельзя ввести информацию.

Примеры масок:
!99/99/00; 1;_ — для даты;
!000−00−00; 1;_ — для семизначного телефонного номера, разделитель «-» является частью редактируемого и запоминаемого значения;
!000−00−00, −0;_—для семизначного телефонного номера, разделитель «-» является частью только редактируемого значения;
!90:00; 1;_ — для времени;
1_1_1_1_1_1_;1;_— для слова длиной в шесть букв максимум (между буквами отображаются пробелы).

Для составления маски можно использовать редактор шаблонов (Input Mask Editor). Редактор шаблонов вызывается двойным щелчком мыши в поле значения свойства EditMask или командой Input Mask Editor контекстного меню.

Маска вводится в поле Input Mask, ее также можно выбрать из образцов в поле Sample Masks и затем изменить. Флажок Save Literal Characters управляет включением в маску литеральных символов, а поле Character for Blanks содержит символ, используемый для указания незаполненных позиций во входной строке. Поле Test Input позволяет проверить функционирование подготовленной маски. Маску также можно загрузить из файла с расширением dem, который выбирается в окне Open Mask File, открываемом нажатием кнопки Masks.

Подготовить маску можно и самому, но это более сложно. Удобно, воспользовавшись редактором маски, выбрать наиболее близкую к требуемой маску, а затем уже откорректировать ее вручную.



P.S. Думаю что дело не в маске так как результат все тот же, при редактировании часы остаются, а минуты обнуляются...

Последний раз редактировалось 0parol0lorap0; 08.01.2014 в 01:21.
0parol0lorap0 вне форума Ответить с цитированием
Старый 09.01.2014, 19:05   #5
0parol0lorap0
Пользователь
 
Регистрация: 05.10.2013
Сообщений: 13
По умолчанию

Ну что, у кого-нибудь есть идеи почему при редактировании часы остаются, а минуты обнуляются ? Я пока ничего ни нашел.
0parol0lorap0 вне форума Ответить с цитированием
Старый 10.01.2014, 09:53   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
По поводу маски нашел вот что:
.........
2) второе поле— это символ, определяющий, считаются ли литеральные символы частью данных.
Цитата:
Я пока ничего ни нашел.
при вводе были использованы разделители(литералы), которые вызвали остановку перевода в результате получили 00

Цитата:
!000−00−00; 1;_ — для семизначного телефонного номера, разделитель «-» является частью редактируемого и запоминаемого значения;
!000−00−00, −0;_—для семизначного телефонного номера, разделитель «-» является частью только редактируемого значения;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 10.01.2014, 16:05   #7
0parol0lorap0
Пользователь
 
Регистрация: 05.10.2013
Сообщений: 13
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
при вводе были использованы разделители(литералы), которые вызвали остановку перевода в результате получили 00
Ага, понятно - мой косяк...
Ноооо... у меня поле в БД хранит время ПРИЧЕМ в формате "hh:mm" т.е. delphi предлагает маску для времени: " !90:00; 1;_ " она не подходит... ((
Например в таблиц: 20:30
Такая " !90:00; -0;_ " возвращает " 20:00; -_ "
Такая " !90:00;0;_ " возвращает "30.12.1899 20:30::00"
Такая " !90:00:00;_ " возвращает " 20:30:00 " -- Но мне секунды НЕ нужны!!!
Такая " !90:00:;_ " возвращает "20:30:" -- Удалить двоеточие и сохранить его в БД нельзя.
И так вывод: Почему происходит обнуление минут, Я понял. А вот как задать маску под формат "hh:mm", Я пока не знаю.
0parol0lorap0 вне форума Ответить с цитированием
Старый 25.01.2014, 08:07   #8
Tolin
Новичок
Джуниор
 
Регистрация: 03.02.2012
Сообщений: 1
По умолчанию

Цитата:
Сообщение от 0parol0lorap0 Посмотреть сообщение
Ага, понятно - мой косяк...
Ноооо... у меня поле в БД хранит время ПРИЧЕМ в формате "hh:mm" т.е. delphi предлагает маску для времени: " !90:00; 1;_ " она не подходит... ((
Например в таблиц: 20:30
Такая " !90:00; -0;_ " возвращает " 20:00; -_ "
Такая " !90:00;0;_ " возвращает "30.12.1899 20:30::00"
Такая " !90:00:00;_ " возвращает " 20:30:00 " -- Но мне секунды НЕ нужны!!!
Такая " !90:00:;_ " возвращает "20:30:" -- Удалить двоеточие и сохранить его в БД нельзя.
И так вывод: Почему происходит обнуление минут, Я понял. А вот как задать маску под формат "hh:mm", Я пока не знаю.
В маске ставиш !90:00;1;_ (только без пробелов как у тебя " !90:00; 1;_ ")
и добавляеш в таблицу
FieldByName('Time').AsString := DateMask.Text
Tolin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сумма времени из столбцов DBGrid ul_mrAlex Общие вопросы Delphi 3 09.04.2013 19:01
Из DBGrid в Excel: проблема формата Пепс C++ Builder 1 14.11.2012 14:14
Создание формата времени!!! Olga_2 Microsoft Office Access 7 14.11.2012 01:01
Вывод текущего времени формата H:M:S:MS, где MS - миллисекунды Gypsy Помощь студентам 5 13.01.2010 18:05