Jika anda pernah perlu menghasilkan senarai nilai medan/pertanyaan yang dipisahkan bersama maklumat lain daripada pangkalan data anda, anda pasti tahu ia boleh menjadi mencabar – dan tugas yang kebanyakan orang fikir tidak mungkin dilakukan. Jika, sebagai contoh, anda telah diminta untuk menghasilkan laporan tentang siapa 5 jurujual teratas – dalam tertib Menurun – untuk setiap bulan dalam setahun, atau 3 kedai yang paling hampir dengan setiap pelanggan, maka anda berpotensi terpaksa bergelut dengan pertanyaan tab silang atau menggabungkan hasil secara manual di luar Access. Tetapi dengan bantuan sedikit kod VBA, anda akan menghasilkan hasil seperti berikut dalam beberapa minit…
| Jan | John, Sally, Bill |
| februari | Sally, Adam, John |
| Sel | Adam, Sally, Bill |
Terdapat banyak kali apabila dapat memaparkan senarai hasil yang dibatasi sebagai sebahagian daripada pertanyaan yang lebih besar - senarai 3 pelanggan teratas untuk setiap wakil jualan, 5 kedai terdekat dengan setiap pelanggan dengan perbelanjaan tertinggi , senarai itu berterusan.
Berhenti menyusun laporan anda bersama-sama
Walaupun lebih mungkin untuk mendapatkan perincian untuk membuat laporan semacam itu, anda biasanya harus menjahit hasilnya secara manual di luar Akses sebagai sebahagian daripada hamparan atau laporan.
Kod berikut memotong keperluan untuk bermain dengan hasil pertanyaan di luar Access, dan sebaliknya, akan membolehkan anda menghasilkan jenis hasil yang ditunjukkan di atas dengan mudah.
Pertama, mari kita gariskan apa yang kita mahu kod dapat dilakukan:
"Diberikan pertanyaan, kembalikan jumlah x hasil, digabungkan menjadi satu rentetan yang dibatasi oleh y"
Sebelum kita memulakan
Sebelum kita melihat kodnya, penting untuk diperhatikan bahawa walaupun mungkin untuk membuat fungsi VBA yang lebih generik, dan mampu menangani kombinasi pertanyaan, tindakan itu akan menghasilkan kod yang cukup panjang sehingga apa yang akan kita lakukan dalam artikel ini adalah untuk menentukan contoh kes dan menulis fungsi untuk menangani kes itu. Melakukannya dengan cara ini akan menjadikan anda lebih mudah untuk membuat semula kod untuk memenuhi keperluan khusus anda.
Kes sampel
Kami mempunyai pangkalan data penjualan yang menyimpan perincian pembelian pelanggan, bersama dengan kategori produk yang menjadi milik pembelian tersebut. Kami ingin menghasilkan laporan yang menunjukkan, mengikut bulan, 3 kategori teratas dalam urutan menurun.
Untuk kesederhanaan kami akan memberikan contoh ke satu jadual, walaupun prinsipal akan berfungsi tanpa mengira persediaan anda. Jadual yang akan kita gunakan disusun seperti berikut:
| Jualan |
| Nama Pelanggan |
| Tarikh transaksi |
| Nilai Transaksi |
| kategori |
Sudah tentu ini adalah persediaan yang terlalu mudah, tetapi anda mendapat idea.
Sekarang - kodnya
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 - dijelaskan

Anda akan melihat bahawa kami memeriksa sama ada kami harus menambahkan pembatas pada rentetan atau tidak - tanpa pemeriksaan ini anda akan berakhir dengan rentetan hasil yang tidak diformat dengan baik, atau anda perlu menambahkan kod untuk membuang pembatas yang tidak diingini - dengan cara ini menjaga keadaan lebih baik dan rapi dari awal.
Fungsi itu sendiri tentu boleh dipanggil dari dalam pertanyaan, laporan, atau di mana sahaja yang anda suka dari dalam Akses.
Betulkan Pangkalan Data Akses yang rosak
Sekiranya anda berjumpa pangkalan data Access rosak apabila anda menjalankan kod di atas, maka lebih baik menggunakan beberapa alat khusus untuk memperbaikinya dan memulihkan semua jadual dari pangkalan data yang rosak.
Pengenalan Pengarang:
Mitchell Pond adalah pakar pemulihan data di DataNumen, Inc., yang merupakan pemimpin dunia dalam teknologi pemulihan data, termasuk membaiki masalah SQL dan produk perisian pemulihan yang unggul. Untuk maklumat lebih lanjut, lawati www.datanumen.com