Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Редактирование времени в DBGrid [D7, MSSQL]


Страницы:   1 2

Katya ©   (2006-10-26 22:02:00) 

Здравствуйте! Подскажите, как решить следующую проблему: в DBGrid имеется поле для ввода времени в формате 00:00. При этом для соответствующего поля в DataSet-е задана маска ввода. Пытаюсь изменить значение в ячейке, она переходит в состояние редактирования, но при этом обнуляет минуты, а часы остаются без изменений, т.е. если было значение '08:30', то при редактировании отобразится '08:00'. Самое печальное: для исходного значения '00:00' отображается '99:__'. Может это как-то связано с маской ввода? Кто-нибудь знает, как это исправить? Заранее огромное спасибо.


evvcom   (2006-11-03 10:05:00) [1]

> [17] Katya   (31.10.06 21:36)
> Реально хранится в базе в виде '1899-12-30 00:00:00.000'.

Нет! В базе хранится во внутреннем формате, подозреваю, что это число в формате с плавающей запятой. Но никак не char(23). То что ты видишь в чаре, это формат представления, и он может быть изменен, а внутреннее представление даты постоянно.

> [19] Petr V. Abramov ©   (31.10.06 23:13)
> а если мышки нету

А Alt+Down на что?

> [26] Sam Stone ©   (01.11.06 19:50)

Глючить они не глючат в паре. У TdxDBGridDateColumn есть свойство SaveTime, но подозреваю, что эти Column-ы ведут себя аналогично парам TdxDBDateEdit/TdxDBTimeEdit и TdxInspectorDBDateRow/TdxInspectorDBTimeRow, т.е. отображают и дату и время, а редактируют только свою часть. Мне пришлось писать наследников от указанных компонент, чтобы отображалась тоже только своя часть, а то как-то некузяво было видеть 2 поля с одинаковой инфой ради того, чтобы можно было редактировать дату и время отдельно.


Petr V. Abramov   (2006-11-02 00:53:00) [2]

> MsGuns ©   (01.11.06 23:46) [27]
 все нормально, мотает на ус. авось, вспомнит, что тут трепалогили
> Katya   (01.11.06 19:41) [25]
 пардон, что в общественном месте о ВАс в третьем  лице


MsGuns   (2006-11-01 23:46:00) [3]

За почти неделю, что прошла с момента задание вопроса, можно было решить эту "мудреную" задачку сомями споробами, вплоть до написания собственной "гридной" компоненты.
Катя, пофлудить решили ?


Sam Stone   (2006-11-01 19:50:00) [4]

Меня всегда интересовало, кто же такой мудрый учит вводить дату/время через эдит/максэдит... проще всего, на мой взгляд, взять DevExpress компоненты, TdxDBGrid. У него есть столбец TdxDBGridTimeColumn. Поскольку TdxDBGridDateColumn работает замечательно, то и столбец для времени глючить не должен (не работал с ним).


Katya   (2006-11-01 19:41:00) [5]


> Ну уж если есть EhLib, то использовав DBGridEh, можно увидеть,
>  что для датных полей набора данных автоматически предлагается
> вводить даты посредством календаря при нажатии кнопки "\/"
> в ячеки грида, соответствующей датному полю. При этом можно
> и запретить прямой ввод, и организовать проверку прямого
> ввода, и т.д. и т.п.

Посредством календаря можно вводить дату, а я ввожу время! В том то и дело, что дата мне не нужна!


Anatoly Podgoretsky   (2006-11-01 10:24:00) [6]

> Johnmen  (01.11.2006 09:07:23)  [23]

Попрошу не переходить на персоналии, я к нему отношения не имею.


Johnmen   (2006-11-01 09:07:00) [7]


> Германн ©   (01.11.06 01:58) [22]


Не только даун, но и ап....:)


Германн   (2006-11-01 01:58:00) [8]


> MsGuns ©   (31.10.06 23:46) [20]
>
> Johnmen ©   (01.11.06 00:17) [21]
>

Эт точно. О сколько мне открылось, когда я впервые узнал об Alt+ArrowDown :-)


Johnmen   (2006-11-01 00:17:00) [9]


> Petr V. Abramov ©   (31.10.06 23:13) [19]
> а если мышки нету?


Ну клава-то есть наверняка...


MsGuns   (2006-10-31 23:46:00) [10]

>Petr V. Abramov ©   (31.10.06 23:13) [19]
>а если мышки нету? это не шутка, иногда люди строчат одной правой по кейпаду

Для этого существует Tab и ShortCut


Petr V. Abramov   (2006-10-31 23:13:00) [11]

> Johnmen ©   (31.10.06 22:08) [18]
а если мышки нету? это не шутка, иногда люди строчат одной правой по кейпаду


Johnmen   (2006-10-31 22:08:00) [12]


> Katya   (31.10.06 21:36) [17]


Ну уж если есть EhLib, то использовав DBGridEh, можно увидеть, что для датных полей набора данных автоматически предлагается вводить даты посредством календаря при нажатии кнопки "\/" в ячеки грида, соответствующей датному полю. При этом можно и запретить прямой ввод, и организовать проверку прямого ввода, и т.д. и т.п.


Katya   (2006-10-31 21:36:00) [13]


> хранится как угодно, а отображается - как в настройках винды
> сказано. Кстати, отсюда и глюк м.б. - StrToDateTime исходит
> не из того формата

Похоже на то. Реально хранится в базе в виде '1899-12-30 00:00:00.000'. При маске '!90:00;1;_' (с подавлением начальных пробелов) отображается '99:00', а если маска '90:00;1;_' (подавление конечных пробелов), то '30:00'. Причем этот глюк появляется при попытке редактирования значения в ячейке грида, а изначально отображает все данные как надо.

Хотя проблему уже решила (точнее обошла) следующим образом: создаю невидимый компонент DBDateTimeEditEh, в котором отображаю значение нужного поля активной записи и отрисовываю его при получении фокуса нужной ячейкой грида.


> да еще и с помощью маски - такой интерфейс просто крайне
> неудобен для пользователя

Не могу сказать, что интерфейс стал намного удобнее, чем при использовании маски.


msguns   (2006-10-31 14:16:00) [14]

>Katya   (30.10.06 18:10) [13]
>Да, кстати, кто-нибудь знает, как временно "отключить" грид от базы, сохранив при этом данные. Идея следующая: закачать данные, позволить их отредактировать, а затем переслать сразу все изменения.

TClientDataSet


Petr V.Abramov   (2006-10-30 20:58:00) [15]

> Формат отображения в гриде никак не связан с форматом хранения в MS SQL.
 вот именно. хранится как угодно, а отображается - как в настройках винды сказано. Кстати, отсюда и глюк м.б. - StrToDateTime исходит не из того формата


Shaman_   (2006-10-30 18:51:00) [16]

ApplyUpdates + F1


Katya   (2006-10-30 18:10:00) [17]

Да, кстати, кто-нибудь знает, как временно "отключить" грид от базы, сохранив при этом данные. Идея следующая: закачать данные, позволить их отредактировать, а затем переслать сразу все изменения.


Katya   (2006-10-30 18:02:00) [18]


> а на какой-нить машине short(long)dateformat будет другой
> стоять, и гвакнется программа...

Не согласна. Формат отображения в гриде никак не связан с форматом хранения в MS SQL. При "прямом" вводе запросы то нигде не прописываются и формат не задается. К тому же, MS SQL поддерживает большое кол-во форматов.


Petr V.Abramov   (2006-10-29 02:54:00) [19]

а на какой-нить машине short(long)dateformat будет другой стоять, и гвакнется программа...
текстовое поле надо давать редактировать, а там и проблем меньше будет (надеюсь :)


Германн   (2006-10-29 02:49:00) [20]


> Ketmar ©   (29.10.06 02:17) [9]
>
> >[8] Германн(c) 29-Oct-2006, 02:15
> >И это совет для "новичков"?
> а мы, между прочим, в "базах". %-)
>

Виноват. Увы :-(

Смутил Johnmen ©   (29.10.06 02:02) [7]
> MsGuns ©   (29.10.06 01:37) [6]
> Жэка, иди ты..
> ;))
Не уйду! Не позволю развращать новичков! :)))

Наверно, я зря сюда влез, поскольку очень слаб в вопросах по базам данных.
Но в некоем моем случае, пользователи действительно предпочли "прямой ввоод данных"  через DBGrid.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо