非常感谢可以提供给Access和VB菜鸟的任何帮助。我要做的是连接一个表中的值,并将其作为逗号分隔值插入另一个表中的字段。我正在尝试将所有服务器名称称为Linux框,并将它们连接到不同的字段中。
表A看起来像这样
Machine Name | Zone | Operating System
----------------------------------------
Server01 Zone A Linux
Server02 Zone B Linux
Server03 Zone A Windows
Server04 Zone C Windows
Server05 Zone B Solaris
表B包含我要插入的字段:Affected_Machine_Names。
现在,我已经尝试查看Concatenate / Coalesce帖子,但Access中的SQL视图不喜欢Declare语句。我的VB技能很糟糕,我似乎无法让代码在VB for Applications中运行。不幸的是,我无法将此数据库转换为我们的SQL场,因为我目前没有可用的服务器来托管它。
有人能指出我正确的方向吗?
答案 0 :(得分:4)
您可以使用Allen Browne的Concatenate values from related records。从该网页复制功能代码并将其粘贴到新的标准模块中。保存模块并为模块提供与函数名称不同的名称; modConcatRelated可以工作。
然后我认为你应该能够在查询中使用该功能,即使你不熟练使用VBA。
首先注意我更改了TableA中的字段名称以替换带下划线的空格。有了这个改变,这个查询...
SELECT
sub.Operating_System,
ConcatRelated("Machine_Name", "TableA",
"Operating_System = '" & sub.Operating_System & "'") AS Machines
FROM [SELECT DISTINCT Operating_System FROM TableA]. AS sub;
...生成此结果集:
Operating_System Machines
Linux Server01, Server02
Solaris Server05
Windows Server03, Server04
如果您不能像我一样重命名字段,请使用单独的查询来选择不同的操作系统。
SELECT DISTINCT TableA.[Operating System]
FROM TableA;
将其保存为qryDistinctOperatingSystems,然后在此版本的主查询中使用它:
SELECT
sub.[Operating System],
ConcatRelated("[Machine Name]", "TableA",
"[Operating System] = '" & sub.[Operating System] & "'") AS Machines
FROM qryDistinctOperatingSystems AS sub;
答案 1 :(得分:1)
这是一个相当基本的VBA函数,它将循环遍历列中的每一行,并将其连接到逗号分隔的结果字符串。例如,对于您的示例,它将返回“Server01,Server02,Server03,Server04,Server05”。 (不要忘记替换列名和表名)
Function ConcatColumn(OS As String) As String
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("Select * from TableA")
Dim result As String
'For every row after the first, add a comma and the field value:
While rst.EOF = False
If rst.Fields("Operating System") = OS Then _
result = result & ", " & rst.Fields("MyValue")
rst.MoveNext
Wend
'Clean it up a little and put out the result
If Left(result, 2) = ", " Then result = Right(result, Len(result) - 2)
Debug.Print result
ConcatColumn = result
End Function
要使用它,
1. ConcatColumn("Windows")
将返回“Server04,Server03”
2. ConcatColumn("Linux")
将返回“Server01,Server02”
3. ConcatColumn("Solaris")
将返回“Server05”
4. ConcatColumn("")
将返回“”。