![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание фиктивного столбца, связанного с существуюшим столбцом [D7]
Николай_Москва © (2006-03-27 12:06:00)Привет! Возникла такая задачка (хочу узнать, можно ли ее решить в принципе):
Существуют две простейшие таблицы (для примера я сильно упрощаю). Их столбцы:
Первая таблица
1. Имя объекта
2. координаты
Вторая таблица
1. Имя объекта
2. Признак 1
3. Признак 2
4. Признак 3
5. Признак n
....
Вот такая не очень удачная структура, но сделать ничего нельзя. Первая таблица - главная, вторая - подчиненная, в БД стоит отношение один-ко-многим между первой таблицей и второй по столбцу Имя объекта.
Теперь что касается программы на Дельфи, работающей с такой БД. Для отображения таблиц использую компонент DBGridEh набора Ehlib. С первой таблицей все ясно. Подчиненная таблица с главной по masterfields не связана (т.к. есть еще таблица, где как раз и установлена такая связь, для решения конкретной задачи это неважно).
Так вот, в подчиненной таблице введен столбец типа lookup, который ориентирован на ключевое поле Имя объекта (в подчиненной табличке, таким образом, организован ниспадающий список имен объектов при добавлении новой записи). Имена объектов в lookup-столбце ищутся в главной таблице и все нормально работает.
Теперь проблема
Хотелось бы в подчиненной таблице иметь фиктивный (без ввода в БД) столбец Координаты, где прописывались бы значения координат соответствующего объекта из главной таблицы, когда пользователь вводил и редактировал новый объект. Также координаты должны присутствовать и во время просмотра подчененной таблицы.
Я пробовал реализовать подобное через новые столбцы таблицы типа calculated, но ничего не вышло. а глубоко я с этой проблемой никогда не связывался, плюс БД не очень удачная.
С уважением, Николай
Виталий Панасенко (2006-03-28 14:25:00) [1]В результате "упрощения" получилась совсем другая структура БД, ее связи.Вторая таблица деталь для первой, но мастер для третьей ? Создай во второй lookup-поле по данным из первой (координаты), затем в третьей создай lookup-поле по второй, указав в качестве результата lookup-поле "Координаты" второй таблицы. из мухи слон у тебя получается.
Хотя, конечно, лучше бы полный вариант отношений показать. а то гадаем, как на приеме у гадалки
Николай_Москва (2006-03-28 13:35:00) [2]
> И в мастер и в деталь есть поле "Имя обьекта"(это я так
> понимаю и есть связь).
Вторая таблица не связана с первой, а связана с совсем другой таблицей по другому признаку. Я, для упрощения, приводить не стал, но, как говорил, структура БД досталась неудачная...
Виталий Панасенко (2006-03-28 09:20:00) [3]Ты решил приколоть? А что есть lookup-поле ? И в мастер и в деталь есть поле "Имя обьекта"(это я так понимаю и есть связь).Ну, сделай еще один НД для
> Первая таблица
> 1. Имя объекта
> 2. координаты
Во второй сделай lookup-поле по "Имя обьекта", результат - "Координаты"
Первая таблица
1. Имя объекта
2. координаты
Вторая таблица
1. Имя объекта
2. Признак 1
3. Признак 2
4. Признак 3
5. Признак n
6. Координаты - lookup-поле из/по "Третьей таблице"
Третья таблица
1. Имя объекта
2. координаты
Николай_Москва (2006-03-27 19:06:00) [4]Да, но в подчиненной нет столбца Координаты, он виртуален.
Виталий Панасенко (2006-03-27 17:04:00) [5]
> Николай_Москва (27.03.06 16:12) [9]
> Можно, конечно, сделать допотопными методами - ставить курсор
> в подчиненной таблице на имя, а внизу, в каком-нибудь TEdit,
> будут отображаться координаты (внешней процедурой), но
> это как-то не очень...
А разница в TEdit или TField ?
Можно ввести еще один НД (TTable), связанный с Мастер-таблицей. И использовать его как результат в подчиненной для lookup-поля
Николай_Москва (2006-03-27 16:12:00) [6]Можно, конечно, сделать допотопными методами - ставить курсор в подчиненной таблице на имя, а внизу, в каком-нибудь TEdit, будут отображаться координаты (внешней процедурой), но это как-то не очень...
Stanislav (2006-03-27 14:52:00) [7]Если бы ADO, то подсказал бы.
Николай_Москва (2006-03-27 14:11:00) [8]BDE, TTable
Stanislav (2006-03-27 14:09:00) [9]А ты что используешь ADO или BDE?
Николай_Москва (2006-03-27 13:40:00) [10]Нашел в Сети, что еще можно для этого использовать TClientDataset совместно с TDataSetProvider'ом, может попытаюсь.
А как сделать вот это с использованием TTable, честно говоря, не представляю.
>> Способов его организовать масса. Напр. поле в запросе. А в запросе делаем соединение таблиц.
Сложные запросы в sql со всякими там алиасами делал, хранимые процедуры делал, а вот в простейших приложениях (к каким можно отнести и данное) просто использовал везде TTable, связанные по masterfields. Сейчас требования к интерфейсу немного поменялись, придется разбираться.
Johnmen (2006-03-27 12:47:00) [11]То, что в [3], и то, что в [2], это разные вещи.
Николай_Москва (2006-03-27 12:42:00) [12]Уже пробовал делать calculated-поле в подчиннной, вставлять в него запрос, связывающий две таблицы с обновлением на событии oncalcfields таблицы, но что-то не пошло. Как только идет скроллинг по DBGrid, записи в виртульном столбце, на которых в данный момент не стоит курсор, сбиваются. Попробую еще раз.
Johnmen (2006-03-27 12:28:00) [13]
> Также координаты должны присутствовать и во время просмотра
> подчененной таблицы.
Вот это слово ключевое.
Т.е. поле подчиненного набора данных виртуально.
Способов его организовать масса. Напр. поле в запросе. А в запросе делаем соединение таблиц.
Sergey13 (2006-03-27 12:24:00) [14]Так выводи в лукап поле сразу и Имя и Координаты. Вроде через точку с запятой надо указывать - посмотри в хелпе.