Форум: "Базы";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
Вниз
Ни как не получается вставить долбанный ComboBox в DBGrid Найти похожие ветки
← →
Masha Streltsova (2004-03-07 12:26) [0]HELP помогите пожалуйста!!! Не как не получается вставить ComboBox в DBGrid.
Я пытаюсь вставить DBLookupcombobox и постоянно натыкаюсь на какие-то проблемы, то при скролинге грида DBLookupcombobox не исчезает то чё то ещё если не сложно скиньте исходничек с примерчиком мне на мыло: derliga@mail.ru, а то я повешусь.
← →
JibSkeart © (2004-03-07 12:32) [1]А что не проще ли сделать Lookup поля ?
вы бы задачу описали может все проше чем кажется :)
← →
YurikGl © (2004-03-07 12:45) [2]У каждой колонке в DBGrid есть PickList. Можешь его заполнять на OnShow. Но не забудь предварительно очистить.
← →
YurikGl © (2004-03-07 13:03) [3]Я Вам отправил пример с LookUp полями.
← →
Masha Streltsova (2004-03-07 14:04) [4]Не PickList точно не подходит
Задача такая надо чтобы в ячейке дбгрида был вставлен выпадающий список. Причём при выборе элемента из списка он добавляется к значению в
ячейке.
Т.е. в ячейке было "англ./фр." выбираем из списка "нем." получаем "англ./фр./нем." и ещё мы можем сами вводить символы в ячейку.
Я пробовала с LookUp полями, но я в них не разобралась толком посмотрим пример YurikGl спасибо.
← →
YurikGl © (2004-03-07 14:51) [5]Re [4] Не понял поставленной задачи. Приведи, пожалуйста, пример из реальной системы. PickList и LookUp подходят, например, для выбора улицы в телефонном спрвочнике.
← →
Masha Streltsova (2004-03-07 20:02) [6]например есть страны в них говорят на нескольких языках, а ячейка одна и в неё надо вписать 3 языка "англ./фр./нем." и эти языки надо выбрать из выпадающего списка вначале англ. потом фр. потом нем.
поэтому PickList точно не подходит
← →
Zacho © (2004-03-07 21:53) [7]Не понял. Именно для этого PickList точно подходит. А если значения надо взять из другой таблицы - то lookup поле в наборе данных.
Или возьми TDBGridEh из библиотеки EhLib - у него есть дополнительные возможности.
> Я пытаюсь вставить DBLookupcombobox
Не надо этого делать. Создай lookup поле. Хотя, в некоторых случаях, это очень не хорошо.
← →
YurikGl © (2004-03-07 22:03) [8]В твоем случае, на мой взгляд, нужно создать много столбцов типа boolean по числу языков. Если в столбце (напр. франц) записано true, то в этой стране говорят на францзском языке.
табл Страны
Название:строка
Франц:boolean
Нем:boolean
Англ:boolean
Второй вариант. Если в одной стране говорят не более чем на нескольких (3-4) языках то - создаешь справочник языков. В таблице стран делаешь нужное количество ссылок.
табл Страны табл Языки
Название:строка IdЯзык:целое
IdЯзык1:целое Название языка:строка
IdЯзык2:целое
IdЯзык3:целое
IdЯзык4:целое
Удачи
← →
Petr V. Abramov © (2004-03-07 23:46) [9]YurikGl © (07.03.04 22:03) [8]
И как же потом, зная ID языка, выбрать все страны, в которых на нем говорят? Учитывая, что человек с MSSQL работает, а не с Pidarox?
← →
Masha Streltsova (2004-03-08 12:02) [10]zacho
> Именно для этого PickList точно подходит
а как отследить событие когда мы выбираем значение из PickList, чтобы не поменять значение в ячейке, а добавить?
не YurikGl © [8] эти варианты отпадают потому что там больше 100 языков
← →
YurikGl © (2004-03-08 12:28) [11]re [9] А в MSSQL не работает что-ли
select .... where (IdЯзык1=15 or IdЯзык2=15 or IdЯзык3=15)
выберутся все страны, говорящие на языке с ID=15
re [10] Если максимальное количество языков, на котором могут говорить в одной стране не велико, то тебе подойдет вариант
табл Страны табл Языки
Название:строка IdЯзык:целое
IdЯзык1:целое Название языка:строка
IdЯзык2:целое
IdЯзык3:целое
IdЯзык4:целое
Есть еще один вариант. Реализовать связь многие-ко многим
табл Страны табл Языки табл Связи
IdСтрана:целое IdЯзык:целое IdСвязи:целое
Название:строка Название языка:строка IdЯзык:целое
idСтрана:целое
Если в стране 5 говорят на языке 6 то в таблице Связи должна быть запись idЯзык=6, idСтрана=5.
но к подобным конструкциям тяжело составлять запросы.
← →
Petr V. Abramov © (2004-03-08 13:48) [12]> YurikGl © (08.03.04 12:28) [11]
> Есть еще один вариант. Реализовать связь многие-ко многим
Вот это уже на базу похоже
> но к подобным конструкциям тяжело составлять запросы.
К "сосискам" типа [8] к конечном итоге тяжелее
> select .... where (IdЯзык1=15 or IdЯзык2=15 or IdЯзык3=15)
Уже многословно и будет долго выполняться. И это простейший зопрос. Т.е. только самое начало геморроя.
← →
Petr V. Abramov © (2004-03-08 13:50) [13]пардон, простейший запрос, конечно :)
← →
YurikGl © (2004-03-08 14:14) [14]Пардон в [11]сдвинулось.
табл Страны
IdСтрана:целое
Название:строка
табл Языки
IdЯзык:целое
Название языка:строка
табл Связи
IdСвязи:целое
IdЯзык:целое
idСтрана:целое
← →
Petr V. Abramov © (2004-03-08 14:27) [15]> YurikGl © (08.03.04 14:14) [14]
А к чему ID связи?
← →
YurikGl © (2004-03-08 14:40) [16]re [15]
В принципе, IdЯзык:целое idСтрана:целое однозначно определяют связь, но иногда удобно иметь "чистый" идентефикатор записи в качестве первичного ключа.
← →
Petr V. Abramov © (2004-03-08 14:52) [17]Иногда удобно. А иногда он просто место жрет ( как в данном случае)
← →
YurikGl © (2004-03-08 15:02) [18]Ну хорошо :)
табл Связи
IdЯзык:целое
idСтрана:целое
← →
Petr V. Abramov © (2004-03-08 15:06) [19]YurikGl © (08.03.04 15:02) [18]
:)
← →
ka3ax (2004-03-08 16:23) [20]2Юрик и Петр. А Маша, кстати ее поздравляю с праздником, спрашивала по-моему не о структуре базы а о том как реализовать интерфейс :) А про нормализацию БД Маша наверное слыхала еще в университете чо там как ))
2Маша. Маша, все правильно, все ети варианты - нафик ты воопче не о том спрашивала в данном случае.
Но, на самом деле все просто. В этом случае всего лишь достаточно не пользоваться стандартом данным Вам со средой разработки. С Дельфи сто лет уж не робил, но из того что помню, рискну предположить (пусть меня осудят, но я уже три дня как поздравляю женщин - очч устал). На сколько я помню, ДБГрид есть наследник от КастомГрид. Проще всего в данном случае написать маленькую надстройку над дбгрид - в частности переопределить методы гетедиттекст и сетедиттекст. Смотрите поле которое Вас интересует, и при гет едит текст вставляете свой комбо бокс - то есть устанавливаете ему координаты ячейки, делаете видимым, посылаете CB_SHOWDROPDOWN (для облегчения действий, следует каждому елементу комбобокса, таг присвоить соответстующий ID языка) и выборе строки из этого комбо бокса - ))) языковому полю данной записи присваивать ID таблицы "Связи" - об этом писал ЮрикГЛ:)
Исчо придеца смареть событие перерисовки полей грида - если это твое многоязыковое поле, то ты вместо ID записи из таблицы СвязиЯзыкиСоСтранами пишешь ЯзыкНо1/ЯзыкНо2/.../Африканский.
Собсно все что я хотел сказать.
Простите если каво обидел, ноя уже пиян ((
Маша, с Праздником!
← →
YurikGl © (2004-03-08 17:55) [21]Я бы интерфейс сделал так. В первой форме высвечивается TGrid со странами. Рядом клавиша "Посмотреть языки". По нажатию этой клавиши выбрасывается другая форма, на которой в TGrid выводятся языки на котором говорят в стране, которая была выбрана в первой форме. Там же есть клавиша "добавить язык" Это - первый вариант.
Второй вариант. Оба Grid распологаются на одной форме, но содержание второго грида меняется на DataSource1DataChange (например) набора данных первого Gridа.
← →
YurikGl © (2004-03-08 17:58) [22]Дополнение к [21]. Добавление языка можно сделать так. Выводится в grid (уже третьем) список всех языков и при нажатии клавиши "добавить" он добавляется в набор данных относящийся ко второму Grid, который был упомянут в [21].
З.Ы. Объяснять, по моему, вообще не умею :( Sorry
← →
Petr V. Abramov © (2004-03-08 18:07) [23]> ka3ax (08.03.04 16:23) [20]
Оно все, конечно, складно, только ID связи все равно за уши притянуто - из таблицы связей все однозначно вытаскивается по ID страны :)
Много не пейте :)
Маша, с праздником!
← →
Sergey Masloff (2004-03-08 19:01) [24]Если все же в исходной постановке то я бы сделал так (хотя изначально в одном поде список - это уродство, но случаи разные бывают)
1) В гриде Column.ButtonStyle = cbsEllipses
2) При нажатии вызывается функция которая работает примерно так
function GetLng() : String;
begin
Result := "";
with TLngSrchForm.Create(Application) do
try
if (ShowModal = mrOK) then
Result := LangCode; // Это проперть поисковой формы
finally
Free();
end;
end;
TLngSrchForm -> Форма в которой юзер сможет выбрать язык. Я бы сделал с отбором то можно втупую грид со списком всех
3) Добавляем в значение поля еще один код и разделитель (например ;) то есть было "англ;" стало "англ;нем;"
4) Предусмотреть то что если юзер удаляет 1 символ - от нудаляет и все между окружающими разделителями.
← →
ka3ax (2004-03-09 07:32) [25]2Petr Abramov
:)
Все верно. По ID страны выбираем записи.
ComboBox - с помощью него добавлять язык будет удобно, а вот как удалять?
Вариант YurikGl в данном случае - лучше (по-моему). Кнопку сделать в полях колонки, при нажатии на нее - показываем форму с гридом, содержащим языки для выбранной страны.
Хотя, можно и еще одну кнопку в поля этой колонки добавить - при нажатии на нее выпадает список с языками, при выборе из него языка - добавляем соответствующий язык к стране.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.035 c