如何在訪問中的單個查詢字段中顯示多個結果

立即分享:

如果您曾經需要從資料庫中產生一個包含欄位/查詢值和其他資訊的分隔列表,您就會知道這絕非易事——大多數人甚至認為這是不可能的任務。例如,如果您被要求產生一份報告,列出一年中每個月銷售額排名前五的銷售人員(按降序排列),或者列出距離每位客戶最近的三家門店,那麼您可能最終只能使用交叉表查詢或在 Access 之外手動合併結果。但是,借助一些 VBA 程式碼,您只需幾分鐘即可產生如下所示的結果…

約翰,莎莉,比爾
莎莉,亞當,約翰
亞當,莎莉,比爾

在很多情況下,可以顯示分隔的結果列表作為較大查詢的一部分會很有用-每個銷售代表的前3名最大客戶的列表,離您每位支出最高的客戶最近的5家商店,清單繼續。

停止將報告拼接在一起

女士訪問儘管獲取詳細信息來創建這種報告是不止可能的,但是您通常最終不得不在Access之外將結果手工拼接在一起,作為電子表格或報告的一部分。

以下代碼消除了在Access之外擺弄查詢結果的需要,相反,它使您可以輕鬆產生上面顯示的那種結果。

首先,讓我們概述一下我們希望代碼能夠執行的操作:

“給出一個查詢,返回x個結果,並組合成一個由y分隔的字符串”

開始之前

在查看代碼之前,需要特別注意的是,雖然可以創建一個更通用的VBA函數,並且能夠處理任何查詢組合,但是這樣做會導致代碼很冗長,因此我們在本文中將做是定義示例案例並編寫函數來處理該案例。 這樣做可以使您更輕鬆地重新創建代碼以滿足您的特定需求。

樣品盒

我們有一個銷售數據庫,用於存儲客戶購買的詳細信息以及該購買所屬的產品類別。 我們要生成一個報告,該報告按月顯示降序排列的前3個類別。

為簡單起見,儘管示例主體不管您的設置如何,都將其保留在單個表中。 我們將使用的表設置如下:

銷售
顧客姓名
交易日期
交易價值
項目類別

顯然,這是一個過於簡化的設置,但是您知道了。

現在–代碼

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

代碼–解釋了

VBA代碼如您所見,這段程式碼非常直觀易懂。我們首先使用提供的參數建構查詢。查詢字串建立完成後,我們執行它並遍歷結果,將它們連接起來,形成我們想要的單一結果字串。

您會注意到,我們檢查了是否應在字符串中添加定界符-如果沒有此項檢查,您最終會得到格式錯誤的結果字符串,或者必須添加代碼來刪除不需要的定界符–這種方式從一開始就使事情保持整潔。

當然,該函數本身可以從查詢,報告中或在Access中喜歡的任何位置調用。

修復損壞的訪問數據庫

如果遇到 損壞的Access數據庫 當您運行上述代碼時,最好使用一些專用工具修復它們並從損壞的數據庫中恢復所有表。

作者簡介:

Mitchell Pond是 DataNumen,Inc.是數據恢復技術的全球領導者,包括 修復SQL問題 和excel恢復軟件產品。 欲了解更多信息,請訪問 萬維網。datanumen.COM

立即分享:

評論被關閉。