| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Связывание двух таблиц mySQL по индексу |
| Автор: DIvan 29.8.2004, 14:39 |
| Господа! Стоит тривиальная задача: связать две таблицы по индексному полю так, чтобы вместо индекса на гриде появлялся ComboBox со значениями из второй таблицы. Использую mySQL server и Delphi 7 с установленными компонентами DAC for mySQL + Express QuantumGrid 4. Первая мысль была связать таблицы по lookup`у, используя обычный DBGrid и FieldsEditor таблицы БД. Все работает, но сильно тормозит в момент загрузки формы. Вторая мысль - использовать свойство QuantumGrid , позволяющее придать любому столбцу вид того же LookupComboBox. Все работает, но тормозит при попытках сортировки по lookup-полям. Чем полей больше, тем тормоза сильней. Всего полей 12 + 5 lookup. Была попытка также связать таблицы, пользуясь первым методом, но применяя для отображения QuantumGrid. Теперь тормоза на входе в форму (около 5 сек.), зато сортировка и вообще работа с таблицей стала работать нормально. Последняя мысль - использовать SQL запросы. Таблица формируется мгновенно, но мен нужна еще возможность редактирования, в т.ч. подстановка из связанных словарей. Тормоза наступили (а как же без них? )) в момент заполнения списка ComboBox, в который я превратил индексное поле таблицы. Так что же это получается? Или я где-то не прав (на что и надеюсь), или lookup поля вообще нет возможности использовать, если их в таблице больше одного?! Большая просьба, помогите разобраться! |
| Автор: <Spawn> 30.8.2004, 00:34 |
| Код непомешало бы показать. |
| Автор: DIvan 30.8.2004, 11:18 | ||
Дело в том, что и кода-то никакого нет. Я просто связывал две таблицы при помощи визуальных средств (в данном случае, lookup). Если вопрос о коде SQL запроса - тут все в порядке, я проверял. Что же до кода заполнения ComboBox - его могу привести: begin cxGrid1DBTableView1FLAG.PropertiesClass:=TcxComboBoxProperties;//Теперь это ComboBox mySQLQuery2.SQL.Clear; mySQLQuery2.SQL.Add('SELECT name_ru FROM `dict_country`'); mySQLQuery2.Open; mySQLQuery2.First; for i :=1 to mySQLQuery2.RecordCount do begin TcxComboBoxProperties(cxGrid1DBTableView1FLAG.Properties).Items.Add(mySQLQuery2.Fields.Fields[0].AsString);//Вот так я их и добавляю. Так в хелпе ExpressQuantumGrid прописано mySQLQuery2.Next; end; end; |
| Автор: _hunter 1.9.2004, 17:11 |
| простейший ( IMHO ) вариант -- написать компонент-подобие TDBMemo ( или другой ); присобачить его DataSet' у первой таблицы и при срабатывании делать запрос на выборку из второй таблицы по индексу первой |
| Автор: vandal 2.9.2004, 14:03 |
| Quantum Grid... Не знаешь, его можно использовать как просто грид(не для БД)? |
| Автор: DIvan 9.9.2004, 11:20 | ||
Да, конечно. В пакете есть как БД-, так и просто компоненты. Возможностей море, см. хелп и экзамплы. Ищи перепакованый пакет на www.forum.ru-board.com |