Ако някога е трябвало да създадете разграничен списък със стойности на поле / заявка заедно с друга информация от вашата база данни, ще разберете, че в най-добрия случай може да бъде предизвикателство - и задача most хората мислят, че няма да е възможно. Ако например сте били помолени да изготвите доклад за това кои са били 5-те най-добри търговци - в низходящ ред - за всеки месец от годината или най-близките 3 магазина до всеки клиент, тогава потенциално ще останете с разбъркване с кръстосани запитвания или ръчно комбиниране на резултатите извън Access. Но с помощта на малко VBA код, вие ще получите резултати като следните след минути ...
| клозет | Джон, Сали, Бил |
| февруари | Сали, Адам, Джон |
| Вт | Адам, Сали, Бил |
Има много пъти, когато би било полезно да можете да покажете разделен списък с резултати като част от по-голяма заявка - списък с 3-те най-големи клиенти за всеки търговски представител, най-близките 5 магазина до всеки от вашите най-харчещи клиенти , списъкът продължава.
Спрете да събирате отчета си
Въпреки че е повече от възможно да получите подробности за създаването на такъв вид отчет, обикновено в крайна сметка се налага да съберете ръчно резултатите извън Access като част от електронна таблица или отчет.
Следващият код премахва необходимостта да се занимавате с резултатите от заявката извън Access и вместо това ще ви позволи да създавате вида на резултатите, показани по-горе, с лекота.
Първо, нека очертаем какво искаме да може да прави кодът:
„При дадена заявка върнете x броя резултати, комбинирани в един низ, който е разделен с y“
Преди да започнем
Преди да разгледаме кода, важно е да отбележим, че макар да е възможно да се създаде VBA функция, която е по-обща и може да обработва всякакви комбинации от заявки, това би довело до доста дълъг код, така че какво ще направим в тази статия е да се дефинира примерен случай и да се напише функцията за обработка на този случай. Правейки го по този начин ще ви улесни много да можете да пресъздадете кода, за да отговорите на вашите специфични нужди.
Примерен случай
Разполагаме с база данни за продажби, която съхранява подробности за покупките на клиентите, заедно с категорията на продукта, към която принадлежи покупката. Искаме да изготвим отчет, който да показва по месеци първите 3 категории в низходящ ред.
За простота ще запазим примера в една таблица, въпреки че принципалът ще работи независимо от вашата настройка. Таблицата, която ще използваме, е настроена по следния начин:
| Продажби |
| Потребителско име |
| Дата на транзакция |
| 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