Ded777
Дата: 22.02.2008 12:25:40
Помогите, плиз , решит следующую задачу. Есть таблица, допустим там 2 поля , первое фамилия, второе имя, необходимо написать запрос, который бы суммировал все имена для одинаковых фамилий и писал их через запетую. Помогите, плиз
adv
Дата: 22.02.2008 12:28:46
если мдб - писать функцию, в ней пробежать по рекордсету с именами текущей фамилии, сформировать и вернуть нужную строку имён.
Ded777
Дата: 22.02.2008 16:39:21
логика как раз понятна, а вот как ето технически реализовать?
может кто то подскажет как написать такую функцию, как раз с етим и возникла проблема :(
Karfaqen
Дата: 22.02.2008 16:45:27
Ded777 |
логика как раз понятна, а вот как ето технически реализовать? как написать такую функцию |
Вы прежде писали функции?
Ded777
Дата: 22.02.2008 17:24:39
Karfaqen |
Ded777 | логика как раз понятна, а вот как ето технически реализовать? как написать такую функцию | Вы прежде писали функции? |
меленькие, с помощью книжек
Karfaqen
Дата: 22.02.2008 18:27:41
Тогда делаете, например, так.
Создаете новую функцию GetNames в общем модуле (эту функцию вы потом будете вызывать из запроса). Функция имеет строковый параметр fam (туда будет передаваться фамилия).
В функции открываете рекордсет (ds As dao.Recordset) на основе запроса на выборку из вашей таблицы с условием по значению переданной в параметре фамилии ("select Имя from Таблица where фамилия = '" & fam & "'" ). Таким образом вы получите в этом Recordset все записи с нужными вам именами.
Далее, перемещаясь в цикле (Do While Not ds.EOF) по записям данного Recordset'а, накапливаете в строковую переменную значения поля с именами через запятую (s = s & ds("Имя") & ","). Закончив цикл, возвращаете накопленную строку в качестве возвращаемого значения этой функции GetNames = s.
Позже в запросе (с группировкой по полю фамилии) вызываете функцию, передавая в нее значение поля фамилии: GetNames([Фамилия]) AS [СписокИмен]
Пробуйте написать, функция вполне "меленькая", как вы говорите.
Ded777
Дата: 23.02.2008 13:54:41
Karfaqen , спасибо за совет, но мне поможет только примерчик функции, выложите плиз;) Заранее благодарен.
Karfaqen
Дата: 23.02.2008 14:48:42
О как, еще и примерчик. А зачем же я тогда тут столько букоф написал? Это ж раз в пять больше, чем сам код. Кстати, там даже все нужные вам конструкции VB-кода УЖЕ приведены. Ну и как после этого писать вам что-то менее подробное, чем это объяснение? Мне это теперь неудобно, может другие напишут.
Но я все же советую вам попытаться самостоятельно сделать - прямо следуя описанной методике, там совсем немного, заодно и научитесь чему-то. Ну или, если вы идейный "не-писатель", то ищите примеры по форуму - эта тема многократно тут обсуждалось, наверняка найдете готовые варианты кода, причем более эффективные чем я предлагал.
Успехов.
Ded777
Дата: 23.02.2008 15:39:54
Karfaqen |
О как, еще и примерчик. А зачем же я тогда тут столько букоф написал? Это ж раз в пять больше, чем сам код. Кстати, там даже все нужные вам конструкции VB-кода УЖЕ приведены. Ну и как после этого писать вам что-то менее подробное, чем это объяснение? Мне это теперь неудобно, может другие напишут.
Но я все же советую вам попытаться самостоятельно сделать - прямо следуя описанной методике, там совсем немного, заодно и научитесь чему-то. Ну или, если вы идейный "не-писатель", то ищите примеры по форуму - эта тема многократно тут обсуждалось, наверняка найдете готовые варианты кода, причем более эффективные чем я предлагал.
Успехов. |
Спасибо
если вы идейный "не-писатель", не идейный, а пока не умеющий, :( жаль что вы не хотите примером помочь :( Просто, то что опытному человеку кажеться елементарным, для того кто ето делает в первый раз немного сложновато.
Программист-Любитель
Дата: 23.02.2008 17:20:11
Настоятельно рекомендую подобрать сопли и нажать Ф1.