Форум: "Базы";
Текущий архив: 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