![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Редактирование времени в DBGrid [D7, MSSQL]
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.