DCONCAT 域字符串合并函数
函数:DCONCAT
功能:连接指定的一组记录(域)中的一组值的字符串。
语法:DCONCAT(expr, domain, [criteria],[delimiter])
| 参数 | 说明 |
| expr | 表达式,用于标识要计算其记录数的字段。它可以是标识表或查询中字段的字符串表达式,也可以是对该字段中的数据执行计算的表达式。在 expr 中,可以包含表中字段的名称、窗体上的控件、常量或函数。如果 expr 包含一个函数,那么它可能是内置或用户定义的函数,但不是另一个域聚合函数或 SQL 聚合函数。 |
| domain | 字符串表达式,用于标识组成域的一组记录。它可以是表名称或不需要参数的查询的查询名称。 |
| criteria | 可选字符串表达式,用于限制对其执行 DCONCAT 函数的目标数据的范围。例如,criteria 通常等价于 SQL 表达式中的 WHERE 子句,但它没有单词 WHERE。如果 criteria 被省略,那么 DCONCAT 函数将针对整个域计算 expr。任何包含在 criteria 中的字段必须也是 domain中的字段;否则 DCONCAT 函数将返回 错误信息。 |
| delimiter | 可选字符串表达式,用于分隔各记录的字符串值。默认值为逗号"," 。 |
说明:可以在 Visual Basic、宏、查询表达式或者计算控件中使用 DCONCAT 函数。(ADO/DAO不支持)。
示例:
NewOrder
| ID | OrderID | Name | Quantity |
| 1 | 001021 | 五子棋 | 41 |
| 2 | 001021 | 象棋 | 54 |
| 3 | 001021 | 跳棋 | 545 |
| 4 | 001022 | 跳棋 | 45 |
| 5 | 001022 | 象棋 | 24 |
| 6 | 001023 | 五子棋 | 424 |
| 7 | 001023 | 跳棋 | 52 |
查询:
SELECT DISTINCT DCONCAT("DISTINCT Name","NewOrder","","/") As Name FROM NewOrder
| Name |
| 跳棋/五子棋/象棋 |
查询:
SELECT DISTINCT OrderID ,DCONCAT("Name","NewOrder","OrderID='" & OrderID & "'") As Name FROM NewOrder
| OrderID | Name |
| 001021 | 五子棋,象棋,跳棋 |
| 001022 | 跳棋,象棋 |
| 001023 | 五子棋,跳棋 |
函数实现:
Public Function DCONCAT(sExpr As String, sDomain As String, Optional sCriteria As String, Optional sDelimiter As String = ",")
On Error GoTo ErrHandler
Dim rs As New ADODB.Recordset
Dim sSQL As String
Dim sResult As String
sResult = ""
sSQL = "select " & sExpr & " from (" & sDomain & ")"
If sCriteria <> "" Then
sSQL = sSQL & " where " & sCriteria
End If
rs.Open sSQL, CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
Do While Not rs.EOF
If sResult <> "" Then
sResult = sResult & sDelimiter
End If
sResult = sResult & rs.Fields(0).Value
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
DCONCAT = sResult
Exit Function
ErrHandler:
If rs.State <> adStateClosed Then
rs.Close
End If
Set rs = Nothing
DCONCAT = Err.Number & " : " & Err.Description
End Function
同一字段分组合并.rar 例子..简体MDB...