Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание фиктивного столбца, связанного с существуюшим столбцом [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]

Так выводи в лукап поле сразу и Имя и Координаты. Вроде через точку с запятой надо указывать - посмотри в хелпе.


Наверх

Титульная страница Поиск, карта сайта Написать письмо