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

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

Ни как не получается вставить долбанный ComboBox в DBGrid [D7, MSSQL]


Страницы:   1 2

Masha Streltsova ©   (2004-03-07 12:26:00) 

HELP помогите пожалуйста!!! Не как не получается вставить ComboBox в DBGrid.
Я пытаюсь вставить DBLookupcombobox и постоянно натыкаюсь на какие-то проблемы, то при скролинге грида   DBLookupcombobox не исчезает то чё то ещё если не сложно скиньте исходничек с примерчиком мне на мыло: derliga@mail.ru, а то я повешусь.


ka3ax   (2004-03-09 07:32:00) [1]

2Petr Abramov
:)
Все верно. По ID страны выбираем записи.
ComboBox - с помощью него добавлять язык будет удобно, а вот как удалять?
Вариант YurikGl в данном случае - лучше (по-моему). Кнопку сделать в полях колонки, при нажатии на нее - показываем форму с гридом, содержащим языки для выбранной страны.
Хотя, можно и еще одну кнопку в поля этой колонки добавить - при нажатии на нее выпадает список с языками, при выборе из него языка - добавляем соответствующий язык к стране.


Sergey Masloff   (2004-03-08 19:01:00) [2]

Если все же в исходной постановке то я бы сделал так (хотя изначально в одном поде список - это уродство, но случаи разные бывают)
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 символ - от нудаляет и все между окружающими разделителями.


Petr V. Abramov   (2004-03-08 18:07:00) [3]

> ka3ax   (08.03.04 16:23) [20]
 Оно все, конечно, складно, только ID связи все равно за уши притянуто - из таблицы связей все однозначно вытаскивается по ID страны :)
 Много не пейте :)

 Маша, с праздником!


YurikGl   (2004-03-08 17:58:00) [4]

Дополнение к [21]. Добавление языка можно сделать так. Выводится в grid (уже третьем) список всех языков и при нажатии клавиши "добавить" он добавляется в набор данных относящийся ко второму Grid, который был упомянут в [21].

З.Ы. Объяснять, по моему, вообще не умею :( Sorry


YurikGl   (2004-03-08 17:55:00) [5]

Я бы интерфейс сделал так. В первой форме высвечивается TGrid со странами. Рядом клавиша "Посмотреть языки". По нажатию этой клавиши выбрасывается другая форма, на которой в TGrid выводятся языки на котором говорят в стране, которая была выбрана в первой форме. Там же есть клавиша "добавить язык" Это - первый вариант.
Второй вариант. Оба Grid распологаются на одной форме, но содержание второго грида меняется на DataSource1DataChange (например) набора данных первого Gridа.


ka3ax   (2004-03-08 16:23:00) [6]

2Юрик и Петр. А Маша, кстати ее поздравляю с праздником, спрашивала по-моему не о структуре базы а о том как реализовать интерфейс :) А про нормализацию БД Маша наверное слыхала еще в университете чо там как ))
2Маша. Маша, все правильно, все ети варианты - нафик ты воопче не о том спрашивала в данном случае.
Но, на самом деле все просто. В этом случае всего лишь достаточно не пользоваться стандартом данным Вам со средой разработки. С Дельфи сто лет уж не робил, но из того что помню, рискну предположить (пусть меня осудят, но я уже три дня как поздравляю женщин - очч устал). На сколько я помню, ДБГрид есть наследник от КастомГрид. Проще всего в данном случае написать маленькую надстройку над дбгрид - в частности переопределить методы гетедиттекст и сетедиттекст. Смотрите поле которое Вас интересует, и при гет едит текст вставляете свой комбо бокс - то есть устанавливаете ему координаты ячейки, делаете видимым, посылаете CB_SHOWDROPDOWN (для облегчения действий, следует каждому елементу комбобокса, таг присвоить соответстующий ID языка) и выборе строки из этого комбо бокса - ))) языковому полю данной записи присваивать ID таблицы "Связи" - об этом писал ЮрикГЛ:)
Исчо придеца смареть событие перерисовки полей грида - если это твое многоязыковое поле, то ты вместо ID записи из таблицы СвязиЯзыкиСоСтранами пишешь ЯзыкНо1/ЯзыкНо2/.../Африканский.
Собсно все что я хотел сказать.
Простите если каво обидел, ноя уже пиян ((
Маша, с Праздником!


Petr V. Abramov   (2004-03-08 15:06:00) [7]

YurikGl ©   (08.03.04 15:02) [18]
 :)


YurikGl   (2004-03-08 15:02:00) [8]

Ну хорошо :)

табл Связи
IdЯзык:целое
idСтрана:целое


Petr V. Abramov   (2004-03-08 14:52:00) [9]

Иногда удобно. А иногда он просто место жрет ( как в данном случае)


YurikGl   (2004-03-08 14:40:00) [10]

re [15]
В принципе,  IdЯзык:целое idСтрана:целое однозначно определяют связь, но иногда удобно иметь "чистый" идентефикатор записи в качестве первичного ключа.


Petr V. Abramov   (2004-03-08 14:27:00) [11]

> YurikGl ©   (08.03.04 14:14) [14]
 А к чему ID связи?


YurikGl   (2004-03-08 14:14:00) [12]

Пардон в [11]сдвинулось.

табл Страны
 IdСтрана:целое
 Название:строка
                                                   
табл Языки
 IdЯзык:целое
 Название языка:строка      

табл Связи
 IdСвязи:целое
 IdЯзык:целое
 idСтрана:целое


Petr V. Abramov   (2004-03-08 13:50:00) [13]

пардон, простейший з апрос, конечно :)


Petr V. Abramov   (2004-03-08 13:48:00) [14]

> YurikGl ©   (08.03.04 12:28) [11]
> Есть еще один вариант. Реализовать связь многие-ко многим
 Вот это уже на базу похоже

> но к подобным конструкциям тяжело составлять запросы.
 К "сосискам" типа [8] к конечном итоге тяжелее

> select .... where (IdЯзык1=15 or IdЯзык2=15 or IdЯзык3=15)
 Уже многословно и будет долго выполняться. И это простейший зопрос. Т.е. только самое начало геморроя.


YurikGl   (2004-03-08 12:28:00) [15]

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.

но к подобным конструкциям тяжело составлять запросы.


Masha Streltsova   (2004-03-08 12:02:00) [16]

zacho
> Именно для этого PickList точно подходит

а как отследить событие когда мы выбираем значение из PickList, чтобы не поменять значение в ячейке, а добавить?

не YurikGl © [8] эти варианты отпадают потому что там больше 100 языков


Petr V. Abramov   (2004-03-07 23:46:00) [17]

YurikGl ©   (07.03.04 22:03) [8]
 И как же потом, зная ID языка, выбрать все страны, в которых на нем говорят? Учитывая, что человек с MSSQL работает, а не с Pidarox?


YurikGl   (2004-03-07 22:03:00) [18]

В твоем случае, на мой взгляд, нужно создать много столбцов типа boolean по числу языков. Если в столбце (напр. франц) записано true, то в этой стране говорят на францзском языке.
табл Страны
    Название:строка
    Франц:boolean
    Нем:boolean
    Англ:boolean

Второй вариант. Если в одной стране говорят не более чем на нескольких (3-4) языках то - создаешь справочник языков. В таблице стран делаешь нужное количество ссылок.

табл Страны               табл Языки
    Название:строка           IdЯзык:целое
    IdЯзык1:целое             Название языка:строка
    IdЯзык2:целое
    IdЯзык3:целое
    IdЯзык4:целое

Удачи


Zacho   (2004-03-07 21:53:00) [19]

Не понял. Именно для этого PickList точно подходит. А если значения надо взять из другой таблицы - то lookup поле в наборе данных.
Или возьми TDBGridEh из библиотеки EhLib - у него есть дополнительные возможности.

> Я пытаюсь вставить DBLookupcombobox

Не надо этого делать. Создай lookup поле. Хотя, в некоторых случаях, это очень не хорошо.


Masha Streltsova   (2004-03-07 20:02:00) [20]

например есть страны в них говорят на нескольких языках, а ячейка одна и в неё надо вписать 3 языка "англ./фр./нем." и эти языки надо выбрать из выпадающего списка вначале англ. потом фр. потом нем.
поэтому PickList точно не подходит


Страницы:   1 2

Наверх

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