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

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

Access. Записи детала в одну строку [D6]


Страницы:   1 2

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, но лучше - серверной процедуриной.


Страницы:   1 2

Наверх

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