![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Access. Записи детала в одну строку [D6]
msguns © (2005-10-06 11:49:00)Запросом, видимо, нельзя. А есть вообще способы сделать это на "сервере" ?
Поясню:
1. Таблица изданий (GID,..)
2. Таблица авторов (AID,FIO)
3. Таблица авторов издания (ID,GID,AID)
Надо "вытащить" всех авторов каждого издания и показать их в гриде одной строкой :
"Манифест комм.партии" ... К.Маркс,Ф.Энгельс,В.Ленин,...
Идея была: развернуть Тбл3 по типу кросса и подцепить связкой к осн.таблице. Но как это реализовать, не могу въехать, ведь кол-во "столбцов" (авторов) произвольное
Спасибо за любую помощь и советы
Seg (2005-10-06 13:56:00) [21]В Оракле можно попотеть и сделать одним запросом.
Если есть возможность модифицировать базу, то можно добавить в таблицу 3 еще одно поле, где хранить в одной строке всех авторов.
msguns (2005-10-06 13:35:00) [22]>Seg (06.10.05 13:15) [11]
>Последовательность действий должна быть такой:
И сколько вся это кухня будет дымить по времени, учитывая первую часть [10] ?
Seg (2005-10-06 13:15:00) [23]Последовательность действий должна быть такой:
1.Получаем список изданий
2.Сохраняем во временную таблицу.
3.Запускаем курсор по таблице
4.Для каждой строки выбираем авторов (в столбик)
5.По этому столбику запускаем второй курсор
6.склеиваем строки в одну строку через разделитель
7.добавляем полученную строку к названию издания.
msguns (2005-10-06 13:09:00) [24]Блин, трансформом получается чудовище ;(
Если, к примеру, юзер захочет получить весь каталог, просто отключив фильтр, то в НД попадет все издания библиотеки (несколько десятков тыщ записей). Но это Бог с ним, можно "порезать" на куски, а вот что делать с офигительным "хвостом" из тысяч колонок на каждого автора ?
Я уже не обсуждаю тему о времени выполнения такого монстера ;)
В общем нашел такое решение:
В каталог изданий встромляю еще одно стринговое поле (255 б), куда в "клиенте" будет "интеллектуально" прописываться ФИО авторов, добавленные из справочника писателей. Т.е. не ID авторов, а прямо ФИО, разделенные запятыми. Конечно, если узер выкинет автора из справочника или поменяет ему ФИО, он так и останется в своих книгах со старым именем.
Но это, ИМХО, лучше, чем гемориться с запросом или заводить жуткие тормозищи при отображении, подтягивая из БД авторо из детала по каждому изданию
Курдль (2005-10-06 12:40:00) [25]
> Os © (06.10.05 12:32) [8]
> А разве можно не указывать длину VarChar?
Смотря для какой СУБД.
Если какая-то не позволяет - можно рассчитать разумную длину.
Вряд ли список авторов превысит пару сотен байт. А уж 1000 за глаза хватит.
Os (2005-10-06 12:32:00) [26]
> При создании таблицы определить поле, как VARCHAR
А разве можно не указывать длину VarChar?
msguns (2005-10-06 12:30:00) [27]>Курдль © (06.10.05 12:10) [1]
>sniknik © (06.10.05 12:26) [6]
За наводку спасибо - уже смотрю. А вот еще, если не трудно ;)
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1128587181&n=1
sniknik (2005-10-06 12:26:00) [28]у Access есть специальная sql конструкция
TRANSFORM ... PIVOT ...
которой можно "перевернуть" рекордсет "на бок"
подробнее в справке по Access (или иши в мсофисе JETSQL40.CHM)
Курдль (2005-10-06 12:25:00) [29]При создании таблицы определить поле, как VARCHAR
Курдль (2005-10-06 12:24:00) [30]
> Os © (06.10.05 12:22) [2]
> И как на сервере определить длину возвращаемой строки?
А зачем?! 8-()
Os (2005-10-06 12:24:00) [31]Извиняюсь за неточность: не определить а задать. Всегда найдется запись длинней.
Os (2005-10-06 12:22:00) [32]И как на сервере определить длину возвращаемой строки?
Курдль (2005-10-06 12:10:00) [33]Это либо на клиенте, либо спец. компонентом типа pivot, но лучше - серверной процедуриной.