在VBA / ADO中,基于多个记录中的字段值的连接来创建rs字段

时间:2019-02-27 22:37:21

标签: sql excel vba ms-access access-vba

我有一个包含2个字段的MDB表:

+-------------+------------------+
| salesperson | Transaction_Date |
+-------------+------------------+
| John        | 12/11/2018       |
| John        | 13/11/2018       |
| John        | 18/11/2018       |
| Steeve      | 23/12/2018       |
| Steeve      | 29/12/2018       |
+-------------+------------------+

在VBA(在Excel中)中,我想通过ADO创建以下格式:

+-------------+----------------------------------+
| salesperson |  Transaction_Date_Concatenated   |
+-------------+----------------------------------+
| John        | 12/11/2018-13/11/2018-18/11/2018 |
| Steeve      | 23/12/2018-29/12/2018            |
+-------------+----------------------------------+

每个销售人员的Transaction_Dates数量可能从1到30不等。

下面的SQL为每个销售人员创建一条记录,但是虽然看起来像我想要的方向,但是它当然不会产生连接的字段

SQL = " SELECT SalesPerson, max(Date)  as value1  FROM 0TargetTemplate   GROUP BY SalesPerson"

2 个答案:

答案 0 :(得分:0)

据我所知,这不能仅使用SQL来实现。您将需要使用VBA函数来遍历记录并构造定界字符串。

艾伦·布朗(Allen Browne)创建了一个现有示例,可以在here中找到。

对于您的特定任务,您可以通过以下方式调用该函数:

select
    [0TargetTemplate].SalesPerson, 
    ConcatRelated
    (
        "[0TargetTemplate].Transaction_Date", 
        "[0TargetTemplate]", 
        "[0TargetTemplate].SalesPerson = '" & [0TargetTemplate].SalesPerson & "'",
        "[0TargetTemplate].Transaction_Date",
        "-"
    ) as Transaction_Date_Concatenated
from
    [0TargetTemplate];

答案 1 :(得分:0)

使用来自TTITLE的建议代码和功能,我在VBA Access中编写了一个过程,但是在 Set rs = 语句中收到“参数太少”错误。我在具有正确连接的VBA EXCEL中进行了尝试,但是尽管在VBA模块中正确引用了该错误,但仍收到有关无法识别“ ConcatRelated ”功能的错误

Sub test()
SQL = "SELECT [tblOrders].CompanyName, ConcatRelated ('[tblOrders].Transaction_Date',[tblOrders], [tblOrders].SalesPerson =' [tblOrders].SalesPerson', [tblOrders].Transaction_Date) AS Transaction_Date_Concatenated FROM tblOrders;"
Set rs = CurrentDb.OpenRecordset(SQL)
 On Error GoTo resultsetError
 dbValue = rs!Variable
 MsgBox dbValue, vbOKOnly, "RS VALUE"
resultsetError:
 MsgBox "Error Retrieving value from database", vbOKOnly, "Database Error"

End Sub