Bueno
Set oConexion = SqlHelper.Get_Conexion 'es un clase que cree para que me devuelva una conexion Activa
Set oProceso = New SqlHelper.ProcesosSH 'este otro es una clase donde hay funciones que devuelven recordset
a las finales un recordset no soporta recursividad a esta funcion le ayudo con un boomark
Public Function Listar_SubMenu(ByVal sMenu As String) As String
Dim sql As String
'sql = "Select ID,Sub_Menu,Descripcion from Menu where Sub_Menu='" + sMenu + "' ORDER BY ID"
sql = "Select ID,Sub_Menu,Descripcion from Menu"
Set oConexion = SqlHelper.Get_Conexion
Set oProceso = New SqlHelper.ProcesosSH
Set rsTemporal = oProceso.Execute_rsRead_Table(oConexion, sql)
rsTemporal.MoveFirst
Call Buscar_Sub_Menu(rsTemporal, sMenu, 1)
Listar_SubMenu = RPT
SqlHelper.Desconectar oConexion
Set oProceso = Nothing
Set rsTemporal = Nothing
End Function
Private Function Buscar_Sub_Menu(ByRef rs As ADODB.Recordset, ByVal SubMenuID As String, ByVal level As Integer) As String
Dim bm As String
rs.Find "Sub_Menu = '" + SubMenuID + "'"
Do While Not rs.EOF
If rs!Sub_Menu <> SubMenuID Then Exit Function
'Debug.Print String$(level, 9) & rs!ID & " " & rs!Sub_Menu
bm = rs.Bookmark
Dim EstadoMenu As String, Estado As String
EstadoMenu = oProceso.Execute_rsEscalar(oConexion, _
"Select ES.Descripcion from UsuarioxMenu MU Inner Join Estados ES ON(MU.EstadoID=ES.ID) Where MU.MenuID = '" + rs!ID + "'")
If EstadoMenu = "0" Then
Estado = "No"
Else
Estado = "Si"
End If
RPT = RPT + "/" + rs!ID + "-" + rs!Descripcion + "-" + Estado
Buscar_Sub_Menu rs, rs!ID, level + 1
rs.Bookmark = bm - 0 'esta es la parte graciosa jajaja porque si no le resto 0 sale error , xD
rs.MoveNext
Loop
Buscar_Sub_Menu = RPT
End Function