2 jennyhappy1 jennyhappy1 于 2015.05.27 16:02 提问

Access中定义GroupConcat函数时, .显示用户定义类型未定义,怎么修改?

定义的函数如下:
Public Function GroupConcat(sColumn As String, sTable 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 " & sColumn & " from " & sTable
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
GroupConcat = sResult
Exit Function
ErrHandler:
If rs.State <> adStateClosed Then
rs.Close
End If
Set rs = Nothing
GroupConcat = Err.Number & " : " & Err.Description
End Function

该函数可以实现多行合并为一行吗?

2个回答

zsz459520690
zsz459520690   2015.05.27 16:05

同问。。。。。。。。。。。。。。。。。。。。。。。。

Tiger_Zhao
Tiger_Zhao   Rxr 2015.05.27 16:10

你要在哪里用?
自定义函数只能在 Access 的 VBA 内部使用。
外部程序通过 ADO 连接 Access 是不能使用自定义函数的。

Tiger_Zhao
Tiger_Zhao 回复jennyhappy1: 你没有真正在内部使用吧。创建一个查询,里面使用GroupConcat还报错不?
2 年多之前 回复
jennyhappy1
jennyhappy1 回复Tiger_Zhao: 改了以后还是相同的问题。应该是在GroupConcat函数定义时就出现问题了
2 年多之前 回复
Tiger_Zhao
Tiger_Zhao 回复jennyhappy1: GroupConcat('Course','T_Person_Course','Name='''+ Name +'''') AS Course
2 年多之前 回复
jennyhappy1
jennyhappy1 就是在“创建”菜单栏中的“宏”下的“模块”中创建的,应该是内部。但是运行时显示用户定义类型未定义,不知道是不是模块定义的不对。麻烦您帮我看一下啦,纠结这个好久了
2 年多之前 回复
Tiger_Zhao
Tiger_Zhao 回复jennyhappy1: 内部是可以用的。
2 年多之前 回复
jennyhappy1
jennyhappy1 在access内部用,后面打算用以下语句来实现不同行字符串的合并,SELECT T_Person_Course.Name, GroupConcat('Course','T_Person_Course','Name=' & "'" & Name & "'") AS Courses FROM T_Person_Course GROUP BY name; 不知道可行不?恳请给予指导一下
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片