powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Конкатенация строк в запросе... КАК ?
7 сообщений из 7, страница 1 из 1
Конкатенация строк в запросе... КАК ?
    #32055640
Borisov_dl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вобщем есть табличка "Песни". Есть подчиненная "Авторы".
Связь "один-ко-многим" (у одной песни много авторов).
Нужно сделать запрос, который выведет название песни и вычисляемое поле, в котором через запятую перечислены все авторы этой песни....
Вобщем пытался с Group By но нужна еще и агрегирующая функция.. Её надо либо написать и использовать (КАК?), либо мой способ неправильный, и надо подругому... (КАК?)
...
Рейтинг: 0 / 0
Конкатенация строк в запросе... КАК ?
    #32055685
ОлегК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С помощью GROUP BY не получится, надо функцию писать. Как? ... Можно попробовать так:
1. Создай запрос с параметром на основе таблицы Авторы. Параметр поставь в условие отбора ИДа композиции.
2. Пиши функцию (назовем BuildAutorString) с одним входным параметром - переменная задающая ИД композиции. В тексте функции создай ссылку на запрос (п.1), задай параметр для этого запроса равным параметру функции. Создай на основе ссылки Recordset, в цикле пройдись по строкам Recordset-а и накопи строчку с именами авторов. Затем присвой значению функции значение строковой переменной.
3. Создай запрос на основе таблицы композиций (допустим в этой таблице ключевое поле имеет имя IdMuz). Добавь в этот запрос вычисляемое поле: BuildAutorString([IdMuz]).
...
Рейтинг: 0 / 0
Конкатенация строк в запросе... КАК ?
    #32055688
Фотография RatTail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впишите эту функцию (conc) в станд. модуль:
-----------------------------------------
Function conc(ByVal s)
On Error Resume Next
Dim rs As DAO.Recordset
Dim i
Set rs = CurrentDb.OpenRecordset("Authors")
rs.MoveFirst
While Not rs.EOF
If rs.Fields("song") = s Then
conc = conc & rs.Fields("author") & ","
End If
rs.MoveNext
Wend
rs.Close
conc = Left(conc, Len(conc) - 1)
End Function
------------------------------------------------
В табле "Authors" есть два текстовых поля: "song" и "author"
-----------------------------------------------------
Теперь можно написать такой запрос:
SELECT song, conc(song) AS Авторы
FROM Songs;
---------------------------------------------------------
Внесите нужные поправки "под себя"
...
Рейтинг: 0 / 0
Конкатенация строк в запросе... КАК ?
    #32055694
ОлегК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никого не хочу обижать, но, помоему, скрипт надо поправить на:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Function conc(ByVal s) 
On Error Resume Next 
    Dim rs As DAO.Recordset 
    Dim i, strVar as string

    Set rs = CurrentDb.OpenRecordset( "SELECT author FROM Authors WHERE song = "  & s)
    Do While Not rs.EOF
        strVar = strVar & rs!author &  ", " 
        rs.MoveNext
    Loop
    conc = Left(strVar, Len(strVar) -  2 ) 
End Function
...
Рейтинг: 0 / 0
Конкатенация строк в запросе... КАК ?
    #32055721
Фотография RatTail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ОлегК
Полностью с тобой согласен (и "пробел" после "запятой" тоже желателен).
Но. Подход должен быть таким: чем "примитивнее" ответ, тем легче и быстрее
можно просечь его суть.
А многие любят давать такие дотошные и подробные ответы, что пока в них
разберешься... Как будто "спрашивающий" - это дебил какой-то.
...
Рейтинг: 0 / 0
Конкатенация строк в запросе... КАК ?
    #32056044
Borisov_dl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уф...
Ребята, спасибо !!!
Особенно ОлегК дельно написал (ты бы еще мыло бы оставил :-)) )

Только вот никто не сказал что DAO надо подключить.. :-)
Я полдня сношался отчего там несовместимость типов вылазит :-)))
...
Рейтинг: 0 / 0
Конкатенация строк в запросе... КАК ?
    #32056190
ОлегК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят, лучше подробно чем неправильно )) На самом деле чтобы объяснить и человек понял, надо знать уровень подготовки и я рад, что он оказался достаточно высок ))
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Конкатенация строк в запросе... КАК ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]