Sección de código fuente Visual basic
En esta quinta parte, voy a comentar lo principal sobre el código del formulario FrmPrincipal , por si ya te olvidaste es el que de altas, bajas y modificaciones de datos de Clientes, películas etc..
Cuando arranca el Formulario FrmPrincipal, el primer procedimiento que se ejecuta es ComprobarDSN. Esta Sub comprueba si el DSN de usuario llamado VideoClub está creado. Esto lo implementé porque al principio pensaba extender el programa para que la base de datos se pueda consultar desde otra pc. Por lo tanto este procedimiento está demás, y se podría eliminar, y hacer una conexión sin utilizar un DSN. Esta es otra de las cosas que se puede modificar, aunque el programa de esta manera funciona sin problema alguno.
Siguiendo, si este procedimiento para obtener los Dsn no lo encuentra creado, se ejecuta otra Sub llamada GenerarDSN para poder crearlo, si lo encuentra hace un Exit Sub y sale.
Luego de comprobar el Dsn, se ejecuta una sub llamada CargarCombos. Esta rutina carga todos los combos que hay en el FormPrincipal, es decir los ComboBox de las pantallas de Clientes, películas, Productos y Proveedores (Combos de Proveedores, sistemas de película, Ubicación, género etc...).
Cuando terminó de cargar los datos en los combo de las cuatro secciones, se llama a la siguiente Sub:
Public Sub Primer_Registro(rsFirs As DAO.Recordset, sec As String)
Esta sub rutina pública se encarga de mostrar el primer registro de cada sección. El primer parámetro es el recordset y el segundo es la sección. Osea que esta rutina se ejecuta 4 veces:
Esta se encarga del primer registro de Clientes
Primer_Registro rsCliente, "Clientes"
Esta de Películas
Primer_Registro rsPelicula, "Peliculas"
De Productos
Primer_Registro recProductos, "Productos"
De proveedores
Primer_Registro recProveedores, "Proveedores"
Cada Recordset en esta instancia ya tiene cargados los datos, ya que estos se cargan en el inicio del Mdi_Form y no de este formulario (frmPrincipal). En las próximas páginas detallo este punto.
...y como dije el otro parámetro es la sección, que es un String que sirve para diferenciar dentro de la rutina Primer_Registro , mediante un Select Case la sección a cargar
'Muestra los datos correspondientes
de cada ventana
'///////////////////////////////////////////////////////////////////////////
Public Sub Primer_Registro(rsFirs As DAO.Recordset, sec As String)
'Si no hay ningun registro salimos
If (rsFirs.BOF) And (rsFirs.EOF) Then
MsgBox "No hay ningùn registro de: " & UCase$(sec), vbInformation
+ vbOKOnly, "GestorVideo"
Exit Sub
End If
'Movemos al primer registro
rsFirs.MoveFirst
Select Case sec
Case "Clientes"
'Mostramos los datos de clientes
Asignar_Datos_Clientes
Case "Peliculas"
'Mostramos los datos de Películas
Asignar_Datos_Peliculas
Case "Productos"
'etc...
Asignar_Datos_Productos
Case "Proveedores"
Asignar_Datos_Proveedor
End Select
End Sub
Para cada una de las cuatro secciones si se fijan, hay una subrutina que es la que asigna los datos a los controles de cada sección, es decir carga los datos en los TextBox, Labels, DtPicker y PictureBox (en caso de la sección Clientes y de Películas).
Acá solo muestro Sub la sección de Películas, ya que las cuatro son prácticamente iguales y las rutinas se llaman Asignar_Datos_Producto, Asignar_Datos_Proveedor y Asignar_Datos_Clientes
Nota: No se me ocurrió como poder simplificar una sola Rutina que haga todo en vez de tener 4. Si se les ocurre alguna idea, acá tienen otra opción a optimizar.
Public Sub Asignar_Datos_Peliculas()
On Local Error GoTo menerr
cancelarChangeCombo = True
Label1(63) = CInt(rsPelicula!Codigo) 'Muestra
el código de la película
txtPel(0) = CStr(rsPelicula!Nombre) 'El nombre
Combo1(0) = CStr(rsPelicula!proveedor) 'El
proveedor
txtPel(1) = CStr(rsPelicula!director) 'El director
txtPel(2) = CStr(rsPelicula!actor) 'El Actor
Combo1(5) = CStr(rsPelicula!genero) 'El género
Combo1(4) = CStr(rsPelicula!Apto) 'La calificación
DTPicker1(1) = rsPelicula!Duracion 'La duración
de la misma en el control DtPicker
Combo1(1) = CStr(rsPelicula!formato) 'El formato
txtPel(3) = rsPelicula!precioalquiler 'El precio
de alquiler
txtPel(4) = rsPelicula!precio 'El precio de
Venta
txtPel(5) = rsPelicula!cobroretraso 'El precio
de cobro por retraso
Combo1(6) = CStr(rsPelicula!Ubicacion) 'La
ubicación
txtPel(6) = CByte(rsPelicula!DiasAlquiler) 'Los
días de alquiler de esta película en particular
Label1(59) = CByte(rsPelicula!copia) 'La cantidad
de copias disponibles
Label1(31) = CInt(rsPelicula!VecesVista) 'Las
veces que fue alquilada
Label1(68) = "Fecha de Alta: " & CStr(rsPelicula!fechaalta)
'La fecha de alta
txtPel(7) = CStr(rsPelicula!Descripcion) 'La
descripción de la película
'Carga la imagen si es que tiene, si el valor es Null o el campo
Ruta es una cadena vacía
If IsNull(rsPelicula!imagen) Or rsPelicula!imagen = "" Then
'Limpiamos el Picture
Picture2(1) = LoadPicture("")
Command2(7).Enabled = False
Else
'...si no cargamos la imagen
Picture2(1) = LoadPicture(App.Path & "\Resource\fotosvideo\"
& CStr(rsPelicula!imagen))
Command2(7).Enabled = True
End If
'Mostramos en el caption
del Command si es un estreno o no es un estreno
If rsPelicula!Estreno = 0 Then Command2(13).Caption = "Estreno:
No" Else: Command2(13).Caption = "Estreno: Si"
cancelarChangeCombo = False
Exit Sub
'Errores
menerr:
If Err.Number = 3021 Then Resume Next: Exit Sub
MsgBox Err.Description: Resume Next
End Sub
Por último culminando la explicación de la carga del FormPrincipal (el evento Load), se ejecutan las siguientes Rutinas:
BloquearTextBox txtClientes
BloquearTextBox txtPel
BloquearTextBox txtProd
BloquearTextBox tctProvedor
RedimensionarControles
La rutina BloquearTextBox es una sencilla Sub que lo que hace es bloquear los textBox de una sección determinada, para que de esta manera solo estén habilitados cuando se está añadiendo un nuevo registro o se está modificando:
'Procedimiento que bloquea los Textbox
Private Sub BloquearTextBox(txt As Object)
Dim i As Integer
For i = 0 To txt.Count - 1
txt(i).Locked = Not txt(i).Locked
Next
End Sub
En realidad esta rutina no solo bloquea los TextBox mediante la propiedad Locked, si no que también los desbloquea cuando necesitamos habilitarlos para edición. El parámetro txt de la Sub, es de tipo Object, de este modo podemos pasar un arreglo de controles. Los TextBox de la pantalla de clientes se llaman txtClientes, los de películas TxtPel, los de Productos TxtProd y los textbox de Proveedores TxtProveedor.
La subRutina RedimensionarControles, es una sub Privada, es decir exclusiva del FormPrincipal, y redimensiona todos los controles del mismo.
Nota: Esta rutina no está programada para poder redimensionar los controles en una resolución mas baja de 800 x 600, es decir por ejemplo que en una res de 640 x 480, algunos controles no se podrán visualizar ,quedando fuera del área de la pantalla.
En la próxima sección se sigue con la explicación del funcionamiento del FormPrincipal
Buscar en Recursos vb
Recursos visual basic - Buscar - Privacidad - Copyright © 2005 - 2009 - www.recursosvisualbasic.com.ar