Veritabanınızdaki diğer bilgilerle birlikte alan/sorgu değerlerinin sınırlandırılmış bir listesini oluşturmanız gerektiğinde, bunun en iyi ihtimalle zorlu bir iş olduğunu ve çoğu insanın imkansız olduğunu düşündüğü bir görev olduğunu bilirsiniz. Örneğin, yılın her ayı için en iyi 5 satış elemanının (azalan sırada) veya her müşteriye en yakın 3 mağazanın listesini içeren bir rapor oluşturmanız istenmişse, muhtemelen çapraz tablo sorgularıyla uğraşmak veya sonuçları Access dışında manuel olarak birleştirmek zorunda kalabilirsiniz. Ancak biraz VBA kodu yardımıyla, aşağıdaki gibi sonuçları birkaç dakika içinde üretebilirsiniz…
| Ara | John, Sally, Bill |
| Şubat ayında | Sally, Adam, John |
| Mar | Adam, Sally, Bill |
Çoğu zaman daha büyük bir sorgunun parçası olarak sınırlandırılmış bir sonuç listesi görüntülemenin yararlı olacağı zamanlar vardır - her satış temsilcisi için en büyük 3 müşterinin listesi, en çok harcama yapan müşterilerinize en yakın 5 mağaza , liste devam ediyor.
Raporunuzu birbirine bağlamayı bırakın
Bu tür bir rapor oluşturmak için ayrıntıları elde etmek mümkün olandan daha fazla olsa da, genellikle bir elektronik tablonun veya raporun parçası olarak sonuçları Access dışında el ile birleştirmek zorunda kalırsınız.
Aşağıdaki kod, Access dışındaki sorgu sonuçlarıyla uğraşma ihtiyacını ortadan kaldırır ve bunun yerine, yukarıda gösterilen türden sonuçları kolaylıkla üretmenize olanak tanır.
Öncelikle, kodun ne yapabilmesini istediğimizi özetleyelim:
"Bir sorgu verildiğinde, y ile sınırlandırılmış tek bir dizide birleştirilmiş x sayıda sonuç döndürün"
Başlamadan Önce
Koda bakmadan önce, daha genel ve herhangi bir sorgu kombinasyonunu işleyebilen bir VBA işlevi oluşturmak mümkün olsa da, bunu yapmanın oldukça uzun kodla sonuçlanacağını, bu nedenle bu makalede ne yapacağımızı not etmek önemlidir. örnek bir durum tanımlamak ve bu durumu işlemek için işlevi yazmaktır. Bunu bu şekilde yapmak, özel ihtiyaçlarınızı karşılamak için kodu yeniden oluşturabilmenizi çok daha kolaylaştıracaktır.
örnek vaka
Satın alma işleminin ait olduğu ürün kategorisi ile birlikte müşteri satın alımlarının ayrıntılarını saklayan bir satış veri tabanımız var. Aylara göre ilk 3 kategoriyi azalan sırada gösteren bir rapor oluşturmak istiyoruz.
Basit olması için örneği tek bir tablo olarak tutacağız, ancak asıl kurulumunuz ne olursa olsun çalışacaktır. Kullanacağımız tablo şu şekilde kurulur:
| Satış |
| Müşteri adı |
| İşlem Tarihi |
| İşlem Değeri |
| Kategoriler |
Açıkçası bu aşırı basitleştirilmiş bir kurulum, ancak fikri anladınız.
Şimdi - 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 – açıkladı

Dizeye bir sınırlayıcı ekleyip eklemememiz gerektiğini kontrol ettiğimizi fark edeceksiniz – bu kontrol olmadan, kötü biçimlendirilmiş bir sonuç dizesi elde edersiniz veya istenmeyen sınırlayıcıları kaldırmak için kod eklemeniz gerekir – bu şekilde her şey baştan güzel ve derli toplu kalır.
İşlevin kendisi elbette bir sorgu, rapor veya Access içinden istediğiniz herhangi bir yerden çağrılabilir.
Bozuk Erişim Veritabanını Düzeltin
Karşılaşırsan bozuk Access veritabanları Yukarıdaki kodu çalıştırdığınızda, bunları onarmak ve tüm tabloları bozuk veritabanlarından kurtarmak için bazı özel araçlar kullanmak daha iyidir.
Yazar Tanıtımı:
Mitchell Pond, bir veri kurtarma uzmanıdır. DataNumendahil olmak üzere veri kurtarma teknolojilerinde dünya lideri olan , Inc. onarım SQL sorunu ve excel kurtarma yazılımı ürünleri. Daha fazla bilgi için ziyaret edin www.datanumen.com