Главная страница
    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.094 c
8-1139930392
denis24
2006-02-14 18:19
2006.08.13
резкость изображения при захвате видео через DSPack


9-1131501075
Сабж.
2005-11-09 04:51
2006.08.13
Как найти художника для игры?


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


15-1152850801
Александр Иванов
2006-07-14 08:20
2006.08.13
Namespace в XML


3-1149855807
Vitus
2006-06-09 16:23
2006.08.13
работа с Ole объектами





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский