在 UPDATE 查询上使用 ConcatRelated(VBA by Allen Browne)

问题描述 投票:0回答:1

将 sql 从 SELECT 查询转换为 UPDATE 查询时出现问题。最终目标是在一个单元格内获得一个串联列表,其中一个表中的一条记录在另一个表中具有 1+ 行且具有不同的值。常见的例子:

用户 职位代码
用户A 10
用户A 100
用户A 200
用户B 100
用户C 200
用户C 250

变成:

用户 职位代码
用户A 10、100、200
用户B 100
用户C 200、250

(以“,”作为分隔符)

我在 SELECT 查询上成功使用了 Allen Browne 的 ConcatRelated,如下

SELECT DOETrainingList.SUI, dbo_vw_EPIC_PRD_EMP_TEMPLATE.USER_ID
, GetList("LNK_TEMPLT_ID", "dbo_vw_EPIC_PRD_EMP_TEMPLATE", "USER_ID = """ & [dbo_vw_EPIC_PRD_EMP_TEMPLATE].[USER_ID] & """","",Chr(13) & Chr(10)) AS TemplateIds
FROM DOETrainingList INNER JOIN dbo_vw_EPIC_PRD_EMP_TEMPLATE ON DOETrainingList.EMPDOT1 = dbo_vw_EPIC_PRD_EMP_TEMPLATE.USER_ID
GROUP BY DOETrainingList.SUI, dbo_vw_EPIC_PRD_EMP_TEMPLATE.USER_ID;

(注意我将函数更改为“GetList”) 这将返回一个数据表,其中包含表 DOETrainingList 中的每一行和一个新的列 TemplateID,该列 TemplateID 填充模板的串联列表,其中 dbo_vw_EPIC_PRD_EMP_TEMPLATE.USER_ID 在同一个表中与自身匹配。这里一切看起来都不错。

但我似乎无法让它在更新查询上工作。

这是我所拥有的:

UPDATE DOETrainingList INNER JOIN dbo_vw_EPIC_PRD_EMP_TEMPLATE ON DOETrainingList.EMPDOT1 = dbo_vw_EPIC_PRD_EMP_TEMPLATE.USER_ID 
SET DOETrainingList.EMP1110 = GetList("LNK_TEMPLT_ID","dbo_vw_EPIC_PRD_EMP_TEMPLATE","DOETrainingList.EMPDOT1 = """ & dbo_vw_EPIC_PRD_EMP_TEMPLATE.USER_ID & """","",Chr(13) & Chr(10));

运行此查询时出现错误“操作必须使用可更新查询”

sql vba ms-access concatenation
1个回答
0
投票

在我看来,函数标准参数中的字段向后。另外,如果您想使用 VBA 函数保存 dbo_vw_EPIC_PRD_EMP_TEMPLATE 中的聚合数据,请不要在 UPDATE 操作中 JOIN 到此表。

UPDATE DOETrainingList SET EMP1110 = 
GetList("LNK_TEMPLT_ID", "dbo_vw_EPIC_PRD_EMP_TEMPLATE", "USER_ID='" & EMPDOT1 & "'", "", Chr(13) & Chr(10));

如果ID字段是数字类型,请勿使用撇号分隔符。

© www.soinside.com 2019 - 2024. All rights reserved.