Sección de código fuente Visual basic
En esta sexta parte voy a comentar los procedimientos que se utilizan en la botonera de registros, es decir los botones que avanzan y retroceden un registro, modificación, eliminación ,cuando se da de alta uno nuevo etc..
Cuando pinchamos el botón "Siguiente registro", se dispara una Sub llamada Siguiente_Reg. Este procedimiento tiene 2 parámetros, uno es el Recordset asociado a la sección donde estamos ubicados (rsClientes, rsPeliculas, rsProductos o rsProveedores) y el otro parámetro es un String que indica la sección. Por ejemplo si estoy ubicado en Clientes, se dispara el procedimiento de esta forma:
Call Siguiente_Reg (rsCliente, Ventana)
Donde Ventana en este caso llevaría el valor "Clientes"
El procedimiento:
'Procedimiento para posicionar los
recordset en el siguiente registro
'y luego poder mostrar los datos en los controles
'//////////////////////////////////////////////////////////////////////////////7
Private Sub Siguiente_Reg(rsNext As DAO.Recordset, sec As String)
On Local Error GoTo menerr
'Posicionamos el recordset en el siguiente
registro
rsNext.MoveNext
'Si no hay mas mostramos un mensaje que es
el último. El mensaje es un lable Oculto
'que se activa mediante un Timer
If rsNext.EOF = True Then
Label1(65) = "Ùltimo registro": Timer1(0).Enabled
= True
rsNext.MoveLast
Exit Sub
End If
'Secciones
Select Case sec
Case "Clientes"
Asignar_Datos_Clientes
Case "Peliculas"
Asignar_Datos_Peliculas
Case "Productos"
Asignar_Datos_Productos
Case "Proveedores"
Asignar_Datos_Proveedor
End Select
Exit Sub
'Error
menerr:
If Err.Number = 3021 Then MsgBox "No hay ningùn registro", vbInformation
+ vbOKOnly, App.EXEName: Exit Sub
End Sub
De esta manera utilizamos un solo procedimiento para las cuatro secciones que muestran los datos.
Así como hay un Procedimiento Sigiente_Reg para ir al siguiente registro, hay 3 mas: uno para el ir al anterior registro llamado Anterior_Reg, otro para posicionarse en el Primer registro llamado Primer_reg y otro para el último que se llama Ultimo_Reg. Todos estos funcionan de la misma forma, se les envía el Recordset asociado y la sección en donde estamos ubicados. Por ejemplo si estamos en la sección de Películas y presiono el botón para ir al último registro, se dispara el siguiente Procedimiento:
Call Ultimo_Reg (rsPeliculas ,"Películas")
Botón para eliminar Registros
Cuando eliminamos un registro se utiliza el procedimiento llamado Eliminar_Reg. Esta subrutina es muy similar a la de desplazamiento de registros ya que se le envía como parámetro el recordset asociado a la sección donde estamos ubicados, es decir cuando estamos es películas se envía el rsPeliculas, cuando estamos en Clientes rsClientes. El segundo parámetro es opcional, y se utiliza solo en las secciones de Películas y de Clientes. Este parámetro es la ruta de las carpetas de imágenes. Es decir que si el cliente tiene una foto, se elimina de la base de datos el nombre del archivo y también se elimina la imagen del disco. Lo mismo ocurre con las películas. En el caso de productos y proveedores, se ejecuta solo este procedimiento enviándole el Recordset sin enviar la ruta.
'Sub para la eliminación de
registros
'Este recibe le Recordset al cual se le va a eliminar el registro a actual
' y una variable que es opcional ("foto") que es solo para la ventana de
clientes y de películas
'//////////////////////////////////////////////////////////////////////////////////
Private Sub Eliminar_Registros(rsEliminar As DAO.Recordset, Optional sfoto
As String)
On Error GoTo men
If MsgBox("¿Desea realmente Eliminar este registro?", vbYesNo + vbExclamation,
"ADVERTENCIA: Eliminar registro") = vbNo Then
'Si presionamos cancelar salimos
Exit Sub
Else
'Si hay una imagen para la sección de clientes o
películas y estas no están vacías
'Eliminamos el archivo de imagen del disco
If sfoto <> "" Then
If CStr(rsEliminar!imagen) <> "" Then Kill (sfoto
& "\" & CStr(rsEliminar!imagen))
End If
'Si el recordset está posicionado en algún
registro entonces lo eliminamos
If rsEliminar.EOF And rsEliminar.BOF Then MsgBox "No hay registros
para eliminar", vbInformation + vbOKOnly, App.EXEName: Exit Sub
'Eliminamos
rsEliminar.Delete
rsEliminar.MoveLast
End If
Exit Sub
men:
MsgBox Err.Number & Err.Description
End Sub
Luego de que eliminamos el registro y termina esta rutina, el último procedimiento que se ejecuta es el de mostrar los datos en los controles. En el caso de Clientes Asignar_DatosClientes, en el caso de Peliculas Asignar_Datos_Peliculas etc...
Botón para Modificar Registros
Para modificar el registro actual cuando se presiona dicho botón, solo lo que se hace es ejecutar el procedimiento BloquearTextBox, que como se explicó anteriormente, esta única Sub lo que hace es bloquear y desbloquear mediante la propiedad Locked los TextBox de la sección donde estamos ubicados, mediante el operador Not. Debido a que cuando presionemos modificar siempre van a estar bloqueados, al entrar en la Sub mediante Not se hace lo contrario y se habilitan los TextBox para poder modificar los datos.
Por ejemplo si estamos en la sección de Clientes se ejecuta Call BloquearTextBox (txtClientes). Después de esto se ocultan los demás botones de la barra superior (atrás, adelante, modificar, nuevo, etc...) y se hacen visibles los botones llamados Command1(8) que es el botón de aceptar y Command1(9) que es el botón de Cancelar la operación. De este modo los botones de aceptar y cancelar solo están visibles cuando se modifica un registro o cuando se añade uno nuevo.
Siguiendo, si presionamos El Command1(8) es decir el de Aceptar para guardar los cambios realizados, primero se ejecuta la Función CamposVacios. Esta sencilla función de tipo Boolean sirve para validar en cada sección si no nos olvidamos de agregar datos en campos obligatorios, por ejemplo el nombre de una película, el nombre de un Producto etc.., si la función retorna True es por que comprobó que faltan datos, por lo tanto corta el hilo de la ejecución y muestra un mensaje "Debe rellenar todos los datos obligatorios etc...", si retorna False, quiere decir que está todo ok , entonces para guardar los cambios se dispara la Sub Modificar_Registro
Esta Sub tiene 2 parámetros y es muy parecida a las anteriores, en donde se le envía en el primer parámetro el Recordset y en el segundo la sección donde estamos. Por ejemplo si estoy modificando los datos de Proveedores se ejecuta de esta manera:
Call Modificar_Registro (rsProveedor, "Proveedores")
'Sub para la Edición de registros
'Este recibe le recordset al cual se le va a Editar el registro a actual
' y una variable (Sec) que determina en que ventana o sección estamos
'(clientes, películas etc.)
'--------------------------------------------------------------------------
Private Sub Modificar_Registro(rsEdit As DAO.Recordset, sec As String)
'Ponemos el registro en modo de edición
rsEdit.Edit
'Dependiendo de la sección llamamos a establecer_datos
de cada sección
Select Case sec
Case "Clientes"
Establecer_datos_Clientes
Case "Peliculas"
Establecer_datos_Peliculas
Case "Productos"
Establecer_datos_Productos
Case "Proveedores"
Establecer_datos_Proveedores
End Select
'Actualizamos los datos
rsEdit.Update
End Sub
Una vez que entró en la rutina y puso el registro actual en modo de edición, entra en el Select case correspondiente a la sección, y se llama a una Sub que tiene cada sección para grabar los datos en la Base de datos La sección de clientes llama a Establecer_datos_Clientes, Películas llama a Establecer_datos_Peliculas, etc...
Estas subrutinas que graban los datos, son prácticamente iguales en cada sección. por ejemplo la rutina que graba los datos de la sección Clientes es esta:
Private Sub Establecer_datos_Clientes()
'Cumpleños
rsCliente!Cumpleaños = DTPicker1(0) ' graba la fecha de nacimiento establecida
en el control DtPicker
'FechaAlta
If rsCliente!Codigo = "" Then rsCliente!fechaalta = Format(Now, "dd/mm/yyyy")
' La fecha de hoy
rsCliente!Nombre = CStr(txtClientes(0)) 'El nombre
rsCliente!Apellido = CStr(txtClientes(1)) 'El Apellido
rsCliente!direccion = CStr(txtClientes(2)) ' La Dirección
rsCliente!telefono = CStr(txtClientes(3)) ' El teléfono
rsCliente!dni = CStr(txtClientes(4)) ' Documento
rsCliente!celular = CStr(txtClientes(5)) ' móvil
rsCliente!email = CStr(txtClientes(6)) 'Correo
rsCliente!ciudad = CStr(txtClientes(7)) 'Ciudad
rsCliente!Notas = CStr(txtClientes(8)) ' Notas
'Para la Imagen
If grabarImagen Then
SavePicture Picture2(0).Image, App.Path & "\Resource\fotosClientes\"
& CStr(Label1(61)) & ".bmp"
rsCliente!imagen = CStr(Label1(61)) & ".bmp"
grabarImagen = False
End If
End Sub
El último paso después de grabar los datos es ocultar los botones de Aceptar y cancelar, volver a bloquear los TextBox de dicha sección y por último mostrar nuevamente los botones de Anterior registro, siguiente, nuevo, etc..
Botón para Nuevo Registro
Cuando ingresamos un nuevo registro, es muy parecido al de modificar. Primero se ejecuta una sub llamada Limpiar_textBox que se le envía el arreglo de textbox de la sección y que limpia todos los textbox para poder ingresar un nuevo registro. Seguido de esto se Desbloquean los TextBox con la Sub bloquearTextBox ya vista antes. Se ocultan los botones del para adelantar registros, Eliminar, nuevo etc..., y se visualizan los botones Command1(8) y command1(9) que son los de Aceptar y los de Cancelar.
Una vez ingresados los datos y que le damos al botón Aceptar, primero se ejecuta la función anterior CamposVacios para validar que los campos obligatorios de cada sección. Ahora para crear el nuevo registro se usa Nuevo_Registro . Esta rutina se le envía en el primer parámetro el recordset y en el segundo la sección:
'Sub que crea un nuevo registro. Dependiendo del recordset
recibido
'y de la seccion en la que estamos, es decir clientes, películas,
productos o proveddores
'///////////////////////////////////////////////////////////////////////////////////////////
Private Sub Nuevo_Registro(rsNew As DAO.Recordset, sec As String)
'Añadimos un nuevo registro
rsNew.AddNew
Select Case sec
Case "Clientes"
'Asignamos al reordset los datos llamando a Establecer_datos
Establecer_datos_Clientes
'actualizamos
rsNew.Update
'Nos posicionamos en el último
rsNew.MoveLast
'Mostramos los datos en los controles
Asignar_Datos_Clientes
Case "Peliculas"
Establecer_datos_Peliculas
rsNew.Update
rsNew.MoveLast
Asignar_Datos_Peliculas
Case "Productos"
Establecer_datos_Productos
rsNew.Update
rsNew.MoveLast
If MsgBox("Quiere agregar Stock para este producto?", vbQuestion
+ vbYesNo, App.EXEName & ": Agregar Stock") = vbYes Then
Command2_Click (4)
End If
Asignar_Datos_Productos
Case "Proveedores"
Establecer_datos_Proveedores
rsNew.Update
rsNew.MoveLast
Asignar_Datos_Proveedor
End Select
End Sub
Buscar en Recursos vb
Recursos visual basic - Buscar - Privacidad - Copyright © 2005 - 2009 - www.recursosvisualbasic.com.ar