Sección de código fuente Visual basic


Sistema de Video Club en Visual Basic - parte 5




Descargar el código fuente

<- Anterior : Siguiente ->

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

 

Descargar el código fuente

<- Anterior : Siguiente ->




Buscar en Recursos vb