Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-1078434009
Antichrist
2004-03-05 00:00
2004.04.04
DBF-формат файла


1-1079343131
Jager
2004-03-15 12:32
2004.04.04
Как заставить программу запускаться при закгузке в защ. режиме


4-1074974589
Дубинин Алексей
2004-01-24 23:03
2004.04.04
Вылетает ошибка при проверке правильности пути


1-1079192406
Vilux
2004-03-13 18:40
2004.04.04
Помогите с потоками


11-1058260237
anonymous
2003-07-15 13:10
2004.04.04
Как создать форму которая имеется в списке available forms ?





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