Якщо вам коли-небудь потрібно було створити роздільний список значень полів / запитів поряд з іншою інформацією з вашої бази даних, ви будете знати, що це може бути складним завданням у кращому випадку - і завдання most люди думають, що це неможливо. Якщо, наприклад, вас попросили скласти звіт про те, хто були першими 5 продавців - за спаданням - за кожним місяцем року або найближчі 3 магазини до кожного клієнта, тоді ви потенційно залишились з перебігом запитів із перехресними таблицями або комбінуванням результатів за межами Access. Але за допомогою невеликого коду VBA ви за лічені хвилини отримаєте такі результати, як показано нижче ...
| січень | Джон, Саллі, Білл |
| Feb | Саллі, Адам, Джон |
| березня | Адам, Саллі, Білл |
Багато разів було б корисно мати можливість відобразити розділений список результатів як частину більшого запиту - список 3 найбільших клієнтів для кожного торгового представника, найближчих 5 магазинів до кожного з ваших найвищих витрат клієнтів , список можна продовжувати.
Припиніть зшивати звіт
Незважаючи на те, що отримати детальні відомості для створення такого звіту більш ніж можливо, зазвичай вам доведеться вручну зшивати результати за межами Access як частина електронної таблиці або звіту.
Наступний код вирішує необхідність возитися з результатами запитів поза Access, а натомість дозволить вам легко отримувати результати, показані вище.
Спочатку давайте окреслимо, що ми хочемо, щоб міг робити код:
"Враховуючи запит, поверніть x кількість результатів, об'єднаних в єдиний рядок, який розмежовується y
Перш ніж розпочати
Перш ніж ми розглянемо код, важливо зазначити, що хоча можливо створити функцію VBA, яка є більш загальною і здатною обробляти будь-які комбінації запитів, це призведе до досить довгого коду, тому що ми будемо робити в цій статті полягає у визначенні прикладу випадку та написанні функції для обробки цього випадку. Якщо зробити це таким чином, вам буде набагато легше мати можливість відтворити код відповідно до ваших конкретних потреб.
Приклад зразка
Ми маємо базу даних про продажі, яка зберігає деталі покупок клієнтів, а також категорію товару, до якого належить покупка. Ми хочемо підготувати звіт, який показує за місяцем 3 найкращі категорії у порядку зменшення.
Для простоти ми зведемо приклад до однієї таблиці, хоча основна функціонуватиме незалежно від ваших налаштувань. Таблиця, якою ми будемо користуватися, складається так:
| Sales |
| Ім'я клієнта |
| Дата транзакції |
| TransactionValue |
| Категорія |
Очевидно, що це занадто спрощена настройка, але ви розумієте.
Тепер - код
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
Код - пояснений

Ви помітите, що ми перевіряємо, чи слід нам додавати роздільник до рядка чи ні - без цієї перевірки ви отримаєте або неякісно відформатований рядок результатів, або вам доведеться додати код, щоб видалити небажані роздільники - таким чином зберігає речі приємними та охайними з самого початку.
Саму функцію, звичайно, можна викликати з запиту, звіту або в будь-якому місці, де вам подобається, з Access.
Виправити пошкоджену базу даних доступу
Якщо ви стикаєтесь пошкоджені бази даних Access під час запуску вищевказаного коду краще використовувати якийсь спеціалізований інструмент для їх відновлення та відновлення всіх таблиць із пошкоджених баз даних.
Вступ автора:
Мітчелл Понд - фахівець з відновлення даних у DataNumen, Inc., яка є світовим лідером у галузі технологій відновлення даних, в тому числі відновити проблему SQL та програмні продукти Excel для відновлення. Для отримання додаткової інформації відвідайте WWW.datanumen.com