Форум: "Базы";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
ВнизAccess. Записи детала в одну строку Найти похожие ветки
← →
msguns © (2005-10-06 11:49) [0]Запросом, видимо, нельзя. А есть вообще способы сделать это на "сервере" ?
Поясню:
1. Таблица изданий (GID,..)
2. Таблица авторов (AID,FIO)
3. Таблица авторов издания (ID,GID,AID)
Надо "вытащить" всех авторов каждого издания и показать их в гриде одной строкой :
"Манифест комм.партии" ... К.Маркс,Ф.Энгельс,В.Ленин,...
Идея была: развернуть Тбл3 по типу кросса и подцепить связкой к осн.таблице. Но как это реализовать, не могу въехать, ведь кол-во "столбцов" (авторов) произвольное
Спасибо за любую помощь и советы
← →
Курдль © (2005-10-06 12:10) [1]Это либо на клиенте, либо спец. компонентом типа pivot, но лучше - серверной процедуриной.
← →
Os © (2005-10-06 12:22) [2]И как на сервере определить длину возвращаемой строки?
← →
Os © (2005-10-06 12:24) [3]Извиняюсь за неточность: не определить а задать. Всегда найдется запись длинней.
← →
Курдль © (2005-10-06 12:24) [4]
> Os © (06.10.05 12:22) [2]
> И как на сервере определить длину возвращаемой строки?
А зачем?! 8-()
← →
Курдль © (2005-10-06 12:25) [5]При создании таблицы определить поле, как VARCHAR
← →
sniknik © (2005-10-06 12:26) [6]у Access есть специальная sql конструкция
TRANSFORM ... PIVOT ...
которой можно "перевернуть" рекордсет "на бок"
подробнее в справке по Access (или иши в мсофисе JETSQL40.CHM)
← →
msguns © (2005-10-06 12:30) [7]>Курдль © (06.10.05 12:10) [1]
>sniknik © (06.10.05 12:26) [6]
За наводку спасибо - уже смотрю. А вот еще, если не трудно ;)
http://delphimaster.net/view/3-1128587181/
← →
Os © (2005-10-06 12:32) [8]
> При создании таблицы определить поле, как VARCHAR
А разве можно не указывать длину VarChar?
← →
Курдль © (2005-10-06 12:40) [9]
> Os © (06.10.05 12:32) [8]
> А разве можно не указывать длину VarChar?
Смотря для какой СУБД.
Если какая-то не позволяет - можно рассчитать разумную длину.
Вряд ли список авторов превысит пару сотен байт. А уж 1000 за глаза хватит.
← →
msguns © (2005-10-06 13:09) [10]Блин, трансформом получается чудовище ;(
Если, к примеру, юзер захочет получить весь каталог, просто отключив фильтр, то в НД попадет все издания библиотеки (несколько десятков тыщ записей). Но это Бог с ним, можно "порезать" на куски, а вот что делать с офигительным "хвостом" из тысяч колонок на каждого автора ?
Я уже не обсуждаю тему о времени выполнения такого монстера ;)
В общем нашел такое решение:
В каталог изданий встромляю еще одно стринговое поле (255 б), куда в "клиенте" будет "интеллектуально" прописываться ФИО авторов, добавленные из справочника писателей. Т.е. не ID авторов, а прямо ФИО, разделенные запятыми. Конечно, если узер выкинет автора из справочника или поменяет ему ФИО, он так и останется в своих книгах со старым именем.
Но это, ИМХО, лучше, чем гемориться с запросом или заводить жуткие тормозищи при отображении, подтягивая из БД авторо из детала по каждому изданию
← →
Seg (2005-10-06 13:15) [11]Последовательность действий должна быть такой:
1.Получаем список изданий
2.Сохраняем во временную таблицу.
3.Запускаем курсор по таблице
4.Для каждой строки выбираем авторов (в столбик)
5.По этому столбику запускаем второй курсор
6.склеиваем строки в одну строку через разделитель
7.добавляем полученную строку к названию издания.
← →
msguns © (2005-10-06 13:35) [12]>Seg (06.10.05 13:15) [11]
>Последовательность действий должна быть такой:
И сколько вся это кухня будет дымить по времени, учитывая первую часть [10] ?
← →
Seg (2005-10-06 13:56) [13]В Оракле можно попотеть и сделать одним запросом.
Если есть возможность модифицировать базу, то можно добавить в таблицу 3 еще одно поле, где хранить в одной строке всех авторов.
← →
msguns © (2005-10-06 15:21) [14]>Seg (06.10.05 13:56) [13]
>В Оракле можно попотеть и сделать одним запросом.
В скл-сервере можно запросто нарисовать ХП, которая легко это сделает ;)
>Если есть возможность модифицировать базу, то можно добавить в таблицу 3 еще одно поле, где хранить в одной строке всех авторов.
Именно этот способ и описан в [10], 2-й абзац ;) Только в основную таблицу (1)
← →
Seg (2005-10-06 15:30) [15]Конечно, если узер выкинет автора из справочника или поменяет ему ФИО, он так и останется в своих книгах со старым именем.
А если подумать и дописать триггер на редактирование/удаление и в нем найти этого автора и изменить/удалить его?
← →
Курдль © (2005-10-06 15:33) [16]
> Seg (06.10.05 13:56) [13]
> В Оракле можно попотеть и сделать одним запросом.
Одним запросом? Не скриптом и не процедурой?
А нельзя ли пример, а то навскидочку что-то ничего на ум не приходит...
← →
msguns © (2005-10-06 15:37) [17]>Seg (06.10.05 15:30) [15]
>А если подумать и дописать триггер на редактирование/удаление и в нем найти этого автора и изменить/удалить его?
Охохонюшки.. ;((
1. В ацесе появились триггеры ?
2. Если бы был сиквель-сервер, то
- решается ХП, ну внимательнее читайте ответы, а ?
- если после каждого изменения в справочнике Авторов по триггеру будет вызываться ХП, ищущая по всей базе в стринговом поле контекстно ФИО автора и менять весь стринг, вырезая, вставляя и компонуя строку заново, сколько по времени будет выполняться апдэйт одной лишь записи справочника ?
Даже в горячечном бреду не додумался бы до такого ;))
← →
Курдль © (2005-10-06 15:40) [18]
> msguns © (06.10.05 11:49)
> 1. Таблица изданий (GID,..)
> 2. Таблица авторов (AID,FIO)
> 3. Таблица авторов издания (ID,GID,AID)
А я вот думаю, зачем в 3. нужен ID? Ведь быть "дважды автором одной книги" как-то нелепо на мой взгляд :)
← →
Danilka © (2005-10-06 15:44) [19]msguns © (06.10.05 15:37)
2. Если бы был сиквель-сервер, то
А чего ты вообще пересел с mssql на access? :)
- если после каждого изменения в справочнике Авторов по триггеру будет вызываться ХП, ищущая по всей базе в стринговом поле контекстно ФИО автора и менять весь стринг, вырезая, вставляя и компонуя строку заново, сколько по времени будет выполняться апдэйт одной лишь записи справочника ?
Даже в горячечном бреду не додумался бы до такого ;))
вах.
1. что мешает выбрать по третьей таблице только те книги, в которых есть этот автор?
2. как часто у авторов книг меняецца ФИО?
:)
← →
msguns © (2005-10-06 16:05) [20]>Danilka © (06.10.05 15:44) [19]
>А чего ты вообще пересел с mssql на access? :)
Я не пересел, я как бы на двух стульях ;)) Точнее, четырех. Еще ИБ и старые болячки на парадоксе.
"Це жыття, сынку" ;)))
>1. что мешает выбрать по третьей таблице только те книги, в которых есть >этот автор?
Речь в [10] идет о том, что в самом каталоге хранятся не указатели на автором, а строка, где они перечислены скопом через запятую. Эту строку правит не юзер, а программа-клиент. Он лишь выбирает нужного из справочника. Поэтому третьей таблицы не надо (а ее уже и нет - мир ее праху !)
>2. как часто у авторов книг меняецца ФИО?
При первичном заведении БД не очень опытными девочками-с-длинными-ногами-умеющими-быстро-стучать-по-клаве ошибок будет море. И только когда библиотекарь Марьиванна начнет сурьезно работать с базой, она это увидит. И будет исправлять.
А в целом меня не столько интересует решение данной траблы в текущем "библиотечном" проекте, как вообще проблема в СУБД, не располагающих возможностями ХП.
← →
Seg (2005-10-06 16:14) [21]А нельзя ли пример, а то навскидочку что-то ничего на ум не приходит...
Конечно только одним запросом не обойтись, придется маленькую функцию написать.
Пример на тестовой базе SCOTT
текст функции:
create or replace function job_line
(
sjob in varchar2,
separator in varchar2)
return varchar2
is
Result varchar2(1000);
cursor cr1 is select t.ename from emp t where t.job=sjob;
begin
for i in cr1 loop
Result:=Result || i.ename || separator|| " ";
end loop;
Result:=substr(Result,1,length(Result)-2);
return(Result);
end job_line;
текст запроса:
select t.job || ": "|| job_line(t.job,",")
from emp t
group by t.job || ": "|| job_line(t.job,",")
Результат:
1 ANALYST: SCOTT, FORD
2 CLERK: SMITH, ADAMS, JAMES, MILLER
3 MANAGER: JONES, BLAKE, CLARK
4 PRESIDENT: KING
5 SALESMAN: ALLEN, WARD, MARTIN, TURNER
← →
msguns © (2005-10-06 16:20) [22]>Seg (06.10.05 16:14) [21]
Ф-ция - это не совсем запрос, однако. Точнее, совсем не запрос, а скорее макрос.
Кстати, а какое отношение вся эта красота имеет к сабжу-то ? Где первым словом красным по светло-серому написано "Акцесс", т.е. СУБД БЕЗ ФУНКЦИХ И ХРАНИМЫХ ПРОЦЕДУР.
← →
Seg (2005-10-06 16:21) [23]А в целом меня не столько интересует решение данной траблы в текущем "библиотечном" проекте, как вообще проблема в СУБД, не располагающих возможностями ХП.
СУБД - Система Управления Базой Данных.
Если нет Системы Управления - то это не СУБД, это просто База Данных.
← →
Seg (2005-10-06 16:23) [24]Кстати, а какое отношение вся эта красота имеет к сабжу-то ?
Никакого. Пример для Курдля.
← →
Курдль © (2005-10-06 16:29) [25]
> Seg (06.10.05 16:23) [24]
> Никакого. Пример для Курдля.
Спасибо, но я имел в виду "одним запросом" :)
> Seg (06.10.05 13:56) [13]
> В Оракле можно попотеть и сделать одним запросом.
Лень было попотеть? :)
← →
msguns © (2005-10-06 16:31) [26]>Seg (06.10.05 16:21) [23]
>>СУБД, не располагающих возможностями ХП.
>Если нет Системы Управления - то это не СУБД, это просто База Данных
Надо понимать, что всякие там парадоксы, дибэйзы, изибэйзы и т.д. - не СУБД, а так, погулять вышли ибо ну нет у них ни триггеров, ни хранимых процедур, ни даже любимых тобою функций ?
Типа сама ОС разруливает базами.
← →
Seg (2005-10-06 16:53) [27]парадоксы, дибэйзы, изибэйзы и т.д. - не СУБД, а так, погулять вышли
По меркам 10-ти летней давности, это может быть и СУБД, хотя больше похожи на набор файлов для хранения данных.
← →
msguns © (2005-10-06 17:10) [28]>Seg (06.10.05 16:53) [27]
>По меркам 10-ти летней давности, это может быть и СУБД, хотя больше похожи на набор файлов для хранения данных.
Весьма глубокое заблуждение, говорящее о некомпетентности и пренебрежении к непознанному ;))
Да будет тебе известно, что огромное число реально действующих и поныне систем во всю используют высмеиваемый тобою "набор файлов для хранения данных". Например, 1С.
Кроме того, вполне удачный и шустрый движок BDE начал реально загибаться лишь после выхода в свет широкодоступных фриварных сиквель-серверов, а до этого эксплуатировался так, что и твоему раклу не снилось (имеется в виду к-во контор, которые им пользовались).
С твоего разрешения, один маленький совет:
Не надо позволять себе пренебрежительные выпады в адрес устаревшего, тем более такого, о котором не имеешь розового понятия.
← →
Seg (2005-10-06 17:23) [29]"набор файлов для хранения данных". Например, 1С.
А в другой ветке мне доказывали, что 1С не работает с dbf файлами.
Кто же прав?
← →
sniknik © (2005-10-06 17:34) [30]ну какже не работает, работает, и с dbf и с mssql, mysql и с ораклом может, стоит только захотеть... ;)
← →
Seg (2005-10-06 17:40) [31]Я же не сам это придумал, мне это пытаются доказать:
> и однопользовательская - на dbf файлах.
неправда
← →
Seg (2005-10-06 17:41) [32]В "потрепаться" ветка про 1С.
← →
Danilka © (2005-10-07 08:09) [33][20] msguns © (06.10.05 16:05)
Поэтому третьей таблицы не надо (а ее уже и нет - мир ее праху !)
Ну это ты зря, на мой взгляд.
Seg (06.10.05 17:40)
Я же не сам это придумал, мне это пытаются доказать:
> и однопользовательская - на dbf файлах.
неправда
Ты просто не понял. Имелось ввиду то, что многопользовательские тоже довольно успешно работают на ДБФ-ках.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.039 c