Por: Roberto Alvarado
Capitulo 8
En este capítulo vamos a empezar a trabajar con las tablas, crearemos nuevos registros, vamos a modificarlos y a eliminarlos. Aquí vamos...
Muy bien, para empezar vamos ha hacer algunas consideraciones:
- En eMbedded Visual Basic, existe un Bug con respecto a la liberación de memoria, eso en palabras mas castizas quiere decir, que si abrimos un objeto connection este no se va a eliminar de la memoria hasta que no cerremos la aplicación igualmente va a suceder con el objeto recordset. Igual sucede con todos los objetos que creemos con CreateObject. La intrusión Set Objeto = Nothing NO LIBERA MEMORIA. ¡Tengan en cuenta esto!
- Como ya habíamos utilizado un objeto connection y un objeto recordset, vamos a cambiar de posición su definición para hacerlos públicos y que podamos accesarlos desde cualquier punto de nuestra aplicación. Todo esto para aplicar la teoría que todos hemos discutido en muchos foros acerca de la liberación de memoria o de su uso en EVB. Esta posición y línea de desarrollo es mía, no quiere decir en ningún momento que ustedes deban seguirla, lo único que trato es de decirles como es más optimo para que en lo posible no halla problemas mas tarde con la memoria.
Muy bien, entonces nos vamos a ir al módulo que creamos y vamos a escoger el procedimiento CrearBasedatos, para corregir algunas líneas del código:
Dim rs As ADOCE.Recordset
Dim cnn As ADOCE.Connection
Estas líneas que están en el procedimiento CrearBaseDatos, las vamos a eliminar y la vamos a colocar en la sección de definiciones del módulo de esta manera:
Option Explicit
Public rs As ADOCE.Recordset
Public cnn As ADOCE.Connection
Ahora las instrucciones:
Set rs = Nothing
Set cnn = Nothing
Que están en el procedimiento CrearBaseDatos, del módulo, las trasladamos al evento Terminate de la forma:
Private Sub Form_Terminate()
Set rs = Nothing
Set cnn = Nothing
End Sub
También debemos trasladar al evento Load de la forma la apertura de objeto connection, esto quedaría de esta manera:
'Verifico si existe el archivo CDB
If FileSystem1.Dir(App.Path & "Tareas.cdb") = "" Then
'No existe el Archivo
Call CrearBaseDatos
End If
Set cnn = CreateObject("ADOCE.Connection.3.0")
cnn.Open App.Path & "Tareas.cdb"
Después de verificar que el archivo de la base de datos existe para que no saque error al intentar abrir la conexión.
Ahora hasta este momento las opciones del menú Acción están Activas, estas opciones no deben activarse hasta que no se escoja alguna de las opciones del menú Tablas.
Vamos a desactivar estas opciones de la siguiente forma, esto lo colocamos en el evento Load de la Forma:
'Configuro menu Accion
mnuAccion.Items("mnuNuevo").Enabled = False
mnuAccion.Items("mnuEditar").Enabled = False
mnuAccion.Items("mnuBorrar").Enabled = False
mnuAccion.Items("mnuCancelar").Enabled = False
mnuAccion.Items("mnuGuardar").Enabled = False
mnuAccion.Items("mnuCerrar").Enabled = False
Además eliminamos del evento Load las instrucciones Set ... Nothing y las trasladamos al evento Terminate de la forma, con esto el código quedaría de esta manera:
Private Sub Form_Terminate()
Set rs = Nothing
Set cnn = Nothing
' Luego que los botones y los menus son agregados
' al MenuBar, los Objectos se liberan
Set mnuTablas = Nothing
Set mnuAccion = Nothing
Set btnSepara = Nothing
Set btnInicio = Nothing
Set btnSigte = Nothing
Set btnPrevio = Nothing
Set btnFin = Nothing
End Sub
Muy bien ya hemos ajustado todo lo necesario, ahora continuemos, cada vez que escojamos alguna de las opciones del menú Tablas debemos activar las opciones del menú Acción para esto utilizamos el procedimiento ActivarMenu
Sub ActivarMenu(ByRef mnuAccion As MenuBarMenu)
mnuAccion.Items("mnuNuevo").Enabled = True
mnuAccion.Items("mnuEditar").Enabled = True
mnuAccion.Items("mnuBorrar").Enabled = True
mnuAccion.Items("mnuCerrar").Enabled = True
End Sub
Observen que estamos utilizando ByRef para indicarle que el objeto mnuAccion debe cambiar en la forma.
También debemos sacar la definición de las variable mnuTablas y mnuAccion a la sección de definiciones de la forma.
Cuando escojamos la opción Nuevo del menú Acción, las opciones anteriores deben restringirse y activar las opciones Cancelar y Grabar, para eso crearemos un procedimiento llamado ActivarGuardar en el modulo. El código es el siguiente:
Sub ActivarGuardar(ByRef mnuAccion As MenuBarMenu, ByRef mnuTablas As MenuBarMenu)
mnuAccion.Items("mnuNuevo").Enabled = False
mnuAccion.Items("mnuEditar").Enabled = False
mnuAccion.Items("mnuBorrar").Enabled = False
mnuAccion.Items("mnuCancelar").Enabled = True
mnuAccion.Items("mnuGuardar").Enabled = True
mnuAccion.Items("mnuCerrar").Enabled = False
mnuTablas.Items("mnuTabTareas").Enabled = False
mnuTablas.Items("mnuTabClientes").Enabled = False
mnuTablas.Items("mnuTabApp").Enabled = False
End Sub
Además desactivamos las opciones del menú Tablas, con esto aseguramos que mientras estemos creando un registro nuevo de algún tipo, no van a abrir cualquiera de las otras opciones del menú Tablas.
Ahora vamos a codificar cuando escojamos la opción Nuevo del menú Acción
2 comentarios:
A ver Roberto; para mi terminó tu tutorial, el motivo es porque me da error al querer ejecutar la sub ActivarMenu(.... y me ha dejado bloqueado por mas que miro en internet no consigo información.
-an error was encountered while running program: Wrong nunber of arguments or invalid property assigment: ActivarMenu.-
¿Me hechas una mano?
deph2o_mr@hotmail.com
Hola,
Verificaste que el parametro que le pasas al procedimiento esta correcto, es del tipo correcto, o sea un control menu?
Y no encuentras informacion en internet, pues esta herramienta ya dejo de ser soportada por MS.
Saludos,
Publicar un comentario