Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Цитата
Quantum Grid... Не знаешь, его можно использовать как просто грид(не для БД)?


Да, конечно. В пакете есть как БД-, так и просто компоненты. Возможностей море, см. хелп и экзамплы. Ищи перепакованый пакет на www.forum.ru-board.com smile.gif)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)