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

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

Выбор значения поля в DBGrid из списка и сопоставление


Delphi basic ©   (2006-07-24 14:15:00) 

Есть таблица БД, в которой месяц хранится как число (1..12).
Можно ли в DBGrid выбирать значение поля из списка ('январь'..'декабрь') и сопоставлять его с месяцем?


Delphi basic   (2006-07-24 15:45:00) [1]


> Сергей М. ©   (24.07.06 15:26) [18]

Так я в гриде ограничил список PickList'ом, так что если юзер выберет (введет вручную) что-то не оттуда, то полю ничего и не присвоится.

"Эта принцесса не стоит ломки копий, Алонсо. Пойдем-ка лучше покормим лошадей".

Произведение малоизвестного автора.


Германн   (2006-07-24 15:36:00) [2]


> Смотря в какой момент времени будет активирован этот обработчик.

Не сомневайся. Он вызовется именно тогда, когда нужно.

> Но, согласись, глупо и неразумно позволять юзеру совершать
> ошибки ввода, чтобы потом их героически программно преодолевать.
>  На то есть выбор из списка, привязанного именно к полю
>  НД (см. [5])
Согласен, но тогда уж скорей надо было упоминать не Lookup-поля, а PickList колонки. Имхо


Сергей М.   (2006-07-24 15:26:00) [3]

Может и увидит. Согласен. Смотря в какой момент времени будет активирован этот обработчик. Но, согласись, глупо и неразумно позволять юзеру совершать ошибки ввода, чтобы потом их героически программно преодолевать. На то есть выбор из списка, привязанного именно к полю НД (см. [5])


Delphi basic   (2006-07-24 15:22:00) [4]


> Сергей М. ©   (24.07.06 15:13) [15]


В OnGetText датасета выполняется преобразование в удобочитаемый вид:

procedure TDataModuleMain.pFIBDataSetCardQuotaPERIOD_MONTHGetText(
 Sender: TField; var Text: String; DisplayText: Boolean);
begin
 Text := DecodeMonth(pFIBDataSetCardQuota.FieldByName('period_month').AsInteger)
end;


Германн   (2006-07-24 15:17:00) [5]


> Это тебе сам обрадованный юзер сказал, который открыл НД
> и увидел (еще ДО того как ему потребовалось редактирование
> этого НД) в гриде в соотв.колонке вместо привычных "январь.
> .декабрь" цифирь от 1 до 12 ?
>


А тебе кто это сказал? Юзер увидит как раз  "привычные январь и т.п."


Сергей М.   (2006-07-24 15:13:00) [6]


> А что с юзером?



> Это как раз то, что ему нужно


Это тебе сам обрадованный юзер сказал, который открыл НД и увидел (еще ДО того как ему потребовалось редактирование этого НД) в гриде в соотв.колонке вместо привычных "январь..декабрь" цифирь от 1 до 12 ?


Германн   (2006-07-24 15:12:00) [7]

2 Сергей М. ©
А чем OnGetText, OnSetText испортят жизнь юзеру?


Delphi basic   (2006-07-24 15:09:00) [8]


> А каково юзеру после этого ?

А что с юзером?
Это как раз то, что ему нужно: вместо вспоминания номера месяца и ввода числа он просто выбирает месяц из списка.


Сергей М.   (2006-07-24 15:03:00) [9]


> Требуется организовать ввод данных в эту таблицу


Ввод вводу рознь.


> проблему я уже решил с помощью совета


А каково юзеру после этого ?


Delphi basic   (2006-07-24 14:57:00) [10]

Но это так, лирическое отступление, проблему я уже решил с помощью совета [6]


Delphi basic   (2006-07-24 14:55:00) [11]


> Сергей М. ©   (24.07.06 14:44) [9]
>
> > Delphi basic ©   (24.07.06 14:42) [8]
>
>
> Значит ты в корне неверно поставил вопрос.


Ну хорошо, вот более подробная постановка:

Есть таблица, в которой хранятся некие значения по периодам. Поля таблицы:
1) УИ - уникальный ид-р
2) год - число
3) месяц - число (1..12)
4), 5) .... - значения на период 2) + 3)

Требуется организовать ввод данных в эту таблицу.
Требования к вводу данных:
- ввод непосредственно в таблице (визуальном компоненте)
- месяца должны отображаться в их строковых эквивалентах, дабы не перегружать пользователя интерпретацией цифр как месяцев.

Вроде все :)


Сергей М.   (2006-07-24 14:44:00) [12]


> Delphi basic ©   (24.07.06 14:42) [8]


Значит ты в корне неверно поставил вопрос.


Delphi basic   (2006-07-24 14:42:00) [13]


> Германн ©   (24.07.06 14:36) [6]
> OnGetText, OnSetText тоже могут помочь ОРД.

Спасибо, то что надо!


Сергей М.   (2006-07-24 14:39:00) [14]


> Германн ©   (24.07.06 14:36) [6]


Не помогут они ОРД.
Текстовое значение ячейки DBGrid'а и значение соответствующего поля соответствующей редактируемой записи НД - не одно и то же.


Германн   (2006-07-24 14:36:00) [15]

OnGetText, OnSetText тоже могут помочь ОРД.


Desdechado   (2006-07-24 14:31:00) [16]

можно использовать lookup-поля


Сергей М.   (2006-07-24 14:23:00) [17]

Грид не может ругаться на это.
Ругается DataSet.
У DataSet есть событие OnBeforePost, в его обработчике ты вправе преобразовать "январь" в единицу.


Delphi basic   (2006-07-24 14:21:00) [18]

Данные редактируются прямо гриде, и он ругается на попытку присвоения числовому полю строкового значения.


Сергей М.   (2006-07-24 14:18:00) [19]

Ну так и пиши в БД не сам элемент списка, а его индексв списке ! В чем проблема-то ?


Delphi basic   (2006-07-24 14:16:00) [20]

Проблема тут в том, что эл-ты списка-строковые значения, а в БД хранится число


Наверх

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