Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
Николай_Москва   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.014 c
11-1083854165
Рома
2004-05-06 18:36
2006.05.21
Локальный чат


2-1147003224
Интересующийся
2006-05-07 16:00
2006.05.21
Delphi и 64-бита


4-1140617138
Eugem
2006-02-22 17:05
2006.05.21
Программно отследить активность определенного процесса


15-1145956765
konrads
2006-04-25 13:19
2006.05.21
установка D 2005


3-1143122033
anubis
2006-03-23 16:53
2006.05.21
SQL запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский