Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];

Вниз

Выбор значения поля в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.038 c
2-1153819232
Провинциал
2006-07-25 13:20
2006.08.13
А "ЗЮКИ" в меню...


2-1153920603
Crazy monkey
2006-07-26 17:30
2006.08.13
Вопрос по Access


2-1153524835
Батыр
2006-07-22 03:33
2006.08.13
Размер папки


8-1137324860
Дмитрий Белькевич
2006-01-15 14:34
2006.08.13
Деинтерлейс


2-1153667913
Tort
2006-07-23 19:18
2006.08.13
Системное время и работа с ним





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский