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
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)