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

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

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

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

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

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

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

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

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

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

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

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

Образец дела

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

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

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

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

Теперь — код

Публичная функция 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 'Создайте нашу строку SQL, используя предоставленные параметры sSql = "SELECT TOP " & NumResults & " [категория] ОТ продаж СГРУППИРОВАТЬ ПО Формату([ТранзакцияДата],""ммм""), продажи.Категория ИМЕЕТ (((Формат([ТранзакцияДата], ""ммм"")) = """ & Месяц & """))" Если сортировать по возрастанию, то sSql = sSql & " ORDER BY Sum(sales.TransactionValue) DESC;" Установить rst = CurrentDb.OpenRecordset(sSql) firstLine = True 'Пройтись по результатам и создать строку для возврата с помощью rst Do While Not .EOF Если не firstLine Then resultString = resultString & Delimiter & .Fields("category") Else resultString = resultString & .Fields("category") firstLine = False End If .MoveNext Конец цикла с набором rs = Ничего CategoryList = resultString End Function

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

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

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

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

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

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

Об авторе:

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

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

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