Sei sulla pagina 1di 5

Ado - Cargar men dinmico

<Volver> - Anterior - Siguiente




Ejemplo que crea un men en forma dinmica con opciones de una
base de datos usando Ado como conexin

El ejemplo necesita tener creado en tiempo de diseo, un men oculto y con un
SubMen en una matriz, para poder crear los dems submenues en tiempo de
ejecucin con el mtodo Load.
Formualrio con el men popup cargado en tiempo de ejecucin


Los parmetros que hay que pasarle a la subrutina que crea el men popup en
tiempo de ejecucin con los datos de la base de datos, son tres :
Call Cargar_Menu(SubMenu, Sql, path_Bd)

SubMenu : Es el nombre del array de SubMenu.
Sql : cadena Sql para abrir el recordset que contendr los datos para los
Submenues
Path_Bd : Ruta de la base de datos

Ejemplo
1 - Crear un men con el editor de menues de visual basic, y como nombre
colocarle "MnuPopup"
2 - Dentro de este menu crear un SubMenu , y en la propiedad Index colocarle un 0
para que este forme una matriz y se puedan crear los dems


3 - Al men principal ( el creado en el punto 1, colocarle la propiedad visible en
False )


4 - Agregar la referencia a Ado desde el men referencias ( Microsoft Activex data
Objects )
5 - Agregar un mdulo bas al Proyecto

Cdigo fuente en el formulario
Texto planoCopiar cdigo fuenteImprimir
1. Option Explicit
2.
3. Private Sub Form_Load()
4.
5. Dim Sql As String
6.
7. Dim path_Bd As String
8.
9.
10. path_Bd = "C:\Archivos de programa\Microsoft Visual Studio\V
B98\nwind.mdb"
11.
12. Sql = "Select NombreCategora FROM Categoras"
13.
14. ' llama a la sub que crea el men _
15. cargando las opciones de la base de datos indicada
16. Call Cargar_Menu(SubMenu, Sql, path_Bd)
17.
18. End Sub
19.
20. Private Sub Form_MouseDown(Button As Integer, Shift As Integer,
_
21. X As Single, Y As Single)

22. If Button = vbRightButton Then
23. 'Mostramos el menu popup
24. Me.PopupMenu MnuPopup
25. End If
26. End Sub
27.
28. Private Sub SubMenu_Click(Index As Integer)
29. MsgBox SubMenu(Index).Caption, vbInformation
30. End Sub
Option Explicit
Private Sub Form_Load()

Dim Sql As String

Dim path_Bd As String


path_Bd = "C:\Archivos de programa\Microsoft Visual Studio\VB98\nwind.mdb"



Cdigo fuente en el mdulo bas
Texto planoCopiar cdigo fuenteImprimir
1. Option Explicit
2.
3. ' rutina que carga el men en tiempo de ejecucon
4. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''
5. Sub Cargar_Menu(El_Menu As Object, _
6. Sql As String, _
7. path_Bd As String)
8.
9. On Error GoTo ErrSub
10. ' cadena de conexin
11. Dim Connection_String As String
12. Dim i As Integer
13.
14. 'variable para la base de datos y el recordset
15. Dim cn As ADODB.Connection
16. Dim rst As ADODB.Recordset
17. ' le agrega el path de la base de datos al Connectionstring

18. Connection_String = "Provider=Microsoft.Jet.OLEDB.4.0;Data S
ource=" & _
19. path_Bd & ";Persist Security Info=False"

20.
21. ' Nuevo objeto Connection
22. Set cn = New ADODB.Connection
23.
24. cn.CursorLocation = adUseClient
25. 'Abre la conexin
26. cn.Open Connection_String
27.
28. 'Nuevo recordset
29. Set rst = New ADODB.Recordset
30. ' abre el recordset
31. rst.Open Sql, cn, adOpenStatic, adLockReadOnly
32.
33. 'Mueve al primer registro
34. rst.MoveFirst
35.
36. 'Por si hay Submenu cargados, los descarga a todos
37. For i = 1 To El_Menu.Count - 1
38. Unload El_Menu(i)
39. Next
40.
41. 'Recorre los registros
42. Do While Not rst.EOF
43. ' Asigna el caption del primer SubMenu
44. El_Menu(El_Menu.Count - 1).Caption = rst.Fields(0)
45.
46. 'Crea otro menu dinamicamente mediante Load
47. Load El_Menu(El_Menu.Count)
48.
49. 'Siguiente registro
50. rst.MoveNext
51. Loop
52.
53. 'Descarga y cierra la conexin y el recordset
54. rst.Close
55. Set rst = Nothing
56. cn.Close
57. Set cn = Nothing
58.
59.
60. Exit Sub
61.
62. 'Error
63. ErrSub:
64.
65. MsgBox Err.Description, vbCritical
66.
67. 'Descarga y cierra la conexin y el recordset
68. On Local Error Resume Next
69. rst.Close
70. Set rst = Nothing
71. cn.Close
72. Set cn = Nothing
73.
74. End Sub
Option Explicit
' rutina que carga el men en tiempo de ejecucon
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub Cargar_Menu(El_Menu As Object, _
Sql As String, _
path_Bd As String)

On Error GoTo ErrSub
' cadena de conexin

Potrebbero piacerti anche