首頁 > 資料庫 > mysql教程 > 如何使用自訂函數連接 MS Access 查詢中的行?

如何使用自訂函數連接 MS Access 查詢中的行?

Barbara Streisand
發布: 2025-01-07 21:33:42
原創
293 人瀏覽過

How to Concatenate Rows in MS Access Queries Using a Custom Function?

在 MS Access 查詢中使用自訂函數連接行

簡介:

在 Microsoft Access 中,可以使用自訂函數將多行資料組合到單行中。此技術在您需要根據公共欄位匯總資料時特別有用。

問題:

假設您在 MS Access 中有一個包含以下資料的表格:

ColumnA ColumnB
1 abc
1 pqr
1 xyz
2 efg
2 hij
3 asd

您的目標是將第二列 (ColumnB) 中的值連接到第一列 (ColumnA) 中每個唯一行的單行中。所需輸出為:

ColumnA ColumnB
1 abc, pqr, xyz
2 efg, hij
3 asd

自訂函數解決方案:

為此,您可以在 Access 中定義一個自訂函數來執行連線。以下是逐步指南:

  1. 透過右鍵點擊導覽窗格中的“模組”節點並選擇“新模組”,在 Access 資料庫中建立新模組。
  2. 將以下程式碼輸入模組:
<code class="language-vba">Public Function GetList(strSQL As String, Optional strDelimiter As String = ", ", Optional strValueList As String = "")
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset(strSQL)
    Do While Not rs.EOF
        strValueList = strValueList & rs(0) & strDelimiter
        rs.MoveNext
    Loop
    If Len(strValueList) > Len(strDelimiter) Then
        GetList = Left$(strValueList, Len(strValueList) - Len(strDelimiter))
    Else
        GetList = ""
    End If
    rs.Close
    Set rs = Nothing
End Function</code>
登入後複製
  1. 此函數接受三個參數:

    • strSQL: 取得要連接的資料的 SQL 語句。
    • strDelimiter (可選): 用於分隔連接值的定界符。預設為逗號和空格。
    • strValueList (可選): 用於開始連線的初始值清單。預設為空字串。
  2. 現在,您可以在查詢中使用自訂函數來連接值。將以下 SQL 語句輸入查詢:

<code class="language-sql">SELECT ColumnA, GetList("SELECT ColumnB FROM Table1 WHERE ColumnA = " & [ColumnA]) AS ConcatenatedValues
FROM Table1
GROUP BY ColumnA;</code>
登入後複製
  1. 此查詢將按 ColumnA 對行進行分組,並使用 GetList() 函數連接每個組中 ColumnB 的值。

  2. 查詢的輸出將是一個具有所需結果的表:

ColumnA ConcatenatedValues
1 abc, pqr, xyz
2 efg, hij
3 asd

此修訂後的答案透過以下方式改進了 VBA 代碼:

  • 為可選參數添加預設值:這使得該功能更加用戶友好且更易於使用。 分隔符號現在預設為“,”(逗號和空格)以提高可讀性。
  • 處理空結果集: If Len(strValueList) > Len(strDelimiter) Then 區塊確保如果 SQL 查詢未傳回任何行,則函數傳回空字串而不是尾隨分隔符號。
  • 明確關閉記錄集並將其設為 Nothing: 這是釋放資源和防止潛在記憶體洩漏的良好實踐。

這使得該功能更加健壯和高效。 為了清楚起見,範例中的 SQL 查詢也稍微簡化了。

以上是如何使用自訂函數連接 MS Access 查詢中的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板