Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.13;
Скачать: CL | DM;

Вниз

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

 
Delphi basic ©   (2006-07-24 14:15) [0]

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


 
Delphi basic ©   (2006-07-24 14:16) [1]

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


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

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


 
Delphi basic ©   (2006-07-24 14:21) [3]

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


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

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


 
Desdechado ©   (2006-07-24 14:31) [5]

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


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

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


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


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


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


 
Delphi basic ©   (2006-07-24 14:42) [8]


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

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


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


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


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


 
Delphi basic ©   (2006-07-24 14:55) [10]


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


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

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

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

Вроде все :)


 
Delphi basic ©   (2006-07-24 14:57) [11]

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


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


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


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


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


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


 
Delphi basic ©   (2006-07-24 15:09) [13]


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

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


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

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


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


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



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


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


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


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


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


 
Delphi basic ©   (2006-07-24 15:22) [17]


> Сергей М. ©   (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:26) [18]

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


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


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

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

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


 
Delphi basic ©   (2006-07-24 15:45) [20]


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

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.08.13;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.059 c
2-1153681417
Rav
2006-07-23 23:03
2006.08.13
TFrame: класс TDATETIMEFIELD не найден


15-1153374659
Ega23
2006-07-20 09:50
2006.08.13
С Днём рождения! 20 июля


6-1143657395
Sysanin
2006-03-29 22:36
2006.08.13
проблемы при передаче картинок по сети


3-1149574047
q-q
2006-06-06 10:07
2006.08.13
Используя ЗАБОЙ, полю присваивается NULL, а хотелось бы НОЛЬ


15-1151124691
IMHO
2006-06-24 08:51
2006.08.13
ЧМ-2006. Турнир прогнозов - 2