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 |