Cara Memaparkan Pelbagai Hasil dalam Bidang Pertanyaan Tunggal di Akses Anda

Kongsi Sekarang:

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

Akses CikWalaupun 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

Kod VBASeperti yang anda lihat, kod tersebut agak jelas. Kita mulakan dengan menggunakan parameter yang dibekalkan untuk membina pertanyaan kita. Setelah rentetan pertanyaan dicipta, kita laksanakannya dan ulangi hasilnya, gabungkannya bersama untuk membentuk rentetan hasil tunggal yang kita cari.

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

Kongsi Sekarang:

Ruangan komen telah ditutup.