Как отобразить несколько результатов в одном поле запроса в вашем доступе

Поделись сейчас:

Если вам когда-либо приходилось создавать разделенный список значений поля/запроса вместе с другой информацией из вашей базы данных, вы знаете, что это может быть в лучшемost люди думают, что это невозможно. Если, например, вас попросили составить отчет о том, кто входит в пятерку лучших продавцов (в порядке убывания) за каждый месяц года или в 5 ближайших магазина к каждому покупателю, то вы, возможно, останетесь без ответа. с обработкой перекрестных запросов или ручным объединением результатов вне Access. Но с помощью небольшого кода VBA вы через несколько минут получите следующие результаты…

Января Джон, Салли, Билл
фев Салли, Адам, Джон
Вт Адам, Салли, Билл

Во многих случаях было бы полезно иметь возможность отображать список результатов с разделителями как часть более крупного запроса — список 3 крупнейших клиентов для каждого торгового представителя, 5 ближайших магазинов к каждому из ваших клиентов с самыми высокими расходами. , список можно продолжить.

Хватит сшивать отчет воедино

Г-жа доступХотя более чем возможно получить детали для создания такого отчета, вам обычно приходится вручную сшивать результаты вместе вне Access как часть электронной таблицы или отчета.

Следующий код избавляет от необходимости возиться с результатами запроса вне Access и вместо этого позволяет с легкостью получать результаты, показанные выше.

Во-первых, давайте наметим, что мы хотим, чтобы код мог делать:

«Для заданного запроса вернуть x результатов, объединенных в одну строку, разделенную y»

Прежде чем мы начнем

Прежде чем мы посмотрим на код, важно отметить, что, хотя можно создать более общую функцию VBA, способную обрабатывать любую комбинацию запросов, это приведет к довольно длинному коду, поэтому мы сделаем это в этой статье. заключается в том, чтобы определить пример случая и написать функцию для обработки этого случая. Если вы сделаете это таким образом, вам будет намного проще воссоздать код в соответствии с вашими конкретными потребностями.

Образец дела

У нас есть база данных продаж, в которой хранится информация о покупках клиентов, а также категория продукта, к которой принадлежит покупка. Мы хотим создать отчет, который показывает по месяцам 3 верхние категории в порядке убывания.

Для простоты мы сохраним пример для одной таблицы, хотя принципал будет работать независимо от вашей настройки. Таблица, которую мы будем использовать, настроена следующим образом:

Распродажа
Имя Клиента
Дата сделки
Значение транзакции
Категория

Очевидно, что это слишком упрощенная установка, но вы поняли идею.

Теперь — код

Public Function CategoryList(Month As String, NumResults As Integer, SortAscending As Boolean, Delimiter As String) As String
    Dim sSql, resultString As String
    Dim rst As Recordset
    Dim firstLine As Boolean
    
    'Create our SQL string using the supplied parameters
    sSql = "SELECT TOP " & NumResults & " [category] FROM sales GROUP BY Format([TransactionDate],""mmm""), sales.Category HAVING (((Format([TransactionDate], ""mmm"")) = """ & Month & """))"
    If SortAscending Then sSql = sSql & " ORDER BY Sum(sales.TransactionValue) DESC;"
    
    Set rst = CurrentDb.OpenRecordset(sSql)
    
    firstLine = True
    
    'Loop through the results, and create the string to return
    With rst
        Do While Not .EOF
            If Not firstLine Then
                resultString = resultString & Delimiter & .Fields("category")
            Else
                resultString = resultString & .Fields("category")
                firstLine = False
            End If
            
        .MoveNext
        Loop
    End With
    
    Set rs = Nothing
    CategoryList = resultString
End Function

Код - объяснение

Код VBAКак видите, код довольно понятен. Мы сtart, используя параметры, предоставленные для построения нашего запроса. Как только строка запроса создана, мы выполняем ее и прокручиваем результаты, объединяя их вместе, чтобы сформировать единую строку результата, которую мы ищем.

Вы заметите, что мы проверяем, должны ли мы добавлять разделитель в строку или нет — без этой проверки вы получите либо плохо отформатированную результирующую строку, либо вам придется добавить код для удаления нежелательных разделителей — таким образом, с самого начала все будет красиво и аккуратно.

Саму функцию, конечно, можно вызвать из запроса, отчета или откуда угодно из Access.

Исправить поврежденную базу данных доступа

Если вы столкнулись поврежденные базы данных Access когда вы запускаете приведенный выше код, то лучше использовать какой-нибудь специализированный инструмент для их восстановления и восстановления всех таблиц из поврежденных баз данных.

Об авторе:

Митчелл Понд — эксперт по восстановлению данных в DataNumen, Inc., которая является мировым лидером в области технологий восстановления данных, включая исправить проблему с SQL и программные продукты для восстановления Excel. Для получения дополнительной информации посетите www.datanumen.com

Поделись сейчас:

Комментарии закрыты.