Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.21;
Скачать: CL | DM;

Вниз

Создание фиктивного столбца, связанного с существуюшим столбцом   Найти похожие ветки 

 
Николай_Москва   (2006-03-27 12:06) [0]

Привет! Возникла такая задачка (хочу узнать, можно ли ее решить в принципе):
Существуют две простейшие таблицы (для примера я сильно упрощаю). Их столбцы:
Первая таблица
1. Имя объекта
2. координаты

Вторая таблица
1. Имя объекта
2. Признак 1
3. Признак 2
4. Признак 3
5. Признак n
....

Вот такая не очень удачная структура, но сделать ничего нельзя. Первая таблица - главная, вторая - подчиненная, в БД стоит отношение один-ко-многим между первой таблицей и второй по столбцу Имя объекта.

Теперь что касается программы на Дельфи, работающей с такой БД. Для отображения таблиц использую компонент DBGridEh набора Ehlib. С первой таблицей все ясно. Подчиненная таблица с главной по masterfields не связана (т.к. есть еще таблица, где как раз и установлена такая связь, для решения конкретной задачи это неважно).
Так вот, в подчиненной таблице введен столбец типа lookup, который ориентирован на ключевое поле Имя объекта (в подчиненной табличке, таким образом, организован ниспадающий список имен объектов при добавлении новой записи). Имена объектов в lookup-столбце ищутся в главной таблице и все нормально работает.

Теперь проблема
Хотелось бы в подчиненной таблице иметь фиктивный (без ввода в БД) столбец Координаты, где прописывались бы значения координат соответствующего объекта из главной таблицы, когда пользователь вводил и редактировал новый объект. Также координаты должны присутствовать и во время просмотра подчененной таблицы.

Я пробовал реализовать подобное через новые столбцы таблицы типа calculated, но ничего не вышло. а глубоко я с этой проблемой никогда не связывался, плюс БД не очень удачная.

С уважением, Николай


 
Sergey13 ©   (2006-03-27 12:24) [1]

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


 
Johnmen ©   (2006-03-27 12:28) [2]


>  Также координаты должны присутствовать и во время просмотра
> подчененной таблицы.


Вот это слово ключевое.
Т.е. поле подчиненного набора данных виртуально.
Способов его организовать масса. Напр. поле в запросе. А в запросе делаем соединение таблиц.


 
Николай_Москва   (2006-03-27 12:42) [3]

Уже пробовал делать calculated-поле в подчиннной, вставлять в него запрос, связывающий две таблицы с обновлением на событии oncalcfields таблицы, но что-то не пошло. Как только идет скроллинг по  DBGrid, записи в виртульном столбце, на которых в данный момент не стоит курсор, сбиваются. Попробую еще раз.


 
Johnmen ©   (2006-03-27 12:47) [4]

То, что в [3], и то, что в [2], это разные вещи.


 
Николай_Москва   (2006-03-27 13:40) [5]

Нашел в Сети, что еще можно для этого использовать TClientDataset совместно с TDataSetProvider"ом, может попытаюсь.
А как сделать вот это с использованием TTable, честно говоря, не представляю.

>> Способов его организовать масса. Напр. поле в запросе. А в запросе делаем соединение таблиц.

Сложные запросы в sql со всякими там алиасами делал, хранимые процедуры делал, а вот в простейших приложениях (к каким можно отнести и данное) просто использовал везде TTable, связанные по masterfields. Сейчас требования к интерфейсу немного поменялись, придется разбираться.


 
Stanislav ©   (2006-03-27 14:09) [6]

А ты что используешь ADO или BDE?


 
Николай_Москва   (2006-03-27 14:11) [7]

BDE, TTable


 
Stanislav ©   (2006-03-27 14:52) [8]

Если бы ADO, то подсказал бы.


 
Николай_Москва   (2006-03-27 16:12) [9]

Можно, конечно, сделать допотопными методами - ставить курсор в подчиненной таблице на имя, а внизу, в каком-нибудь TEdit, будут отображаться координаты (внешней процедурой), но это как-то не очень...


 
Виталий Панасенко   (2006-03-27 17:04) [10]


> Николай_Москва   (27.03.06 16:12) [9]
> Можно, конечно, сделать допотопными методами - ставить курсор
> в подчиненной таблице на имя, а внизу, в каком-нибудь TEdit,
>  будут отображаться координаты (внешней процедурой), но
> это как-то не очень...

А разница в TEdit или TField ?
Можно ввести еще один НД (TTable), связанный с Мастер-таблицей. И использовать его как результат в подчиненной для lookup-поля


 
Николай_Москва   (2006-03-27 19:06) [11]

Да, но в подчиненной нет столбца Координаты, он виртуален.


 
Виталий Панасенко   (2006-03-28 09:20) [12]

Ты решил приколоть? А что есть lookup-поле ? И в мастер и в деталь есть поле "Имя обьекта"(это я так понимаю и есть связь).Ну, сделай еще один НД для
> Первая таблица
> 1. Имя объекта
> 2. координаты


Во второй сделай lookup-поле по "Имя обьекта", результат - "Координаты"
Первая таблица
1. Имя объекта
2. координаты

Вторая таблица
1. Имя объекта
2. Признак 1
3. Признак 2
4. Признак 3
5. Признак n
6. Координаты - lookup-поле из/по "Третьей таблице"

Третья таблица
1. Имя объекта
2. координаты


 
Николай_Москва   (2006-03-28 13:35) [13]


> И в мастер и в деталь есть поле "Имя обьекта"(это я так
> понимаю и есть связь).


Вторая таблица не связана с первой, а связана с совсем другой таблицей по другому признаку. Я, для упрощения, приводить не стал, но, как говорил, структура БД досталась неудачная...


 
Виталий Панасенко   (2006-03-28 14:25) [14]

В результате  "упрощения" получилась совсем другая структура БД, ее связи.Вторая таблица деталь для первой, но мастер для третьей ? Создай во второй lookup-поле по данным из первой (координаты), затем в третьей создай lookup-поле по второй, указав в качестве результата lookup-поле "Координаты" второй таблицы. из мухи слон у тебя получается.
Хотя, конечно, лучше бы полный вариант отношений показать. а то гадаем, как на приеме у гадалки



Страницы: 1 вся ветка

Текущий архив: 2006.05.21;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.043 c
15-1145943960
Alkid
2006-04-25 09:46
2006.05.21
С Днём Рождения! 25 апреля


15-1145774934
Mozart
2006-04-23 10:48
2006.05.21
CreateOleObject


15-1145858978
Tashpulatov
2006-04-24 10:09
2006.05.21
книги начинаюшим delphi


6-1129636325
Cosinus
2005-10-18 15:52
2006.05.21
Как отследить активность определенного порта?


8-1134657965
seleman
2005-12-15 17:46
2006.05.21
Вопрос по видео