Əgər verilənlər bazanızdakı digər məlumatlarla yanaşı, sahə/sorğu dəyərlərinin ayrılmış siyahısını yaratmaq məcburiyyətində qalmısınızsa, bunun ən yaxşı halda çətin ola biləcəyini və əksər insanların mümkün olmayacağını düşündüyü bir tapşırıq olduğunu biləcəksiniz. Məsələn, sizdən ilin hər ayı üçün ən yaxşı 5 satış işçisinin kim olduğunu - Azalan sıra ilə - və ya hər müştəriyə ən yaxın 3 mağazanı necə göstərdiyinizi göstərən bir hesabat hazırlamağınız istənilibsə, potensial olaraq çarpaz sorğularla mübahisə etməli və ya nəticələri Access xaricində əl ilə birləşdirməli olacaqsınız. Lakin kiçik bir VBA kodunun köməyi ilə bir neçə dəqiqə ərzində aşağıdakı kimi nəticələr əldə edəcəksiniz...
| Jan | Con, Sally, Bill |
| fevral | Sally, Adam, John |
| Mar | Adam, Sally, Bill |
Hər bir satış nümayəndəsi üçün ilk 3 ən böyük müştərinin siyahısı, ən çox xərcləyən müştərilərinizin hər birinə ən yaxın 5 mağaza kimi daha böyük sorğunun bir hissəsi kimi nəticələrin ayrılmış siyahısını göstərməyin faydalı olacağı çox vaxt olur. , siyahı davam edir.
Hesabatınızı birləşdirməyi dayandırın
Bu cür hesabat yaratmaq üçün təfərrüat əldə etmək mümkün qədər çox olsa da, siz adətən elektron cədvəlin və ya hesabatın bir hissəsi kimi Access-dən kənarda nəticələri əl ilə birləşdirmək məcburiyyətində qalacaqsınız.
Aşağıdakı kod Access-dən kənar sorğu nəticələri ilə məşğul olmaq ehtiyacını aradan qaldırır və bunun əvəzinə yuxarıda göstərilən nəticələri asanlıqla əldə etməyə imkan verəcəkdir.
Əvvəlcə kodun nə edə bilməsini istədiyimizi qeyd edək:
"Sorğu verildikdə, y ilə ayrılmış tək sətirdə birləşdirilmiş x ədədi nəticəni qaytarın"
Başlamazdan əvvəl
Koda baxmazdan əvvəl qeyd etmək lazımdır ki, daha ümumi olan və istənilən sorğu kombinasiyasını idarə edə bilən VBA funksiyası yaratmaq mümkün olsa da, bunu etmək kifayət qədər uzun kodla nəticələnəcək, buna görə də bu məqalədə nə edəcəyik. nümunə işi müəyyən etmək və həmin işi idarə etmək üçün funksiyanı yazmaqdır. Bunu bu şəkildə etmək, xüsusi ehtiyaclarınıza cavab vermək üçün kodu yenidən yaratmağınızı çox asanlaşdıracaq.
Nümunə halı
Müştəri alışlarının təfərrüatlarını və alışın aid olduğu məhsul kateqoriyasını saxlayan satış bazamız var. Aylar üzrə ilk 3 kateqoriyanı azalan qaydada göstərən bir hesabat hazırlamaq istəyirik.
Sadəlik üçün biz nümunəni vahid cədvəldə saxlayacağıq, baxmayaraq ki, əsas sizin quraşdırmanızdan asılı olmayaraq işləyəcək. İstifadə edəcəyimiz cədvəl aşağıdakı kimi qurulur:
| Satış |
| Müştəri adı |
| Əməliyyat Tarixi |
| TransactionValue |
| Kateqoriya |
Aydındır ki, bu həddən artıq sadələşdirilmiş quraşdırmadır, lakin siz fikir əldə edirsiniz.
İndi - kod
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
Kod - izah edildi

Siz qeyd edəcəksiniz ki, biz sətirə ayırıcı əlavə edib-etməməyimizi yoxlayırıq – bu yoxlama olmadan ya pis formatlaşdırılmış nəticə sətri ilə nəticələnəcəksiniz, ya da arzuolunmaz ayırıcıları silmək üçün kod əlavə etməli olacaqsınız – bu yolla hər şeyi əvvəldən gözəl və səliqəli saxlayır.
Funksiyanın özü, şübhəsiz ki, sorğu, hesabat və ya Access daxilində istədiyiniz yerdə çağırıla bilər.
Zədələnmiş Giriş verilənlər bazasını düzəldin
Əgər qarşılaşsanız zədələnmiş Access verilənlər bazası yuxarıdakı kodu işə saldığınız zaman, onları təmir etmək və bütün cədvəlləri zədələnmiş verilənlər bazalarından bərpa etmək üçün bəzi xüsusi vasitələrdən istifadə etmək daha yaxşıdır.
Müəllif Giriş:
Mitchell Pond məlumatların bərpası üzrə mütəxəssisdir DataNumendaxil olmaqla məlumatların bərpası texnologiyaları üzrə dünya lideri olan , Inc SQL problemini təmir edin və excel bərpa proqram məhsulları. Ətraflı məlumat üçün ziyarət edin www.datanumen.com