Cách hiển thị nhiều kết quả trong một trường truy vấn trong quyền truy cập của bạn

Chia sẻ ngay bây giờ:

Nếu bạn từng cần tạo một danh sách các giá trị trường/truy vấn được phân tách bằng dấu phẩy cùng với các thông tin khác từ cơ sở dữ liệu của mình, bạn sẽ biết rằng đó là một nhiệm vụ khó khăn – và hầu hết mọi người đều cho rằng nó không thể thực hiện được. Ví dụ, nếu bạn được yêu cầu tạo báo cáo về 5 nhân viên bán hàng hàng đầu – theo thứ tự giảm dần – cho mỗi tháng trong năm, hoặc 3 cửa hàng gần nhất với mỗi khách hàng, thì bạn có thể phải vật lộn với các truy vấn bảng chéo hoặc kết hợp thủ công các kết quả bên ngoài Access. Nhưng với sự trợ giúp của một chút mã VBA, bạn sẽ tạo ra kết quả như sau chỉ trong vài phút…

Tháng John, Sally, Bill
Tháng Hai Sally, Adam, John
Tháng Ba Adam, Sally, Bill

Đôi khi sẽ rất hữu ích nếu có thể hiển thị danh sách kết quả được phân tách như một phần của truy vấn lớn hơn – danh sách 3 khách hàng lớn nhất cho mỗi đại diện bán hàng, 5 cửa hàng gần nhất với mỗi khách hàng chi tiêu cao nhất của bạn , Danh sách cứ kéo dài.

Dừng việc ghép báo cáo của bạn lại với nhau

bà Truy cậpMặc dù có nhiều khả năng lấy chi tiết để tạo loại báo cáo đó nhưng bạn thường phải ghép các kết quả lại với nhau theo cách thủ công bên ngoài Access như một phần của bảng tính hoặc báo cáo.

Đoạn mã sau loại bỏ nhu cầu xử lý các kết quả truy vấn bên ngoài Access và thay vào đó, sẽ cho phép bạn tạo ra loại kết quả được hiển thị ở trên một cách dễ dàng.

Trước tiên, hãy phác thảo những gì chúng ta muốn mã có thể thực hiện:

“Cho một truy vấn, trả về x số kết quả, kết hợp thành một chuỗi được phân cách bằng y”

Trước khi chúng tôi bắt đầu

Trước khi chúng ta xem mã, điều quan trọng cần lưu ý là mặc dù có thể tạo một hàm VBA tổng quát hơn và có khả năng xử lý bất kỳ kết hợp truy vấn nào, nhưng làm như vậy sẽ tạo ra mã khá dài, vì vậy những gì chúng ta sẽ làm trong bài viết này là định nghĩa một trường hợp mẫu và viết hàm xử lý trường hợp đó. Làm theo cách này sẽ giúp bạn dễ dàng tạo lại mã hơn để đáp ứng nhu cầu cụ thể của mình.

Trường hợp mẫu

Chúng tôi có cơ sở dữ liệu bán hàng lưu trữ thông tin chi tiết về giao dịch mua hàng của khách hàng, cùng với danh mục sản phẩm mà giao dịch mua đó thuộc về. Chúng tôi muốn tạo một báo cáo hiển thị 3 danh mục hàng đầu theo tháng theo thứ tự giảm dần.

Để đơn giản, chúng tôi sẽ giữ ví dụ trong một bảng duy nhất, mặc dù bảng chính sẽ hoạt động bất kể thiết lập của bạn như thế nào. Bảng chúng tôi sẽ sử dụng được thiết lập như sau:

Bán hàng
Tên khách hàng
Ngày Giao dịch
Giá trị giao dịch
Phân loại

Rõ ràng đây là một thiết lập quá đơn giản hóa, nhưng bạn hiểu ý.

Bây giờ - mã

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

Mã – giải thích

Mã VBANhư bạn thấy, đoạn mã khá dễ hiểu. Chúng ta bắt đầu bằng cách sử dụng các tham số được cung cấp để xây dựng truy vấn. Sau khi chuỗi truy vấn được tạo, chúng ta thực thi nó và lặp qua các kết quả, nối chúng lại với nhau để tạo thành chuỗi kết quả duy nhất mà chúng ta đang tìm kiếm.

Bạn sẽ nhận thấy rằng chúng tôi kiểm tra xem có nên thêm dấu phân cách vào chuỗi hay không – nếu không có bước kiểm tra này, bạn sẽ nhận được chuỗi kết quả được định dạng kém hoặc bạn sẽ phải thêm mã để xóa các dấu phân cách không mong muốn – cách này giữ cho mọi thứ tốt đẹp và gọn gàng ngay từ đầu.

Tất nhiên, bản thân hàm này có thể được gọi từ bên trong truy vấn, báo cáo hoặc bất kỳ nơi nào bạn muốn từ bên trong Access.

Sửa cơ sở dữ liệu truy cập bị hỏng

Nếu bạn gặp phải cơ sở dữ liệu Access bị hỏng Khi bạn chạy đoạn mã trên, tốt hơn hết bạn nên sử dụng một số công cụ chuyên dụng để sửa chữa chúng và khôi phục tất cả các bảng từ cơ sở dữ liệu bị hỏng.

Giới thiệu tác giả:

Mitchell Pond là một chuyên gia phục hồi dữ liệu trong DataNumen, Inc., công ty hàng đầu thế giới về công nghệ khôi phục dữ liệu, bao gồm sửa lỗi SQL và các sản phẩm phần mềm phục hồi excel. Để biết thêm thông tin, hãy truy cập www.datanumennăm

Chia sẻ ngay bây giờ:

Được đóng lại.