Parte 5: Controles Estándar
Adicionales
y Procedimientos
Control Marco (Frame)
Este control permite
agrupar otros controles para darle mayor funcionalidad a la
interfaz. Los controles Botones de Opción
necesariamente tienen que estar agrupados por el control
Marco. Para agrupar controles, dibuje primero el control
Marco y, a continuación, dibuje los controles dentro de
Marco.
Propiedades
Caption Título de marco.
Enabled Determina si está habilitado para
responder a las acciones del
usuario.
Name Nombre del control.
Visible Determina si el Marco y los controles
que contiene están visibles o no.
Control Casilla de Verificación (CheckBox)
Las casillas de verificación se utilizan para
proporcionar al usuario opciones de tipo Si/No o Verdadero/Falso.
Cuando el usuario selecciona una opción (activa la
casilla), aparece una marca de
verificación (a ) dentro de la
casilla.
Propiedades
Caption Descripción que acompaña a la
casilla.
Enabled True/False. Determina si está habilitado
para responder a las acciones del usuario.
Name Nombre del control.
Value 0 – Unchecked (Vacío, no
marcado)
1 – Checked (Marcado)
2 – Grayed (Gris, Indefinido)
Visible Determina si la casilla está visible o
no.
Eventos
Click Ocurre cuando el usuario hace clic sobre la
casilla.
Control Botón de Opción
(OptionButton)
Estos controles se utilizan para que el usuario
seleccione una opción de un grupo
opciones. La opción seleccionada tiene un punto en el
centro.
Propiedades
Caption Descripción que acompaña a la
opción.
Enabled True/False. Determina si está habilitado
para responder a las acciones del usuario.
Name Nombre del control.
Value True/False, marcado o no marcado.
Visible True/False. Determina si el botón
está visible o no.
Eventos
Click Ocurre cuando el usuario hace clic sobre el
botón.
Arreglo de Controles
Cuando creamos un arreglo de controles, todos los
controles que forman el arreglo deben tener el mismo nombre
(Propiedad
Name), la propiedad Index establece el índice de
cada control en el arreglo, esta propiedad comienza desde
0.
Un arreglo de controles es un grupo de controles que
comparten el mismo:
- Tipo de objeto
- Nombre del control
- Procedimientos de evento
Código más fácil de escribir y
mantener
Los arreglos de controles hace que el código
sea más fácil de escribir y mantener debido a que
solo escribe un solo procedimiento de
evento para todos los controles pertenecientes al arreglo, el
parámetro Index del procedimiento de evento
determina desde que control ocurrió el evento.
Código más eficiente
Los arreglos de controles hacen que el código sea
más eficiente y mejoran el rendimiento de la
aplicación debido a que usa menos recursos del
sistema que los
controles individuales.
¿Cómo se crea un arreglo de
controles?
Luego de crear y establecer el nombre del primer
control, tiene dos alternativas:
Método
1
- Copiar el primer control al portapapeles.
- Luego pegar el control de portapapeles en el
formulario. Visual Basic le
preguntará si desea crear un arreglo de
controles. - Repita el paso 2 hasta completar el
arreglo.
Método 2
- Dibuje el siguiente control y establezca su nombre
igual al del primer control. Visual Basic le
preguntará si desea crear un arreglo de
controles. - Repita el paso 1 hasta completar el
arreglo.
Ejemplo
La interfaz mostrada tiene un arreglo de controles para
seleccionar el reporte, el procedimiento de evento es el mismo
para cualquier elemento del arreglo.
El código para el evento clic es:
Control Barra de Desplazamiento
Barra de Desplazamiento Horizontal
(HScrollBar)
Barra de Desplazamiento Vertical (VScrollBar)
Son usuados con frecuencia para permitir rápidos
desplazamientos a través de una lista grande de items. Por
ejemplo: archivos,
indicadores de
posición actual de una escala de
valores,
indicadores de volumen en un
sistema de audio.
Propiedades
LargeChange De 1 a 32767. Cantidad de cambio
cuando el usuario hace clic en el desplazamiento
largo.
Max Máximo valor de
desplazamiento cuando el botón se encuentra en la
posición más alta. Valor predeterminado:
32767.
Min Mínimo valor del desplazamiento cuando el
botón se encuentra en la posición más
baja. Valor predeterminado: 0.
Name Nombre ddel control.
SmallChange De 1 a 32767. Cantidad de cambio cuando el
usuario hace clic en la flecha de desplazamiento.
Value Valor actual en la escala de valores.
Evento
Change Ocurre cuando el usuario se desplaza o se
cambia el valor de la propiedad Value.
Control Cuadro de Lista (ListBox)
Un control ListBox muestra una lista
de elementos entre los cuales el usuario puede seleccionar uno o
más elementos. Si el número de elementos supera el
número que puede mostrarse, se agregará
automáticamente una barra de desplazamiento al control
ListBox.
La propiedad List es un arreglo que
contiene los elementos de la lista, y comienza con índice
0. La propiedad ListCount establece el
número total de elementos de la lista. La propiedad
ListIndex contiene el índice del elemento
seleccionado, el cual es un número entre 0 (primer
elemento) y el número total de elementos en la lista
–1 (ListCount – 1). Si no se selecciona
ningún elemento, el valor de la propiedad
ListIndex será –1.
La propiedad NewIndex contiene el
índice del último elemento añadido a la
lista. Esto puede ser útil si desea hacer algo con el
elemento añadido, por ejemplo, que sea el elemento
actualmente seleccionado.
Propiedades
Enabled True/False. Determina si el control responde a
las acciones del usuario.
List Arreglo con los elementos de la lista.
ListCount Número de elementos de la
lista.
ListIndex Elemento seleccionado.
MultiSelect Establece si es posible seleccionar varios
elementos o uno solo.
Name Nombre del control.
NewIndex Indice del último elemento
añadido al Cuadro de Lista.
Selected Arreglo de valores lógicos paralelo y
del mismo tamaño al arreglo list, indica que
elementos han sido seleccionados (True) de la lista. Se utiliza
en lugar de ListIndex cuando establecemos la propiedad
Multiselect en 1 ó 2.
Sorted True/False. Establece los elementos se ordenan
alfabéticamente.
Style Establece el comportamiento del control.
Text Devuelve el elemento seleccionado en el cuadro de
lista; el valor de retorno es siempre equivalente al que
devuelve la expresión List(ListIndex). Es de sólo
lectura en
tiempo de
diseño y es de sólo lectura en
tiempo de ejecución.
Métodos
AddItem Permite añadir nuevos elementos a la
lista.
RemoveItem Permite eliminar elementos de la
lista.
Eventos
Click Ocurre cuando el usuario interactúa con
el control.
Ejemplos
Muestra en el Cuadro de Texto
txtGaseosa el elemento seleccionado
Private Sub lstGaseosas_Click()
txtGaseosa.Text = lstGaseosas.Text
End Sub
Añade un nuevo elemento al Cuadro de Lista
lstGaseosas
Elimina el elemento actual del Cuadro de Lista
lstGaseosas
Control Cuadro Combinado (ComboBox)
Un control ComboBox combina las
características de un control TextBox y un control
ListBox; los usuarios pueden introducir información en la parte del cuadro de texto
o seleccionar un elemento en la parte de cuadro de lista del
control.
Para agregar o eliminar elementos en un control
ComboBox, se usa el método AddItem o
RemoveItem. Establezca las propiedades List,
ListCount y ListIndex para permitir a un usuario tener
acceso a los elementos de un control ComboBox. Como
alternativa, puede agregar elementos a la lista mediante la
propiedad List en tiempo de diseño.
Propiedades
Enabled True/False. Determina si el control responde a
las acciones del usuario.
List Arreglo con los elementos de la lista.
ListCount Número de elementos de la
lista
ListIndex Elemento seleccionado.
Name Nombre del control.
NewIndex Indice del último elemento
añadido al cuadro de lista.
Sorted True/False. Establece si los elementos se
ordenan alfabéticamente.
Style Establece el comportamiento del
control.
Text Texto que contiene el control.
Métodos
AddItem Permite añadir nuevos elementos a la
lista.
RemoveItem Permite eliminar elementos de la
lista.
Eventos
Click Ocurre cuando el usuario interactúa con la
lista del control.
Change Ocurre cuando el valor de la propiedad
Text es modificado.
Propiedad Style
Esta propiedad establece el comportamiento del control
ComboBox, y puede tomar los siguientes valores:
Ejemplo
En la siguiente interfaz se ilustra el uso del control
ComboBox y la propiedad Style.
Muestra la gaseosa seleccionada por el usuario en la
etiqueta lblGaseosa
Private Sub cboGaseosas_Click()
lblGaseosa.Caption = cboGaseosas.Text
End Sub
Actualiza la etiqueta lblGaseosa cuando el usuario
modifica el control cboGaseosas
Private Sub cboGaseosas_Change()
lblGaseosa.Caption = cboGaseosas.Text
End Sub
Muestra el encuestado seleccionado por el usuario en
la etiqueta lblEncuestado
Private Sub cboEncuestados_Click()
lblEncuestado.Caption = cboEncuestados.Text
End Sub
Muestra en la etiqueta lblCiudad el elemento
seleccionado del control cboCiudades
Private Sub cboCiudades_Click()
lblCiudad.Caption = cboCiudades.Text
End Sub
Procedimientos
Existen dos tipos de procedimientos
con los que se trabaja en Visual Basic: los procedimientos de
evento y los procedimientos generales.
Procedimientos de Evento
Visual Basic invoca automáticamente
procedimientos de evento en respuesta a acciones del teclado, del
ratón o del sistema. Por ejemplo, los botones de comando
tienen un procedimiento de evento Click. El código que se
escriba en el procedimiento de evento Click es ejecutado cuando
el usuario haga clic en un botón de comando.
Cada control tiene un conjunto fijo de procedimientos de
evento. Los procedimientos de evento para cada control son
mostrados en un cuadro de lista despegable en la ventana de
código.
Procedimientos Generales
Los procedimientos generales son procedimientos
Sub o Function que son creados para que lleven a
cabo tareas específicas, estos deben ser invocados de
manera explícita.
Para crear un procedimiento general, se debe abrir la
ventana de código y hacer clic en la orden Agregar
procedimiento del menú Herramientas.
También se puede crear un nuevo procedimiento escribiendo
el encabezado de procedimiento Sub, seguido por el nombre
del procedimiento, en una línea en blanco dentro de la
ventana de código.
Si se tiene código duplicado en varios
procedimientos de evento, se puede colocar el código en un
procedimiento general y luego invocar al procedimiento general
desde los procedimiento de evento.
Procedimientos Sub
Los procedimientos Sub no retornan valores. Por
ejemplo:
Los procedimientos Sub son invocados
especificando sólo el nombre del procedimiento, o
empleando la instrucción Call con el nombre del
procedimiento. Por ejemplo:
Call Seleccionar(Text1)
Si se emplea la instrucción Call, se debe
encerrar la lista de argumentos entre paréntesis. Si se
omite Call, también se deben omitir los
paréntesis alrededor de la lista de argumentos.
Procedimientos Function
Los procedimientos Function devuelven valores. En
el siguiente ejemplo, el procedimiento Function recibe un
número y devuelve ese número al
cuadrado.
Public Function Cuadrado(N As Integer) As
Integer
Cuadrado = N * N
End Function
Si se desea guardar el valor devuelto, se debe usar
paréntesis cuando se invoque a la función,
como se muestra a continuación:
Resultado = Cuadrado (5)
Si se omiten los paréntesis, se puede ignorar el
valor devuelto y no guardarlo en una variable. Esto puede ser
útil si se quiere ejecutar una función y no se
desea el valor devuelto. Por ejemplo:
Cuadrado 5
Alcance del Código
Además de poder declarar
código en un módulo de formulario, también
se puede declarar procedimientos en un módulo de
código estándar.
Los módulos de código estándar
sólo contienen código de Visual Basic, y son un
buen lugar para almacenar código que no es
específico para un solo formulario. Los procedimientos
pueden ser declarados como Private (privados) o
Public (públicos).
Los procedimientos declarados como Private pueden
ser llamados o invocados sólo por otros procedimientos
localizados en ese formulario, módulo o clase.
Los procedimientos declarados como Public en un
formulario se convierten en métodos
del formulario. El procedimiento puede ser llamado desde
cualquier lugar de la aplicación especificando los nombres
del formulario y del procedimiento.
Los procedimientos declarados como Public en un
módulo están disponibles para toda la
aplicación, y pueden ser llamados especificando el nombre
del procedimiento.
El siguiente código declara un procedimiento
Public.
Public Sub MiProc()
End Sub
Si se declara el procedimiento en un módulo de
formulario, puede ser llamado con el siguiente
código.
Form1.MiProc
Si se declara el procedimiento en un módulo
estándar, puede ser llamado con el siguiente
código.
MiProc
Si se declara un procedimiento con el mismo nombre en
dos módulos estándar, se debe especificar el nombre
del módulo como se muestra en el siguiente
código.
Module1.MiProc
Uso del Examinador de Objetos para ver Procedimientos
y Librerías de Objetos
Una vez que se ha añadido código a una
aplicación se puede emplear el Examinador de
objetos para listar a todos los procedimientos que han sido
creados, pasar rápidamente a un procedimiento
específico, o pegar una llamada a un procedimiento dentro
de una ventana de código.
El Examinador de objetos visualiza las clases que
están disponibles desde cualquier librería de
objetos a la que se ha establecido una referencia. Para
visualizar el Examinador de objetos presione la tecla de
función F2.
Parte 6: Depuración, Validación de
Datos
y Manipulación de
Errores
Cuando desarrolle aplicaciones en Visual Basic, es
importante depurar el código escrito y manipular los
probables errores que puedan ocurrir. También es
importante prevenir en lo posible estos errores validando los
ingresos de
datos a la
aplicación.
Herramientas de Depuración
Visual Basic proporciona herramientas
interactivas para localizar errores en tiempo de ejecución
y errores en la lógica
del programa. Se
puede acceder a todas las herramientas de depuración
empleando el menú Depuración o la barra de
herramientas Depuración. Las herramientas de
depuración en Visual Basic incluyen:
Puntos de interrupción y expresiones de
interrupción
Establece un punto de interrupción para detener
un programa en ejecución. Se puede establecer un punto de
interrupción en tiempo de diseño o en tiempo de
ejecución mientras se esté en modo de
interrupción.
Expresiones de inspección
Emplee las expresiones de inspección para
examinar una variable o expresión en particular. El valor
de cada expresión de inspección es actualizado en
los puntos de interrupción
Opciones paso a paso
Use las opciones paso a paso para ejecutar porciones de
código ya sea una instrucción o procedimiento a la
vez.
Pila de llamadas
Emplee Pila de llamadas para visualizar todas las
llamadas a procedimientos activas y rastrear la ejecución
de una serie de procedimientos anidados.
La ventana inmediato
En modo de interrupción, se puede probar una
sentencia ejecutable escribiéndola en la ventana
inmediato. Visual Basic ejecuta la sentencia inmediatamente de
modo que se pueda evaluar el código.
La ventana locales
Esta ventana automáticamente visualiza todas las
variables
declaradas en el procedimiento actual, junto con sus
valores.
Validación de
Datos
Se puede prevenir algunos errores en el ingreso de datos
y mejorar el uso de una aplicación validando
información mientras es ingresada a los campos de la
aplicación.
Restricción de Opciones con
Controles
Una manera de asegurar ingresos válidos es
restringiendo el número de opciones que un usuario puede
escoger. Por ejemplo, se puede emplear un cuadro de lista para
permitir a los usuarios seleccionar un nombre de un producto en un
formulario. Debido a que los usuarios deben escoger un producto
de una lista predefinida, no podrán ingresar un nombre de
producto no válido.
También se pueden usar botones de opción
para un número pequeño de opciones, o casillas de
verificación para opciones de tipo booleanas.
Uso de la propiedad MaxLength
La propiedad MaxLength determina la longitud
máxima de una cadena en un cuadro de texto. El sistema
emitirá un sonido (beep)
cuando el usuario trate de escribir una cadena que exceda la
longitud máxima. Si se desea visualizar un mensaje de
error, se necesita interceptar la tecla oprimida en el evento
KeyPress.
Uso de la propiedad Locked
La propiedad Locked determina si los usuarios
pueden modificar los datos en un cuadro de texto. Si la propiedad
Locked es establecida a True, los usuarios
sólo pueden ver y copiar los datos de un cuadro de
texto.
Uso del Evento KeyPress para Validar
Datos
Se pueden emplear los eventos KeyPress,
KeyDown y KeyUp para validar datos mientras el usuario escribe.
Se puede prevenir que el usuario ingrese ciertos caracteres (por
ejemplo, puede limitar el ingreso de datos a valores
numéricos). Se puede también modificar los datos
mientras son ingresados (por ejemplo, puede convertir todos los
caracteres a mayúsculas).
El evento KeyPress tiene lugar cuando el usuario ingresa
un carácter ASCII
estándar. Esto no incluye la mayoría de la teclas
especiales, tales como las teclas de función, las teclas
direccionales, o la tecla DELETE. Para responder a estas teclas
se debe emplear los eventos KeyDown y KeyUp. El siguiente
código cambia los caracteres a mayúsculas mientras
el usuario escribe.
Private Sub Text1_KeyPress(KeyAscii as
Integer)
KeyAscii = Asc(Ucase(Chr(KeyAscii)))
End Sub
El siguiente código previene que los usuarios
ingresen sólo valores numéricos en un cuadro de
texto.
Para visualizar una lista de los valores
ASCII, busque ASCII en la ayuda de Visual
Basic.
Validación de Información a Nivel de
Formulario
Además de emplear técnicas a
nivel de campo para validar los datos mientras son ingresados, se
puede escribir código que valide los datos en todos los
campos de un formulario al mismo tiempo. En esta parte del curso
se verán las técnicas de validación a nivel
de formulario soportadas por Visual Basic.
Habilitando el Botón Aceptar
Una forma de validar la información del
formulario sería la de asegurar que un usuario ha
ingresado los datos en todos los campos en un formulario antes de
que se le permita continuar. Esto puede llevarse a cabo
deshabilitando el botón Aceptar en un formulario hasta que
el usuario haya llenado todos los campos, como se muestra a
continuación.
Para comprobar cada tecla oprimida en un formulario, se
debe establecer la propiedad KeyPreview de un formulario a
True. El formulario recibe primero el evento del teclado y
luego lo recibe el control.
El siguiente código habilita el botón
Aceptar luego de ingresar datos en todos los campos.
Validación de Todos los Campos de un
Formulario
Una manera sencilla de validar todos los campos de un
formulario al mismo tiempo es poniendo el código de
validación en el evento Click del botón
Aceptar. En esta caso, la aplicación le permite al
usuario completar el ingreso de datos en todos los campos del
formulario y luego validarlos. La aplicación establece el
enfoque en el primer campo que contiene los datos
incorrectos.
El siguiente código valida todos los campos
numéricos del formulario mostrado
anteriormente.
Uso del Evento QueryUnload
El evento QueryUnload tiene lugar justo antes del evento
Unload cuando el formulario es descargado. El evento QueryUnload
permite determinar como fue iniciado el evento Unload y cancelar
este evento. Es útil cuando un usuario no ha completado el
ingreso de datos a un formulario, o cuando se quisiera preguntar
al usuario si desea grabar cambios realizados antes cerrar el
formulario.
El evento QueryUnload tiene los siguientes
argumentos:
- El argumento Cancel cancela el evento Unload.
Si Cancel se establece a True la
aplicación permanece como estaba antes de que se
intentara la descarga. - El argumento UnloadMode indica como fue
iniciado el evento Unload.
Valores que se pueden obtener
El argumento UnloadMode (modo_descarga)
devuelve los siguientes valores:
El siguiente código cancela el evento Unload y
pregunta al usuario antes de cerrar el formulario.
Notas:
- Cuando se cierra un objeto MDIForm, el
evento QueryUnload ocurre primero para el formulario MDI
principal y después en todos los formularios
secundarios MDI. Si ningún formulario cancela el evento
QueryUnload, ocurre el evento Unload primero en todos los
demás formularios y después en un formulario MDI
principal. Cuando un formulario secundario o un objeto
Form se cierra, el evento QueryUnload de ese formulario
ocurre antes que el evento Unload del
formulario. - Cuando una aplicación se cierra, puede
utilizar los procedimientos de evento QueryUnload o Unload para
establecer la propiedad Cancel a True, deteniendo
el proceso de
cierre. Sin embargo, el evento QueryUnload ocurre en todos los
formularios antes de que se descargue ninguno de ellos y el
evento Unload ocurre conforme se descarga cada
formulario.
Manipulación de Errores en Tiempo de
Ejecución
No importa lo bien que se diseñe una
aplicación, los errores en tiempo de ejecución
siempre ocurrirán. Los usuarios olvidan poner los discos
en las unidades, sistemas se
ejecutan con poca memoria, y
archivos no se encuentran donde se supone deberían estar.
Añadiendo código de manipulación de errores
efectivo a una aplicación, se crean aplicaciones
más robustas.
Entendiendo el Proceso de Manipulación de
Errores
El proceso de manipulación de errores involucra
los siguientes pasos.
- Habilitar la interceptación de errores que
especifica hacia donde se bifurcará la ejecución
cuando ocurra un error. - Escribir el código de manipulación de
errores. - Salir del código de manipulación de
errores.
La instrucción On Error GoTo habilita la
interceptación de errores y especifica hacia donde
saltará la ejecución cuando ocurra un error. Si
ocurriera un error en tiempo de ejecución, la
ejecución saltará hacia la etiqueta especificada
por la instrucción On Error GoTo. El manipulador de
errores ejecuta el código de manipulación de
errores seguido por una instrucción Resume que
indica donde deberá continuar el proceso.
El siguiente código muestra como emplear las
instrucciones On Error GoTo y Resume.
En el código o rutina de manipulación de
errores, se emplean las propiedades y métodos del objeto
Err para verificar que error ocurrió, borrar un
valor de error o desencadenar un error.
Las Propiedades del Objeto Err
La propiedad Number es un entero que indica el
último error que tuvo lugar. Para determinar que error ha
ocurrido, se verifica el valor de Err.Number. En algunos
casos, se puede corregir un error y permitir continuar el proceso
sin interrumpir el usuario. En otros, se deberá notificar
al usuario de un error, y tomar alguna acción
basada en la respuesta del usuario.
La propiedad Description es una cadena que
contiene una descripción del error.
La propiedad Source contiene el nombre del objeto
aplicación que generó el error. Es útil
cuando se emplea Automatización. Por ejemplo, si se trabaja
con Microsoft
Excel y genera un error, Microsoft
Excel
establecerá Err.Number al código de error
apropiado y establecerá Err.Source a
Excel.Application.
Los Métodos del Objeto Err
El método Clear establece el valor de
Err.Number a cero. Básicamente, el método
Clear se emplea borrar explícitamente el objeto
Err después de controlar un error.
El método Raise genera un error en tiempo
de ejecución. Por ejemplo, se podría emplear este
método para probar el código de manipulación
de errores.
Err.Raise 53 'Archivo no
encontrado
Opciones de las Instrucción
Resume
La instrucción Resume se emplea para
especificar donde continuará el proceso de una
aplicación luego de manipular un error. La siguiente tabla
lista los tres tipos de instrucciones Resume disponibles
en Visual Basic.
Instrucción Descripción
Resume Regresa a la instrucción que
generó el error. Emplee Resume para repetir una
operación luego de corregir el error.
Instrucción Descripción
Resume Next Regresa a la instrucción
inmediatamente siguiente a la que generó el
error.
Resume línea La
ejecución continúa en la línea
especificada en el argumento obligatorio
línea.
Nota:
- Si utiliza una instrucción Resume en
otro sitio que no sea una rutina de manipulación de
errores, ocurre un error.
Deshabilitando la Manipulación de
Errores
Puede ser difícil depurar código que tiene
habilitada la manipulación de errores. Visual Basic puede
ejecutar el código de manipulación de errores
cuando se quiera ingresar al modo de Interrupción y
depurar la aplicación.
Visual Basic proporciona opciones para deshabilitar la
manipulación de errores en el momento de la
depuración.
- Para cambiar como serán manipulados los
errores:
- En el menú Herramientas, haga clic en
Opciones. - En la ficha General, debajo de
Interceptación de errores, haga clic en la
opción deseada y luego en Aceptar.
La siguiente tabla describe las opciones de
manipulación de errores disponibles debajo de
Interceptación de errores en la ficha
General.
Compilación de una
Aplicación
Una vez finalizada la creación de una
aplicación, se puede crear el archivo ejecutable para los
usuarios. Esta parte del curso describe como compilar un proyecto.
Creación de un Archivo
Ejecutable
Crear un archivo ejecutable en Visual Basic es un
proceso sencillo.
- En el menú Archivo, haga clic en
Generar <NombreProyecto>.exe - Ingrese el nombre para el archivo
ejecutable. - Para añadir información
específica de versión:
En el cuadro de diálogo Generar proyecto, haga
clic en el botón Opciones. En la ficha
Generar escriba los números de versión y
el texto de información de la versión , y luego
haga clic en Aceptar.
Además del archivo ejecutable, se debe de
proporcionar diversas DLL's y otros archivos a los usuarios. Se
debería crear un programa de instalación que
instale la aplicación en la
computadora del usuario.
El Asistente para instalar aplicaciones de
Visual Basic hace sencilla la tarea de crear discos o una
carpeta de distribución para una aplicación.
Los usuarios pueden luego ejecutar el programa de
instalación en sus computadoras
para instalar y registrar los archivos apropiados.
Parte 7: Controles Estándar
Avanzados
y Acceso a Datos
Control Cuadro de Lista de Unidades (DriveListBox)
Un control DriveListBox permite al usuario seleccionar
una unidad de disco válida en tiempo de ejecución.
Utilice este control para mostrar una lista de todas las unidades
válidas del sistema de un usuario. Puede crear cuadros de
diálogo que permitan al usuario abrir un archivo de una
lista de un disco en cualquier unidad disponible.
Propiedades
Drive Devuelve o establece la unidad seleccionada en
tiempo de ejecución. No está disponible en tiempo
de diseño.
List Contiene la lista de conexiones de unidad
efectivas.
ListCount Devuelve el número de conexiones con
unidades de disco.
ListIndex Devuelve o establece el índice del
elemento seleccionado actualmente en el control. No está
disponible en tiempo de diseño.
Eventos
Change Ocurre cuando el usuario selecciona una nueva
unidad o cuando se cambia la configuración de la
propiedad Drive mediante código.
Control Cuadro de Lista de Directorios (DirListBox)
Un control DirListBox muestra directorios y rutas de
acceso en tiempo de ejecución. Utilice este control para
mostrar una lista jerárquica de directorios. Puede crear
cuadros de diálogo que, por ejemplo, permitan a un usuario
abrir un archivo desde una lista de archivos de todos los
directorios disponibles.
Propiedades
List Contiene una lista de todos los
directorios.
ListCount Devuelve el número de subdirectorios
del directorio actual.
ListIndex Indica el índice de la ruta de acceso
actual.
Path El valor de la propiedad Path es una cadena que
indica una ruta de acceso, como C:Ob o C:WindowsSystem.
Eventos
Change Ocurre cuando el usuario hace doble clic en un
nuevo directorio o cuando se cambia la configuración de
la propiedad Path mediante código.
Control Cuadro de Lista de Archivos (FileListBox)
El control FileListBox encuentra y muestra los archivos
del directorio especificado por la propiedad Path en tiempo de
ejecución. Utilice este control para mostrar una lista de
los archivos seleccionados por tipo. Puede crear cuadros de
diálogo en la aplicación que, por ejemplo, permitan
al usuario seleccionar un archivo o un grupo de
archivos.
Propiedades
FileName Devuelve o establece el nombre de un archivo
seleccionado.
List Contiene una lista con los archivos del
directorio expandido actualmente que coinciden con la propiedad
Pattern. No se incluye la ruta de acceso.
ListCount Devuelve el número de archivos del
directorio actual que coinciden con el valor de la propiedad
Pattern.
ListIndex Devuelve o establece el índice del
elemento seleccionado actualmente.
Path El valor de la propiedad Path es una cadena que
indica una ruta de acceso, como C:Ob o
C:WindowsSystem.
Pattern Devuelve o establece un valor que indica los
nombres de archivo mostrados en un control FileListBox en
tiempo de ejecución.
Eventos
Click Ocurre cuando el usuario presiona y suelta un
botón del ratón en un control
FileListBox.
Control Imagen (Image)
El control Image se utiliza para mostrar un
gráfico. Un control Image puede mostrar un gráfico
desde un mapa de bits, un icono o un metarchivo, así como
un metarchivo mejorado, un archivo JPEG o archivos
GIF.
Propiedades
Picture Devuelve o establece un gráfico que se
mostrará en el control. También se le puede
asignar un gráfico devuelto por la función
LoadPicture.
Stretch True/False. Devuelve o establece un valor que
indica si un gráfico cambia su tamaño para
ajustarse al de un control Image.
Comentarios
El control Image utiliza menos recursos del
sistema y actualiza con más rapidez que un control
PictureBox, pero sólo admite un subconjunto de las
propiedades, los eventos y los métodos de
PictureBox. Use la propiedad Stretch para determinar si el
gráfico se escala para ajustarse al control o viceversa.
Aunque puede colocar un control Image dentro de un
contenedor, un control Image no puede actuar como
contenedor.
Función LoadPicture()
Carga un gráfico en un objeto Picture, un control
PictureBox o un control Image.
Formato:
LoadPicture(NombreDeArchivoGráfico)
También se puede usar la función
LoadPicture() para asignar un icono a un formulario o al
puntero del ratón mostrado en pantalla.
Ejemplos de la función
LoadPicture():
'Establece el icono del formulario
Set Form1.Icon = LoadPicture("MIICONO.ICO")
'Establece el puntero del ratón
Screen.MouseIcon =
LoadPicture("MIICONO.ICO")
Screen.MousePointer = 99
Creación de un visor de
imágenes
El código para los controles es el
siguiente:
Control Temporizador (Timer)
Un control Timer puede ejecutar código a
intervalos periódicos produciendo un evento Timer. El
control Timer, invisible para el usuario, resulta
útil para el procesamiento de fondo. No existe
ningún límite práctico en cuanto al
número de controles Timer activos que se
puede tener en Visual Basic 5.0 ejecutándose en Windows 95
o en Windows
NT.
Propiedades
Enabled True/False. Activa o desactiva el control. Si
se desactiva el control Timer, estableciendo Enabled a
False, se cancelará la cuenta atrás establecida
por la propiedad Interval del control.
Interval Devuelve o establece el número de
milisegundos entre las llamadas al evento Timer de un control
Timer. Los valores admitidos para milisegundos son 0,
que desactiva el control Timer, o de 1 a 65535. El
máximo, 65535 milisegundos, equivale a poco más
de un minuto.
Eventos
Timer Ocurre cuando ha transcurrido un intervalo
preestablecido para el control Timer.
Ejemplo de uso del control Timer
Minimiza el formulario y activa el control
temporizador Timer1
Private Sub cmdEstablecer_Click()
Form1.WindowState = 1
Timer1.Enabled = True
End Sub
Termina la ejecución de la
aplicación
Private Sub cmdSalir_Click()
End
End Sub
Compara la hora actual con la hora ingresada en el
cuadro txtHora cada segundo y muestra el mensaje establecido en
caso de que sean iguales, desactiva el control temporizador y
restaura la ventana a su tamaño normal.
Uso del control Data
En Visual Basic puede utilizar el control Data
para crear aplicaciones de bases de datos
para una gran variedad de formatos de base de datos.
El control Data interactúa con el motor de base de
datos Microsoft Jet y permite crear aplicaciones preparadas para
datos con la mínima cantidad de código
posible.
Vista General del Acceso a Datos
Antes de trabajar con la funcionalidad de base de datos
desde Visual Basic, se debe entender las capacidades de acceso a
datos, así como, la terminología
empleada.
Opciones de Acceso a Datos en Visual
Basic
Esta parte del curso enumera las diversas opciones que
Visual Basic proporciona para acceder a datos.
Uso del Motor de Base de Datos Microsoft
Jet
Los objetos de acceso a datos – Data Access Objects
(DAO) y el control Data usan el motor de base de
datos Microsoft Jet para acceder a bases de datos. El motor de
base de datos Jet puede acceder a los siguientes 3 tipos de bases
de datos.
- Bases de datos Jet
Estas bases de datos son creadas y manipuladas
directamente por el motor Jet. Microsoft
Access y Visual Basic emplean el mismo motor de base de
datos Jet.
- Bases de datos de Método de Acceso
Secuencial Indexado (ISAM)
Los formatos de estas bases de datos incluyen Btrieve,
dBase, Microsoft Visual FoxPro,
y Paradox.
- Bases de datos compatibles con ODBC (Open DataBase
Connectivity – Conectividad Abierta de Base de
Datos)
Estas bases de datos incluyen las bases de datos
cliente/servidor que
conforman el estándar ODBC, tal como Microsoft SQL Server.
La mayoría de bases de datos que soportan ODBC pueden
ser accedidas empleando Visual Basic.
Otros métodos de Acceso a Datos
Los otros métodos de acceso a datos soportados
por Visual Basic incluyen:
- El control Origen de Datos Remoto (Remote Data
Source)
Este es un control que emplea ODBC para acceder a
bases de datos ODBC tales como Microsoft SQL Server y
Oracle. El
control Origen de Datos Remoto sólo está
disponible en la edición Empresarial de Visual
Basic.
- Librerías ODBC
Estas librerías permiten que se llame a la
interface de programación de aplicaciones (API) de
ODBC directamente y están disponibles como un producto
separado.
- Librerías SQL de Visual
Basic
Estas librerías proporcionan un enlace directo
a Microsoft SQL Server, y están disponibles como un
producto separado.
Entendiendo los Conceptos Básicos acerca de las
Bases de Datos
La mayoría de sistemas de bases de datos emplean
el modelo de base
de datos relacional. Este modelo presenta los datos como una
colección de tablas. Una tabla es un grupo lógico
de información relacionada. Por ejemplo, la base de datos
Neptuno contiene una tabla que almacena a los empleados, y otra
almacena los pedidos de una compañía
ficticia.
La base de datos Neptuno.mdb es una base de datos de
ejemplo incluida con Microsoft Access.
Elementos de una Tabla
La base de datos Neptuno contiene un número de
tablas que agrupan la información. Estas tablas incluyen
Pedidos, Clientes, y
Empleados.
En una base de datos Jet, las filas de la tabla son
denominadas registros, y las
columnas campos.
La Clave Principal
Cada tabla debe de tener una clave principal, que es un
campo (o una combinación de campos) que es único
para cada registro en la
tabla. Por ejemplo, el campo IdEmpleado es la clave principal
para la tabla Empleados.
Una tabla puede también tener claves
foráneas, que son campos que hacen referencia a una clave
principal de otra tabla. Por ejemplo, en la base de datos
Neptuno, la tabla Pedidos tiene un campo llamado IdCliente. Este
campo es una clave foránea porque hace referencia a un
cliente de la tabla Clientes. En vez de duplicar toda la
información del cliente por cada pedido, sólo se
ingresa la clave principal del cliente a quien pertenece el
pedido, como la clave principal es única por cada cliente,
hay un solo cliente por cada pedido, y un cliente puede tener
muchos pedidos. En términos de una base de datos, la
relación entre la tabla Clientes y la tabla Pedidos es una
relación del tipo uno-a-varios.
Registros
Un registro contiene información acerca de un
solo ingreso en una tabla. Generalmente, no se desea que dos
registros en una tabla tengan los mismos datos. Por ejemplo, un
registro en la tabla Empleados contiene información acerca
de un único empleado.
Campos
Cada campo en una tabla contiene una parte de la
información. Por ejemplo, la tabla Empleados incluye
campos para el Id del empleado, Apellidos, Nombre,
etc.
Indices
Los índices de una tabla de una base de datos son
listas ordenadas que son más rápidas para las
búsquedas que las tablas en sí. Para habilitar un
acceso más rápido a una base de datos, la
mayoría de bases de datos emplean uno o más
índices. Por ejemplo, la tabla Empleados tiene un
índice para la columna IdEmpleado.
Trabajando con el Control Data
El control Data de Visual Basic permite escribir
aplicaciones de bases de datos muy eficaces con muy poco
código.
En esta parte se aprenderá a generar aplicaciones
de bases de datos con el control Data y el objeto
Recordset asociado. También se aprenderá
como el Asistente para Formularios de Datos puede construir una
aplicación que incluye el control Data.
Tener Acceso a Datos con el Control
Data
El control Data implementa el acceso a datos
mediante el motor de base de datos Microsoft Jet. Esta tecnología
proporciona acceso a muchos formatos de base de datos y permite
crear aplicaciones que manejan datos sin necesidad de escribir
código.
Para crear una aplicación de base de datos que
emplee el control Data, se siguen los siguientes
pasos:
- Añadir el control Data al formulario y
establecer las propiedades para especificar la base de datos y
la tabla desde la cual se obtendrán los
datos. - Añadir controles enlazados a datos al
formulario, y establecer las propiedades para enlazar los
controles al control Data para que los datos puedan ser
mostrados.
Uso de Controles Enlazados a Datos
Cuando un control que ha colocado en un formulario se
enlaza a datos, se muestran automáticamente los datos de
la base de datos en el control enlazado. Si un usuario cambia los
datos de un control enlazado, dichos cambios se
actualizarán automáticamente en la base de datos en
cuanto el usuario se desplace a otro registro. Muchos controles
intrínsecos o estándar de Visual Basic permiten ser
enlazados a datos, como es el caso de los controles
CheckBox, Image, Label, PictureBox,
TextBox, ListBox, ComboBox y los
contenedores OLE.
La siguiente ilustración es un ejemplo de un formulario
que contiene un control Data y dos controles
enlazados.
Establecer las Propiedades del Control
Data
Los siguientes pasos describen como conectar un control
Data a una base de datos.
- Especificar las base de datos a la cual se quiere
acceder estableciendo la propiedad DatabaseName al
nombre de la base de datos. - Para especificar que registros recuperar, establecer
la propiedad RecordSource al nombre de la tabla dentro
de la base de datos, o a una cadena SQL.
Nota: Para acceder a una base de datos
dBase, Paradox, o Btrieve, se debe establecer la propiedad
DatabaseName a la carpeta que contiene los archivos de la
base de datos, y la propiedad Connect al tipo apropiado de
base de datos.
Enlazar Controles
Después de establecer los valores de las
propiedades para el control Data, es necesario enlazar al
control Data controles individuales y después
especificar qué campo de la tabla mostrará cada
control.
- En tiempo de diseño, establecer la propiedad
DataSource del control enlazado a datos al control
Data. - En tiempo de diseño o en tiempo de
ejecución, especificar que campo se desea mostrar en el
control enlazado estableciendo la propiedad
DataField.
La propiedad DataField puede ser establecida en
tiempo de diseño o en tiempo de
ejecución.
Usar las Propiedades y Métodos del Control
Data
Para especificar los datos que se desean recuperar, se
debe establecer las propiedades DatabaseName y
RecordSource de un control Data. Además, se
pueden establecer las siguientes propiedades y
métodos.
La Propiedad Connect
Esta propiedad especifica el tipo de base de datos a
abrir. Puede incluir argumentos tales como un nombre de usuario
(user ID) y una contraseña.
La Propiedad Exclusive
La propiedad Exclusive determina si se tiene o no
un uso exclusivo de la base de datos. Si esta propiedad se
establece a True, y luego se abre sin problemas la
base de datos, ninguna otra aplicación podrá
abrirla hasta que sea cerrada.
La Propiedad ReadOnly
Esta propiedad determina si se puede o no actualizar o
grabar cambios en la base de datos. Si no se tiene planeado hacer
cambios en la base de datos, es más eficiente establecer
la propiedad ReadOnly a True.
La Propiedad Recordset
La propiedad Recordset es un objeto que contiene
el conjunto de registros devueltos por el control Data.
Esta propiedad contiene a su vez propiedades y métodos que
pueden ser usados para trabajar con los registros
devueltos.
Las Propiedades BOFAction y EOFAction
Estas propiedades determinan que acción
tomará el control Data cuando las propiedades
BOF o EOF del recordset tomen como valor
True.
Por ejemplo, si la propiedad EOFAction del
control Data es establecida a vbActionAddNew, y se emplea
el control Data para desplazarse, una vez que se pase el
último registro, el control Data
automáticamente ejecutará el método
AddNew de modo que se pueda añadir un nuevo
registro.
El Método Refresh
El método Refresh renueva el objeto
Recordset. Si se cambia la propiedad RecordSource
en tiempo de ejecución, se debe invocar al método
Refresh para renovar el recordset.
El siguiente código muestra como emplear el
método Refresh.
Data1.RecordSource = "SELECT * FROM Empleados " &
_
"WHERE [IdEmpleado] = " & txtIdEmp.Text
Data1.Refresh
El Objeto Recordset
En una aplicación de base de datos, los usuarios
trabajan con el control Data para desplazarse entre
registros dentro de la base de datos. Los usuarios pueden hacer
clic en los botones del control Data para avanzar o
retroceder registro a registro o para ir directamente al primer o
al último registro.
¿Qué es un Recordset?
Todo el conjunto de registros al que hace referencia un
control Data se denomina conjunto de registros o
Recordset. El Recordset se almacena en la memoria,
transfiriéndose al disco si es necesario.
Para manipular el Recordset, se emplea la
propiedad Recordset del control Data. El
Recordset contiene el registro actual. La
información del registro actual es mostrada por los
controles enlazados. Se puede cambiar la posición del
registro actual haciendo clic en el control Data o
escribiendo código que emplee métodos del objeto
Recordset.
Determinar los límites de
un Recordset
Si utiliza código para cambiar la posición
del registro actual, debe comprobar las propiedades EOF y
BOF del objeto Recordset para determinar el inicio
y el final del mismo. Cuando se desplace al registro EOF o
al BOF, se ejecutará la acción indicada por
el valor de la propiedad BOFAction o
EOFAction.
Por ejemplo, se puede establecer la propiedad
EOFAction para añadir un nuevo registro
automáticamente. Si se establece la propiedad
EOFAction a EOF, ninguna acción será
tomada cuando se desplace al registro EOF. Cuando se
desplace pasando un registro los registros BOF o
EOF, se producirá un error en tiempo de
ejecución.
En la siguiente ilustración se muestra
cómo las propiedades BOF y EOF determinan
los límites del objeto Recordset.
Para emplear el objeto Recordset de un control
Data determinado, se debe especificar la propiedad
Recordset del control Data, como se muestra en el
siguiente código.
Data1.Recordset.MoveNext 'Mueve el registro actual al
siguiente
If Data1.Recordset.EOF Then
Data1.Recordset.MoveLast
Uso de las Propiedades y Métodos de un
Recordset
Utilice los métodos y las propiedades del objeto
Recordset para recuperar información del conjunto
de registros, desplazarse por los registros y agregar, actualizar
o eliminar registros.
Las Propiedades BOF y EOF
Las propiedades BOF y EOF del objeto
Recordset indican si la posición del registro
actual es antes del primer registro o después del
último registro dentro del conjunto de registros. Si no
hay registros en el recordset, entonces el valor de las
propiedades BOF y EOF es True.
El Método AddNew del Recordset
Para agregar un nuevo registro a un recordset, se emplea
el método AddNew. Cuando se ejecuta el
método AddNew, Visual Basic limpia los controles
enlazados y establece la propiedad EditMode del control
Data a dbEditAdd.
El nuevo registro no será añadido a la
base de datos hasta que sea ejecutado explícitamente un
método UpdateRecord o Update, o hasta que el
usuario se mueva a otro registro.
El siguiente código muestra como agregar un nuevo
registro a un recordset.
Private Sub cmdAgregar_Click()
Data1.Recordset.AddNew
El Método UpdateRecord del Control
Data
El método UpdateRecord se emplea para
grabar el registro actual a una base de datos. El siguiente
código muestra como grabar el registro actual y actualizar
la base de datos.
Private Sub cmdGrabar_Click()
Data1.UpdateRecord
El Método CancelUpdate del Control
Data
El método CancelUpdate se emplea para
cancelar un método AddNew o Edit y renovar o
refrescar los controles enlazados con datos del
recordset.
Por ejemplo, si un usuario ha modificado los campos de
un formulario, pero todavía no los ha actualizado, el
método CancelUpdate refrescará los campos
con los datos originales del recordset.
Si un usuario selecciona un botón Agregar
de un formulario, y luego decide no agregar el registro, el
método CancelUpdate cancelará la
operación y visualizará el registro
actual.
El siguiente código muestra como cancelar la
agregación o edición de un registro.
Private Sub cmdCancelar_Click()
Data1.CancelUpdate
El Método Delete del Recordset
Para eliminar un registro de una base de datos, se
emplea el método Delete. El registro eliminado
permanecerá como el registro actual hasta que el usuario
se mueva a un registro diferente, como se muestra en el siguiente
código.
Private Sub cmdEliminar_Click()
Data1.Recordset.Delete
Data1.Recordset.MoveNext
If Data1.Recordset.EOF Then
Data1.Recordset.MoveLast
End If
End Sub
Nota: La base de datos Neptuno tiene
definidas reglas de integridad referencial que impiden eliminar
registros relacionados.
Uso del Asistente para Formularios de
Datos
El Asistente para Formularios de Datos es una utilidad de
Visual Basic que genera formularios de datos simples que emplean
el control Data. Se puede emplear el Asistente para
Formularios de Datos para construir rápidamente
formularios para una aplicación de base de
datos.
Para cargar el Asistente para Formularios de Datos, se
emplea la orden Administrador de Complementos del
menú Complementos.
Uso de los Eventos del Control Data
El control Data proporciona tres eventos que
puede utilizar para mejorar la aplicación de base de
datos: Validate, Error y Reposition. Dichos eventos permiten
omitir parte del comportamiento predeterminado del control
Data.
Usar el Evento Validate
Utilice el evento Validate para comprobar los datos
antes de guardar un registro en la base de datos. Este evento se
produce justo antes de que Visual Basic escriba en la base de
datos los cambios procedentes de los controles enlazados y de que
vuelva a colocar el puntero del registro actual en otro registro
de la base de datos. Puede utilizar el evento Validate para pedir
al usuario que confirme los cambios realizados.
Sintaxis
El evento Validate tiene la siguiente
sintaxis:
Private Sub Data1_Validate (index As
Integer, action As Integer, save As
Integer)
El Argumento Action
El argumento action indica la operación
que provocó el evento Validate. El evento Validate se
produce como resultado de realizar las operaciones
siguientes:
- MoveFirst, MovePrevious,
MoveNext, MoveLast - AddNew
- Update
- Delete
- Find
- Establecer la propiedad Bookmark
- Cerrar la base de datos
- Descargar el formulario
Para cancelar cualquiera de estas acciones, asigne al
argumento action el valor
vbDataActionCancel.
El Argumento Save
El argumento save indica si va a guardarse o no
el registro. Si save es True, los datos enlazados
han cambiado. Para cancelar la acción de guardar puede
asignar a save el valor False.
El siguiente código pide al usuario que confirme
los cambios hechos a la base de datos. Si el usuario responde No,
los cambios serán cancelados.
Usar el Evento Reposition
Utilice el evento Reposition para modificar la
apariencia de un formulario o realizar una acción
necesaria cuando se desplace a un nuevo registro.
Este evento tiene lugar cuando Visual Basic desplaza el
puntero del registro actual a otro registro de la base de datos.
También se produce la primera vez que se abre la base de
datos.
Modificar la apariencia de un
formulario
Para cambiar la manera en que un formulario muestra
información basándose en el registro seleccionado
en ese momento hay que utilizar el evento Reposition. Por
ejemplo, puede modificar el título del control Data
de forma que se muestre el registro número
n.
Para ver el número del registro actual, utilice
la propiedad AbsolutePosition del objeto Recordset.
El número de registro es relativo a cero, por lo que el
primer registro es el 0.
El siguiente código muestra como visualizar el
número del registro actual.
Private Sub Data1_Reposition()
Data1.Caption = "Registro Nº" &
Data1.Recordset.AbsolutePosition + 1
End Sub
Tratar los cambios al desplazarse a un nuevo
registro
Cuando un usuario se desplaza a un nuevo registro
mediante el control Data, puede que los datos del
formulario tengan que presentarse de una forma distinta en el
caso del nuevo registro.
Por ejemplo, es posible que en un formulario que muestre
registros de empleados haya distintas opciones dependiendo de
sí los empleados son fijos, temporales o si trabajan por
horas. Cada registro mostrará la información sobre
un empleado distinto, cuyas opciones pueden no ser las mismas
para todos los registros. Para que se seleccione la opción
correcta para cada registro, escriba código en el evento
Reposition.
El código siguiente utiliza el evento Reposition
para modificar la apariencia de un formulario.
Esta ilustración muestra el formulario basado en
el código anterior.
Usar el Evento Error
El evento Error tiene lugar cuando un usuario
interactúa con el control Data y se produce un
error de acceso a datos. Utilice el evento Error para agregar
tratamiento de errores personalizado al control
Data.
Por ejemplo, si un usuario modifica un campo y
después hace clic en el control Data para
desplazarse al siguiente registro, el control Data
actualizará el registro actual. Si se produce un error de
acceso a datos durante la actualización, se
producirá el evento Error.
Los valores de los campos enlazados no cambian tras
producirse un error. El usuario puede corregir los valores y
hacer clic en el control Data para tratar de actualizar
nuevamente el registro.
Mostrar un mensaje de error
personalizado
Si no coloca código para tratar errores en el
evento Error y se produce un error cuando un usuario
interactúa con el control Data, Visual Basic
muestra el mensaje de error y el programa continúa
ejecutándose.
Si no desea que se muestre el mensaje de error
estándar, puede asignar al argumento Response el valor 0 y
mostrar un mensaje de error personalizado como se muestra en el
siguiente código.
Uso de Controles Enlazados a Datos
ActiveX
Además de los controles enlazados
intrínsecos, Visual Basic ofrece varios controles
ActiveX enlazados a datos. En esta parte del curso se
describen algunos controles ActiveX enlazados a datos
avanzados.
Usar el Control DBGrid
El control de cuadrícula enlazada a datos
(control DBGrid) permite que los usuarios de su
aplicación de base de datos trabajen con varios registros
a la vez.
Mostrar múltiples
registros
DBGrid es un control ActiveX que muestra una
serie de filas y columnas que representan registros y campos de
un objeto Recordset. Cuando asigne a la propiedad
DataSource del control DBGrid un control
Data, el control DBGrid se llenará
automáticamente de datos y se establecerán
automáticamente sus encabezados de columna a partir del
conjunto de registros del control Data.
Al contrario que la mayoría de los controles
enlazados a datos, el control DBGrid le permite ver y
modificar varios registros simultáneamente.
En la siguiente ilustración se muestra un
formulario que utiliza un control DBGrid para presentar
registros procedentes de la base de datos Neptuno.
- Para añadir el control DBGrid a un
proyecto
- Hacer clic en la orden Componentes del
menú Proyecto. - En la ficha Controles, seleccionar
Microsoft Data Bound Grid Control, y luego hacer clic en
Aceptar.
El control DBGrid tiene varias propiedades que
especifican cómo se comporta el control. Por ejemplo, si
asigna a la propiedad AllowUpdate el valor True, un
usuario puede modificar los datos del control. También
puede establecer propiedades para columnas individuales del
control DBGrid.
Puede cambiar el título de la columna, cambiar el
campo de datos al que se enlaza la columna, agregar valores
predeterminados, etc.
- Para establecer propiedades de
columnas
- Oprima el botón secundario del ratón
sobre el control DBGrid. - Haga clic en la orden Propiedades.
- Haga clic en Columnas.
Puede cambiar el título de la columna, cambiar el
campo de datos al que se enlaza la columna, agregar valores
predeterminados, etc.
Para establecer los encabezados de las columnas del
control DBGrid, luego de haberlo enlazado a un control
Data, oprima el botón secundario del ratón
sobre el control en tiempo de diseño, y luego haga clic en
la orden Recuperar campos.
Obtener y establecer el texto de la celda
actual
Utilice la colección Columns del control
DBGrid para recuperar el texto de la celda seleccionada
actualmente en tiempo de ejecución. Por
ejemplo:
MsgBox DBGrid1.Columns(DBGrid1.Col).Text
Para cambiar la información del control DBGrid,
cambie el objeto Recordset asociado. Por ejemplo, si el control
DBGrid está enlazado al recordset Data1, se
ejecutaría el siguiente código:
Data1.Recordset.Edit
Data1.Recordset.Fields("NombreProducto") = "Disco
duro"
Data1.Recordset.Update
Usar el evento BeforeUpdate
El evento BeforeUpdate tiene lugar antes de que se
muevan datos desde un control DBGrid al búfer de
copia del control Data. Puede validar los datos y cancelar
la actualización si es necesario.
Usar el Control MSFlexGrid
El control MSFlexGrid proporciona
características avanzadas para la presentación de
datos en una cuadrícula. Es similar al control
DBGrid aunque, cuando se enlaza a un control Data,
el control MSFlexGrid muestra datos de sólo
lectura. Puede utilizar el control MSFlexGrid para
combinar filas o columnas de información y así
agrupar la información relacionada.
En la siguiente ilustración se muestran registros
agrupados por Id. de pedido en la tabla Detalles de
pedidos.
- Para combinar celdas
- Establezca la propiedad MergeCells a un valor
diferente a cero. - Establezca las propiedades arreglo MergeRow()
y MergeCol() a True para las filas y columnas que
desee combinar.
Por ejemplo, para combinar las celdas en la tabla
Detalles de pedidos, añada el siguiente código al
formulario donde se encuentra el control
MSFlexGrid.
Private Sub Form_Load()
MSFlexGrid1.MergeCells = flexMergeFree
MSFlexGrid1.MergeCol(0) = True
End Sub
Usar el Control DBCombo
Puede utilizar el control de cuadro de lista enlazado a
datos (DBList) o el cuadro combinado enlazado a datos
(DBCombo) para presentar automáticamente una lista
de valores de un Recordset. Esto resulta útil para
proporcionar valores válidos al usuario.
Obtener información de una tabla de
búsqueda
También puede utilizar estos controles en
aplicaciones de "tabla de búsqueda".
Por ejemplo, puede presentar una lista de nombres de
categoría válidos (en vez de Id.) y utilizar el Id.
correspondiente cuando el usuario agregue o modifique
datos.
La ilustración siguiente muestra un formulario
que utiliza el control DBCombo para presentar nombres de
categorías de la tabla Productos.
Establecer propiedades del control
DBCombo
Para determinar el valor que se presenta en el control
DBCombo, asigne a la propiedad RowSource un nombre
de control Data y a la propiedad ListField un
nombre de campo.
El cuadro combinado enlazado a datos contiene todos los
valores de ese campo. Para determinar qué campo de la base
de datos se actualiza cuando un usuario cambia un valor,
establezca las propiedades DataSource y DataField.
Para establecer la relación entre la tabla que contiene
los valores de búsqueda y la tabla que se está
modificando realmente, establezca la propiedad
BoundColumn.
Jaime Oswaldo Montoya Guzmán
Lugar y fecha de nacimiento: San Salvador, 16 de julio de
1986.
Centro de estudios: Universidad
Católica de Occidente
Carrera: Ingeniería en Sistemas
Informáticos.
Ciudad: Santa Ana.
País: El Salvador.
Fecha de envío del trabajo: 29 de
octubre de 2005.
Página anterior | Volver al principio del trabajo | Página siguiente |