| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Lookup-поле в dbGrid |
| Автор: Bose 31.10.2005, 13:00 |
| есть 2 таблицы(ADO): поля таблицы 1: name(text), type_id(integer) поля таблицы 2: id(integer), type(text) на форме есть: ADOtable1, ADOtable2, datasetTable1 и datasetTable2 и dbGridTable1(связанный с datasetTable1 - т.е. содержимое таблицы1 отображается в гриде). как сделать, чтобы в dbGridTable1 в поле type_id вместо цифры(integer) отображался соответствующий текст(поле type) из таблицы2 (т.е. поле таблица1.type_id должно быть связано с полем таблица2.type)? |
| Автор: bas 31.10.2005, 13:16 | ||
Да. |
| Автор: Bose 31.10.2005, 13:32 |
| ой... вообще вопрос был не в том, должно ли поле таблица1.type_id должно быть связано с полем таблица2.type;-) , а в том как сделать чтобы в поле type_id открывался ComboBox, в котором можно было выбрать нужный тип. И чтобы значения для этого ComboBoxа брались из соответствующей таблицы(таблица2). Короче. Нужно сделать Lookup. только у меня почему-то не получается это сделать со стандартным dbGrid'ом. Что я делал: в ADOtable1 открыл список полей. Выделил поле type_id. Поставил для него FieldKind:=fkLookup, в LookupDataSet указал ADOtable2, KeyFields указал type_id, LookupKeyFields:=id, LookupResultField:=type. Вроде все сделал как надо. Но в столбце type_id у меня ничего не показывается. И никаких намеков на ComboBox... |
| Автор: lotax 31.10.2005, 14:02 |
| используй PickList (закидай туда данные)... |
| Автор: Bose 31.10.2005, 14:07 |
| PickList не подходит. Мне надо, чтобы в поле отображался текст, а хранились индексы... |
| Автор: lotax 31.10.2005, 14:23 |
| |
| Автор: Bose 31.10.2005, 14:30 |
| нет... я хочу чтобы, юзер вместо type_id видел type, и выбирал из списка возможных type(которые хранятся в таблице2), но чтобы в базе в таблице сохранялся не текст type, а id этого type'a - type_id. |
| Автор: lotax 31.10.2005, 14:58 |
| создай логическое поле, в Gride за этим полем закрепи PickList, также положи Combobox(сделай его невидимым если он тебе не нужен), далее кидай данные в PickList -type, а в Combobox -id, а потом по индексу ищи ID и запоминай его в таблице. |
| Автор: Bose 31.10.2005, 15:07 |
| это слишком сложно=). В Дельфи(7) должны быть встроенные средства, для выполнения таких задач. С ними-то я и не могу разобраться. Сейчас я продвинулся чуть дальше. Теперь я не изменяю свойства поля type_id, а добавляю новое поле MyType к ADotable1, и настраиваю его свойства для выполнения Lookup'a... Пока что, при попытке установить курсор в поле MyType получаю сообщение EVariantTypeCastError. Cannot convert variant of type(string) into type(double). Сижу и недоумеваю, откуда там double взялся.. |
| Автор: Bose 31.10.2005, 15:35 |
| yep! я разрешил свою проблему. Оно заработало. Ошибка преобразования типов выскакивала, потому, что когда я добавлял новое поле MyType к ADotable1, я указывал его тип такаким же как и у поля type_id(integer), а надо было как у поля type(string). p.s> а откуда float брался, до сих пор не ведаю... |