Guía de Estudio Microsoft Visual Basic 6.0

Anuncio
1
Guía de Estudio
Microsoft Visual Basic 6.0
Elaborada por:
Ing. Alfredo Díaz
Cabimas, Noviembre de 2009
2
GUIA DE ESTUDIO
VISUAL BASIC 6.0
Visual Basic es un lenguaje de programación de cuarta generación que soporta las
características de orientación a objetos y mantiene las sentencias de manera homóloga al
Basic tradicional. Algunos estudiosos han asegurado de que Visual Basic hasta la versión 6.0
no es orientado a objetos, sino orientado a eventos, ya que en el modelo POO se deben
presentar de manera explícita la herencia, encapsulamiento y polimorfismo.
La herencia se refiere al hecho de que un objeto puede contener las características o
propiedades de un objeto padre. En VB la herencia está presente de manera implícita. Por
ejemplo, los rasgos heredados de los padres hacia los hijos.
El encapsulamiento: consiste en el hecho de que el código asociado a un objeto es privado
para dicho objeto y queda asociado exclusivamente a éste. Por ejemplo, el código del evento
cmdGuardar_Click() estará asociado exclusivamente a ese objeto.
El polimorfismo indica que un objeto puede contener métodos que pueden tener el mismo
nombre, pero desencadenar diferentes comportamientos. Por ejemplo, en un teléfono, cuando
se presiona un botón para digitar un número, se marcará dicho número, sin embargo, aunque
esencialmente la función es la misma, al discar el uno (1), de marcará este dígito, ocurriendo lo
mismo con el dos (2) y el resto de los números; es decir, el resultado varía dependiendo de
cada botón, aunque todos respondan a la misma acción (presionar).
PROPIEDADES, MÉTODOS Y EVENTOS
Una propiedad es una característica de un objeto; por ejemplo, el nombre, color, tamaño,
posición, etc.
Un método es un comando o acción al cual, el objeto puede responder. Por ejemplo, cuando se
le dice al objeto “Muévete a la izquierda” o “Agrega un elemento a este objeto”.
Un evento es un suceso de programa que puede ocurrir en cualquier momento. Por ejemplo:
cuando el usuario pasa el Mouse por encima del objeto o hace clik sobre él.
EL ENTORNO DE PROGRAMACIÓN (IDE) DE VISUAL BASIC 6.0
Visual Basic 6.0 ofrece un entorno integrado de desarrollo provisto de los siguientes elementos:
Barra de Menús y Herramientas
Formulario
Explorador
de proyectos
Cuadro de
controles
Ventana
Propiedades
3
Barra de Menús y Herramientas: De manera homóloga a los programas diseñados para
Windows, permiten desplegar una lista de opciones que el usuario puede utilizar para diseñar,
depurar y ejecutar los programas entre otras posibilidades.
Formulario: Es el formulario base donde el diseñador o programador trabajará para diseñar la
interfaz de usuario.
Cuadro de Controles: Representa cada uno de los objetos que el usuario puede insertar
dentro de los formularios.
Ventana Propiedades: Representa cada una de las propiedades de los objetos.
Explorador de Proyectos: Muestra cada uno de los elementos que componen un proyecto en
visual Basic como formularios, módulos, etc.
Un proyecto es un conjunto de formularios, módulos, módulos de clase y otros archivos que
forman parte de la aplicación final (programa compilado). Dicho proyecto tiene extensión .vbp
hasta que se compila y genera un programa ejecutable .exe compatible con Windows.
El proyecto por defecto tiene el nombre “Proyecto1” y puede cambiarse su nombre por otro
más descriptivo asociado a su contenido. Este nombre prevalecerá hasta la generación del
ejecutable.
LOS FORMULARIOS Y OBJETOS EN VISUAL BASIC
Un formulario es un objeto básico contenedor de otros objetos, que permite el diseño de las
interfaces de usuario. En todos los programas Windows cada ventana está representada por lo
menos por un formulario dentro del cual, se encuentran los botones de comando, cuadros de
texto, listas desplegables y otros objetos que pueden ser accedidos por los usuarios.
Los objetos en visual Basic pueden ser intrínsecos (vienen preestablecidos por el lenguaje) o
externos (diseñados por otros fabricantes). Este último tipo de objetos son los denominados
ActiveX u .OCX.
Puntero: Es el objeto preestablecido utilizado para seleccionar otros objetos
Textbox: Permite el ingreso de texto por parte del usuario
Checkbox: Permite marcar como verdadero o falso (sí o no) el estado del objeto.
Listbox: Muestra una lista abierta de elementos.
Timer: Permite repetir instrucciones de acuerdo al reloj del procesador.
DirListBox: Muestra una lista de archivos de directorios.
Image: Permite insertar imágenes en el formulario.
Label: Permite asignar una leyenda o etiqueta para indentificar otros objetos.
CommandButton: Permite desencadenar acciones diversas al ser presionado.
ComboBox: Muestra una lista desplegable de elementos al clickear en la flecha
derecha
PictureBox: Permite insertar imágenes en el formulario
Frame: Delimita una región del formulario para agrupar otros objetos
4
OptionButton: Muestra un grupo de opciones de las cuales, el usuario sólo puede elegir una
de ellas.
ANTES DE COMENZAR A PROGRAMAR LA APLICACIÓN
Existen una serie de consideraciones importantes antes de empezar a programar. Lo primero
que debemos tomar en cuenta es que Visual Basic 6 es la existencia del Administrador de
proyectos y la ventana propiedades.
Un proyecto en visual basic es la integración de una serie de archivos como formularios,
módulos y otros elementos que al trabajar como un todo dan origen a nuestra aplicación o
programa de una manera totalmente funcional.
El formulario es la ventana base sobre la cual se colocan los objetos del programa, mientras
que el módulo es un archivo que contiene instrucciones que complementan nuestro programa.
El explorador de proyectos es una ventana que se encuentra en el entorno de desarrollo de
Visual Basic y presenta una lista de todos los elementos que están incluidos en la aplicación y
la Ventana Propiedades permite visualizar y editar los valores de las características de los
objetos como su nombre, título, color, etc.
La ventana propiedades se muestra presionando F4 y el explorador de proyectos al presionar
CONTROL+R.
EL ACCESO A DATOS DESDE VB
Para acceso a datos, Visual Basic 6.0 incluye un control intrínseco llamado “Data”. Este permite
conectarse a diversos motores de bases de datos como DBF, Acces, Paradox o Excel. Sin
embargo, para conectarse con motores de bases de datos más recientes y robustos, se
incluyen los controles ActiveX ADO y RDO.
El ADO genera una cadena de conexión donde se indica el motor de la base de datos,
dirección en el disco donde se encuentra y otros parámetros que permiten establecer la
conectividad.
En cuanto al RDO (Objetos de Datos Remotos) se utiliza para conectar BD remotas a través de
un DSN (Servidor de Nombres de Dominio de datos) que debe ser creado en la máquina local
para establecer la conexión.
En este curso, se utilizará el control de datos ADO.
1. Para llamar el control de datos ADO, se debe presionar la combinación “Control+T” y
muestra la lista de todos los componentes de Visual Basic.
2. Se debe seleccionar el componente
“Microsoft ADO Data Control 6.0 y
presionar “Aceptar”
Al hacer esto, se inserta un control en el
cuadro de controles que hace referencia
a este componente.
3. En este momento, ya el entorno está
preparado para manejar datos. En este
sentido, es necesario dibujar nuestro
formulario, tal como se observa a
continuación:
5
4. Para insertar un objeto (por
ejemplo el Label Cedula, deberá
hacer doble clic sobre el control
del cuadro de controles. Esto
ubicará el objeto Label1 en el
centro del formulario.
5. Luego, muévalo hasta la parte
superior del form tal como se
muestra en la figura
6. Busque la propiedad Caption en
la ventana Propiedades y escriba
Cédula para asignar el valor de la
propiedad.
El objeto quedará así:
7. Inserte el cuadro de texto (textbox) haciendo doble clic sobre el control
TextBox del cuadro de controles
. Este se colocará en el centro del
formulario y deberá arrastrarlo hacia al lado del Label Cedula, tal como se
muestra en la figura:
8. En la ventana propiedades, busque la propiedad Text y borre el valor que tiene en ese
momento (Text1). Al mismo tiempo, busque la propiedad (Nombre) que es la primera que
aparece en la lista de propiedades y escriba txtcedula. Presione enter para aceptar el valor y
prosiga con el resto de objetos y propiedades de acuerdo al siguiente cuadro:
Propiedades de los Objetos:
Objeto
Propiedad
Form
Name
Caption
BorderStyle
StartUpPosition
Valor
frmAlumnos
Alumnos
1. Fixed Single
2. CenterScreen
Label1,
Label2,
Label4, Label5
Caption
Cedula, Nombre, Apellido,
Dirección, Telefono
Name
txtCedula,
txtApellido,
txtTelefono
Text
“” (Vacío)
Enabled
False
Label3,
Text1, Text2, Text3, Text4,
Text5
txtNombre,
txtDireccion,
6
CommandButon1…
CommandButton7
Name
cmdNuevo,
cmdBuscar,
cmdGuardar,
cmdCerrar
cmdEditar,
cmdEliminar,
cmdCancelar,
Caption
Enabled
Nuevo, Modificar, Eliminar,
Cerrar, Guardar, Cancelar,
Consultar
True
(cmdGuardar
y
cmdCancelar = False)
En resumen, nuestro formulario tendrá 5 Labels, 5 textboxes y 7 Command buttons.
NOTA MUY IMPORTANTE: Verifique minuciosamente que todas las propiedades de los
objetos están bien asignadas, ya que de no ser así, tendrá problemas al momento de agregar
el código.
SIGNIFICADO DE LAS PROPIEDADES UTILIZADAS:
Name: Indica el Nombre del Objeto. El nombre es único y sólo se utiliza a nivel de código. No
se debe confundir con el Caption. Se recomienda utilizar prefijos para identificar al tipo de
objeto. Los más utilizados son:
cmd
CommandButton
txt
TextBox
cmb
ComboBox
lbl
Label
pic
PictureBox
frm
Formulario
chk
CheckBox
opt
OptionButton
Los nombres de objeto no pueden comenzar con números ni contener espacios en blanco ni
caracteres especiales. Tampoco se pueden utilizar palabras reservadas del lenguaje.
Caption: Indica la leyenda o título del objeto que el usuario observa durante la ejecución del
programa
BorderStyle: Sólo aplica para el objeto Form. Estilo del borde (Ninguno, Sencillo, Ajustable,
Cuadro de diálogo, como barra de herramientas flotante o fija)
Enabled: Indica si el objeto está activo durante la ejecución del programa o no. De no estar
activo, el usuario no podrá ingresar ningún dato ni manipular dicho objeto.
Tag: Almacena cualquier valor que el usuario desee. En este curso, se utilizará para efectos de
optimizar el código de programa al limpiar, activar o desactivar objetos.
Text: En un objeto textbox o combobox, guarda el valor ingresado por el usuario.
PERSPECTIVA DEL PROGRAMA (¿CÓMO SE DESEA QUE FUNCIONE?)
El programa debe permitir el ingreso, actualización, eliminación y consulta de datos de los
alumnos de un colegio. Al inicio, todos los cuadros de texto deben estar desactivados y sólo se
activarán cuando el usuario desee agregar o modificar datos. En tal caso, los únicos botones
que deben quedar activos son Guardar y Cancelar, ya que durante una operación de edición o
agregación sólo se pueden almacenar los datos o deshacerlos.
Al inicio, los botones Nuevo, Modificar, Eliminar, Cerrar y Consultar deben estar activos ya que
se espera que el usuario desencadene una de estas acciones, estando inactivos los botones
Guardar y Cancelar.
7
Luego de una operación de agregación o modificación, cuando el usuario selecciona Guardar o
Cancelar, se regresan todos los cuadros de texto a su estado inactivo y los botones Nuevo,
Modificar, Eliminar, Cerrar y Consultar, se activan; desactivando entonces a Guardar y
Cancelar.
ABRIENDO LA BASE DE DATOS DESDE VB
Para abrir la base de datos, utilizaremos una variable global llamada “db” que declararemos en
un módulo. Esto lo realizamos de la siguiente manera:
1. Hacemos click con el botón derecho en el área blanca del administrador de proyectos.
2. Seleccionamos Agregar \ Módulo y aparecerá una
pantalla como la siguiente:
3. Seleccionamos Abrir y se mostrará una pantalla en
blanco en la que escribiremos el siguiente código:
'Declara las variables que hacen referencia
'a la base de datos y al recordset (conjunto de registros)
'Se declaran global para que esten al alcance de todo el proyecto
Global db As New ADODB.Connection
Global rst As New ADODB.Recordset
'Ahora se escribe el procedimiento inicial
Sub main()
'Abre la conexión a la base de datos utilizando una cadena de conexión...
db.ConnectionString
=
"Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\SISTEMA\CENTRAL.mdb;Persist Security Info=False"
db.Open
'e invoca al formulario de alumnos con el metodo show
frmAlumnos.Show
End Sub
4. Guardamos el módulo con el nombre modInicial.bas.
Importante: Los proyectos en visual basic 6.0 tienen extensión.vbp mientras que los
formularios son .frm y los módulos son .bas.
Al momento de abrir un proyecto, siempre hacerlo con el archivo .vbp. Es un error común abrir
el archivo .frm
Como pudo observarse, se declararon 2 variables globales que hacen referencia a nuestra
base de datos (db) y recordset (rst) y se realiza de esta manera para que estén “visibles” en
todos los objetos del proyecto.
También notemos la existencia del sub main() que es el procedimiento de inicio. Debemos
entonces indicarle a Visual Basic que la primera rutina que llamará al iniciar es el sub main().
Para ello, vamos al menú proyecto y luego elegimos la opción Propiedades de proyecto. Allí
aparecerá la siguiente ventana:
8
Alli, clickearemos en la lista desplegable
Objeto Inicial y seleccionaremos Sub
Main. También le colocaremos como
Nombre de proyecto “Sistema” y
presionamos Aceptar para guardar los
cambios.
Ahora, la próxima vez que se inicie el
proyecto, se invocará al sub main(), por lo
cual, se acostumbra que en esta rutina, se
llame al formulario que contiene el menú
principal del sistema. Por ahora, sólo
invocará al formulario frmAlumnos.
INFORMACIÓN IMPORTANTE SOBRE LA DECLARACIÓN DE VARIABLES.
Habrá visto que en el sub main() declaramos dos variables con la palabra Global. Una variable
es un objeto de programa que puede contener datos y los mismos varían a lo largo de la
ejecución del programa. Las variables pueden ser de tipo entero, con decimales, de cadena de
caracteres, de tipo objeto, entre otros.
La declaración de una variable es como sigue:
Dim nombre_var as tipo_de_dato:
Dim es la palabra reservada que reserva el espacio en la memoria RAM para la variable.
Nombre_var es el nombre que se le da a la variable (no debe comenzar con números, ni
contener caracteres especiales ni espacios en blanco)
Tipo_de_dato es el tipo de dato que se le asigna a la variable (integer, string, doublé, etc)
También se puede utilizar la declaración implícita (sin usar dim) y utilizar la variable justo en el
momento que se declara. Por ejemplo
Cedula$=”15069973”
Esta instrucción crea la variable “Cedula” de tipo cadena (el símbolo $ significa que se declara
como una cadena de caracteres) y luego, se asigna el valor de una cédula cualquiera.
El símbolo (%) significa “entero”, mientras que el símbolo (#) significa “doublé”. Puede revisar la
ayuda de Visual Basic 6 par mayores detalles.
ADICIÓN DEL CÓDIGO
1. Para agregar el código a un objeto, se debe clickear sobre dicho objeto y luego, aparecerá el
editor de código. Allí se muestra una lista con los objetos del formulario (en el lado izquierdo) y
los eventos que puede soportar (en el lado derecho).
2. Ingresemos en el código del objeto cmdCerrar haciendo doble click sobre el botón Cerrar
Al hacer esto, se mostrará la ventana código asociada a dicho botón. Es de hacer notar que en
la lista superior izquierda aparece el nombre del objeto y en la derecha el evento que
estaremos programando (en este caso: click), También aparecen unas líneas de código
automáticas que indican inico y fin de un procedimiento asociado al objeto cmdCerrar,
específicamente el evento click. Dichas líneas no deben borrarse.
9
3. Ubiquese debajo de la palabre Private
y pegue allí el siguiente código:
End
Y luego, cierre dicha ventana
La instrucción End implica que cuando el usuario haga click sobre el botón Cerrar del
formulario, se terminará por completo la ejecución del programa.
4. Es el momento de ingresar el código de los botones cmdNuevo y cmdEditar.
Private Sub cmdNuevo_Click()
'Primero se activan todos los cuadros de texto
'porque escribiremos sobre ellos los valores que les asignaremos
'a los campos de la tabla ALUMNOS
Me.txtApellido.Enabled = True
Me.txtCedula.Enabled = True
Me.txtDireccion.Enabled = True
Me.txtNombre.Enabled = True
Me.txtTelefono.Enabled = True
'Cuando comienza la creación, sólo se podrán Guardar o Cancelar los cambios
'Por eso cmdCancelar y cmdGuardar se activan
'Y el resto de los Botones de comando, se desactivan...
Me.cmdGuardar.Enabled = True
Me.cmdCancelar.Enabled = True
Me.cmdBuscar.Enabled = False
Me.cmdCerrar.Enabled = False
Me.cmdEditar.Enabled = False
Me.cmdNuevo.Enabled = False
Me.cmdEliminar.Enabled = False
End Sub
Para el botón Editar, inserte el siguiente código: (Doble click sobe el botón cmdEditar)
Private Sub cmdEditar_Click()
'Verifica que se esté mostrando un reg en pantalla...
'Si se está mostrando un registro, el texbox cedula tiene algún valor...
If Me.txtCedula.Text = "" Then
'Si no es así, muestra un error
MsgBox "Debe cargar un registro para modificarlo", vbCritical
Exit Sub
End If
'Activa los cuadros de texto porque estamos editando...
Me.txtApellido.Enabled = True
Me.txtCedula.Enabled = True
Me.txtDireccion.Enabled = True
Me.txtNombre.Enabled = True
Me.txtTelefono.Enabled = True
'Desactiva todos los Botones de comando,
'dejando activos solamente cmdGuardar y cmdCancelar
'porque al editar sólo se pueden salvar o cancelar los cambios...
Me.cmdBuscar.Enabled = False
Me.cmdCerrar.Enabled = False
Me.cmdEditar.Enabled = False
Me.cmdNuevo.Enabled = False
Me.cmdEliminar.Enabled = False
Me.cmdGuardar.Enabled = True
Me.cmdCancelar.Enabled = True
End Sub
5. Cierre las ventanas de edición de código y haga doble click sobre el objeto cmdBuscar del
formulario
6. Es el momento de ingresar el código del botón cmdBuscar que se indica a continuación:
10
Private Sub cmdBuscar_Click()
Dim cedula As String 'Declara la variable cedula como cadena...
'Muestra un cuadro de mensaje solicitando la cédula que desea buscar...
'Y lo asigna a la variable cedula
cedula = InputBox("Ingrese la Cédula a Buscar")
'Si la variable no contiene nada, se muestra un error
'Y sale de este procedimiento...
If Trim(cedula) = "" Then
MsgBox "La cédula ingresada es inválida", vbCritical
Exit Sub
End If
'Pero si el usuario ingresa una cédula,
'Abre un RecordSet y verifica si existe...
rst.CursorLocation = adUseClient 'Siempre se coloca para que el RecordCount funcione
correctamente
'Esta instrucción abre un recordset que es una colección de registros de una o varias
tablas...
rst.Open "SELECT * FROM alumnos WHERE cedula='" + Trim(cedula) + "'", db,
adOpenDynamic, adLockOptimistic
If rst.RecordCount > 0 Then 'Si ha encontrado alguna coincidencia...
Me.txtApellido = rst!apellido 'Asigna los valores a los cuadros de texto
Me.txtCedula = rst!cedula
Me.txtDireccion = rst!Dir
Me.txtTelefono = rst!telf
Me.txtNombre = rst!nombre
Else 'De lo contrario, muestra un mensaje de que no se encontró ningun registro
MsgBox "No se encontró el alumno con esta cédula", vbCritical
End If
rst.Close
End Sub
Veamos lo que hemos hecho hasta ahora…
El botón nuevo activa todos los cuadros de texto para que el usuario pueda teclear la cédula,
nombre, apellido, etc del alumno que está registrando.
Dado que está “creando” un nuevo registro, sólo se podrán Guardar los cambios o
Cancelarlos, de allí que sólo se dejan activos los botones cmdGuardad y cmdCancelar,
mientras que cmdNuevo, cmModificar, cmdBuscar, cmdEliminar y cmdCerrar se
desactivan.
Lo mismo ocurre cuando se presiona el botón Modificar ya que se está tratando de editar
registros. La única diferencia notoria es el hecho de que para poder editar, el usuario debe
haber buscado un registro primeramente y luego, con los datos del mismo en el formulario,
presionar editar, es decir, obligatoriamente debe estarse visualizando un registro en la
pantalla. Por esta razón se verifica primero si el txtCedula.text tiene algún valor, porque esto
indica que se ha cargado previamente un registro para su modificación.
Nótese la utilización de la estructura condicional if que sirve para tomar una decisión en base al
resultado de una condición… Por ejemplo; si el txtcedula.text tiene “algo”, entonces, continuar,
de lo contrario, mostrar un error.
En cuanto al botón cmdBuscar, lo primero que se realiza pedirle al usuario cuál cédula desea
buscar. Para ello, se utiliza la función InputBox que muestra un cuadro de mensaje con una
región editable. Allí, el usuario escribirá la cédula a buscar y luego, se buscará en la tabla de
alumnos si existe alguna coincidencia con el valor ingresado.
La función InputBox() Muestra un mensaje en un cuadro de diálogo, espera que el usuario
escriba un texto o haga clic en un botón.
InputBox(mensaje[, titulo])
11
Parte
Descripción
prompt
Mensaje que se desea mostrar en el cuadro de diálogo. Debe ir entre
“comillas”
title
Opcional. Título del cuadro de diálogo. Si omite title, en la barra de título
se coloca el nombre de la aplicación.
Para realizar la búsqueda dentro de la tabla alumnos, se abre un recordset que pretenderá
contener todos los campos de aquellos registros cuya cédula sea igual a la ingresada por el
usuario.
Un recordset es un objeto de visual basic que es invisible, pues, está en la memoria durante la
ejecución del programa, pero que permite acceder a las tablas de la base de datos (que debe
estar abierta previamente), Es decir, se “abre” y permite buscar, guardar o eliminar registros de
una o varias tablas. Nótese que en el botón cmdBuscar, lo abrimos para buscar con una
cadena SQL (“SELECT * FROM alumnos WHERE cedula='" + cedula + "'") aquellos registros
cuya cédula sea igual a la que el usuario acaba de ingresar.
La sintaxis es: rst.open cadenaSQL, variabe_base_datos, tipo_de_rst, modo
rst es el objeto recordset que declaramos al inicio del proyecto
cadenaSQL es la instrucción SQL en forma de cadena que sirve para seleccionar los registros
variable_base_datos es la variable que abrió nuestra base de datos al inicio del programa
tipo_de_rst es el tipo de recordset. Puede ser adOpenDynamic (utilizado para consultas de
actualización de registros en múltiples tablas), adOpenTable (para abrir únicamente una sola
tabla. No admite los INNER JOIN de SQL) y adOpenForwardOnly (recordset rápido muy
utilizado para consultas ya que no permite actualización de registros)
modo: es el modo de apertura del recordset. A grandes rasgos, puede abrirse en modo
optimista (adLockOptimistic) o pesimista (adLockPessimistic). En modo optimista, se bloquea
sólo el registro que se está actualizando y en modo pesimista se bloquea toda la tabla. Es
importante para aplicaciones en red que se utilice mayormente el modo optimista para evitar
inconvenientes a los usuarios.
Por su parte, el recordcount es un método de ADO que permite determinar si existen registros
o no. Devuelve un número entero (1,2,n…) dependiendo del número de registros que
encuentre coincidientes con la consulta SQL del método open. Devolverá 0 si no existen
registros coincidientes y un número negativo si la propiedad cursorlocation es diferente a
adUseClient.
La siguiente línea:
Me.txtApellido = rst!apellido
Asigna el valor del campo apellido perteneciente al recordset rst al cuadro de texto
txtApellido
Nótese que la sintaxis rst!apellido indica que el campo apellido pertenece al recordset que
acabamos de abrir. También puede utilizarse rst.fields(“apellido”) o rst.fields(0) para referirse al
campo apellido por su nombre o por su índice dentro del conjunto del recordset. Se recomienda
usar la primera o segunda sintaxis.
Lo mismo ocurre con el resto de los campos.
12
Por último, la línea rst.close cierra el recordset que previamente teníamos abierto. De no
cerrarlo, es posible que al intentar reabrirlo se dispare un mensaje de error. Por lo tanto, desde
ahora adoptaremos la regla de “recordset que abre, recordset que cierra”.
INFORMACIÓN IMPORTANTE:
A lo largo del programa, se ha utilizado la función MsgBox la cual, muestra un cuadro de
mensaje al usuario pudiendo también permitir que éste seleccione entre opciones como Si o
No, Aceptar o Cancelar, etc. A continuación se describe con más detalle:
MsgBox (Función)
Muestra un mensaje en un cuadro de diálogo, espera a que el usuario haga clic en un botón y
devuelve un tipo Integer correspondiente al botón elegido por el usuario.
Sintaxis
MsgBox(mensaje[, buttons][, title][)
Parte
Descripción
Mensaje
Es el mensaje que aparece en el cuerpo del cuadro de mensaje
buttons
Corresponde a la suma de los valores que especifican el número y el tipo de los
botones que se pretenden mostrar, el estilo de icono que se va a utilizar, la
identidad del botón predeterminado y la modalidad del cuadro de mensajes. Si
se omite este argumento, el valor predeterminado para buttons es 0.
title
Opcional. Texto que se muestra en la barra de título del cuadro de diálogo. Si se
omite title, en la barra de título se coloca el nombre de la aplicación.
Valores
En el parámetro buttons pueden asignarse los siguientes valores:
Constante
Valor
Descripción
VbOKOnly
0
Muestra solamente el botón Aceptar.
VbOKCancel
1
Muestra los botones Aceptar y Cancelar.
VbAbortRetryIgnore
2
Muestra los botones Anular, Reintentar e
Ignorar.
VbYesNoCancel
3
Muestra los botones Sí, No y Cancelar.
VbYesNo
4
Muestra los botones Sí y No.
VbRetryCancel
5
Muestra los botones Reintentar y Cancelar.
VbCritical
16
Muestra el icono de mensaje crítico.
VbQuestion
32
Muestra el icono de pregunta de advertencia.
VbExclamation
48
Muestra el icono de mensaje de advertencia.
VbInformation
64
Muestra el icono de mensaje de información.
13
VbDefaultButton1
0
El primer botón es el predeterminado.
VbDefaultButton2
256
El segundo botón es el predeterminado.
VbDefaultButton3
512
El tercer botón es el predeterminado.
VbDefaultButton4
768
El cuarto botón es el predeterminado.
VbApplicationModal
0
Aplicación modal; el usuario debe responder al
cuadro de mensajes antes de poder seguir
trabajando en la aplicación actual.
VbSystemModal
4096
Sistema modal; se suspenden todas las
aplicaciones hasta que el usuario responda al
cuadro de mensajes.
VbMsgBoxHelpButton
16384
Agrega el botón Ayuda al cuadro de mensaje.
VbMsgBoxSetForeground
65536
Especifica la ventana del cuadro de mensaje
como la ventana de primer plano.
VbMsgBoxRight
524288
El texto se alínea a la derecha.
VbMsgBoxRtlReading
1048576
Especifica que el texto debe aparecer para ser
leído de derecha a izquierda en sistemas
hebreo y árabe.
El primer grupo de valores (0 a 5) describe el número y el tipo de los botones mostrados en el
cuadro de diálogo; el segundo grupo (16, 32, 48, 64) describe el estilo del icono, el tercer grupo
(0, 256, 512) determina el botón predeterminado y el cuarto grupo (0, 4096) determina la
modalidad del cuadro de mensajes. Cuando se suman números para obtener el valor final del
argumento buttons, se utiliza solamente un número de cada grupo.
Nota Estas constantes las especifica Visual Basic for Applications. Por tanto, el nombre de las
mismas puede utilizarse en cualquier lugar del código en vez de sus valores reales.
Valores devueltos
Constante
Valor
Descripción
vbOK
1
Aceptar
vbCancel
2
Cancelar
vbAbort
3
Anular
vbRetry
4
Reintentar
vbIgnore
5
Ignorar
vbYes
6
Sí
vbNo
7
No
8. Procedamos ahora a crear el código del botón cmdCancelar
Private Sub cmdCancelar_Click()
'Desactiva TODOS los cuadros de texto...
Me.txtApellido.Enabled = False
Me.txtCedula.Enabled = False
Me.txtDireccion.Enabled = False
14
Me.txtNombre.Enabled = False
Me.txtTelefono.Enabled = False
'Limpia TODOS los cuadros de texto...
Me.txtApellido.Text = ""
Me.txtCedula.Text = ""
Me.txtDireccion.Text = ""
Me.txtNombre.Text = ""
Me.txtTelefono.Text = ""
'Activa todos los botones de comando exeptuando Guardar y Cancelar
Me.cmdBuscar.Enabled = True
Me.cmdCerrar.Enabled = True
Me.cmdEditar.Enabled = True
Me.cmdNuevo.Enabled = True
Me.cmdEliminar.Enabled = True
Me.cmdGuardar.Enabled = False
Me.cmdCancelar.Enabled = False
End Sub
Lo único destacable que realiza el botón Cancelar es limpiar y desactivar todos los cuadros de
texto y restaurar los botones a su estado original.
9. Es el momento del agregar código del evento Click el botón Guardar
Private Sub cmdGuardar_Click()
rst.CursorLocation = adUseClient
'Verifica que se hayan ingresado todos los valores en los textboxes antes de
guardar...
If Me.txtCedula.Text = "" Or Me.txtApellido.Text = "" Or Me.txtDireccion.Text = "" Or
Me.txtNombre.Text = "" Or Me.txtTelefono.Text = "" Then
'Si hay algun textbox en blanco, se muestra un mensaje de error
MsgBox "Debe ingresar todos los datos", vbExclamation
Else
'De lo contrario, se procede al guardado del registro...
'Primero, busca si existe algun registro con la cedula que estamos intentando
guardar...
SQL$ = "SELECT * FROM alumnos WHERE cedula='" + Trim(Me.txtCedula.Text) + "'"
rst.Open SQL$, db, adOpenDynamic, adLockOptimistic
'Si existen registros, pegunta si se desean actualizar los cambios...
If rst.RecordCount > 0 Then
If MsgBox("El registro ya existe. ¿Reemplazarlo?", vbQuestion + vbYesNo) = vbYes
Then
'y se elimina el registro existente, para crearlo con los nuevos datos...
db.Execute "DELETE * FROM alumnos WHERE cedula='" + Trim(Me.txtCedula.Text) +
"'"
Else 'Si se desea cancelar la operacion de guardado,
rst.Close 'Cierra el recordset
Exit Sub 'y sale de este procedimiento
End If
rst.AddNew 'Agrega un nuevo registro a la tabla alumnos
'Le asigna a los campos de la tabla alumnos, los valores respectivos de los
textboxes
rst!cedula = Trim(Me.txtCedula.Text)
rst!nombre = Trim(Me.txtNombre.Text)
rst!apellido = Trim(Me.txtApellido.Text)
rst!Dir = Trim(Me.txtDireccion.Text)
rst!telf = Trim(Me.txtTelefono)
rst.Update 'Guarda los cambios en la tabla
MsgBox "Registro Guardado", vbInformation 'Y muestra un mensaje final
cmdCancelar_Click 'Limpia los cuadros de texto
End If
rst.Close 'Cierra el recordset
End If
End Sub
El funcionamiento del botón cmdGuardar es muy sencilo. Primero se verifica que todos los
textboxes tengan algún valor para evitar que se creen registros inconsistentes. Luego, se busca
si en la tabla existe algún registro con la cédula que está en el txtcedula para asegurarnos que
15
no estamos repitiendo registros. (Nota: de todas maneras en la tabla ya hemos definido que la
cédula es un índice que no admite duplicados).
Si por alguna casualidad la cédula ya existe, sencillamente preguntamos si se desea actualizar
los datos existentes por los nuevos. Si responde “Si”, se borra el registro anterior y se procede
a crear el nuevo. De lo contrario, sale del procedimiento.
Si la cédula no existe, sencillamente se crea un registro como nuevo. Finalmente se guardan
los cambios y limpian los objetos.
10. Finalmente, agregamos el código del botón cmdEliminar tal como sigue:
Private Sub cmdEliminar_Click()
'Verifica que se haya cargado un registro en pantalla...
'Si el textbox cedula no tiene nada, significa que no se ha cargado...
If Me.txtCedula.Text = "" Then
'Y muestra un error al usuario
MsgBox "Imposible eliminar sin un registro cargado", vbCritical
Exit Sub
End If
'De lo contrario, pregunta si está seguro e eliminar el registro...
'Si responde "SI" procede a borrarlo de la tabla...
If MsgBox("¿Está Seguro?", vbQuestion + vbYesNo) = vbYes Then
db.Execute "DELETE * FROM alumnos WHERE cedula=' " + Trim(Me.txtCedula.Text) + " '
"
'Y muestra un mensaje al usuario...
MsgBox "El registro fue eliminado", vbInformation
End If
End Sub
11. Para probar la ejecución del programa, presiones CONTROL+F5 e intente crear, modificar,
y eliminar registros.
EJERCICIO:
Diseñe un formulario con acceso a datos para actualizar los datos de las materias que
pudiesen cursar los alumnos de un tecnológico. Cada materia debe tener un código único,
nombre y unidades de crédito a cursar. Nota: deberá diseñar una tabla en Access dentro de la
base de datos central
Con lo visto hasta el momento, usted podrá crear formularios sencillos con acceso a datos, los
cuales, le permitirán agregar, modificar, eliminar y buscar registros dentro de una tabla o
conjunto de tablas. Es el momento de continuar la labor investigativa y refinar el código visto
hasta ahora. Recuerde que la programación tiene numerosas vías para llegar a la solución de
un problema.
BIBLIOGRAFÍA RECOMENDADA:
LA ESENCIA DE VISUAL BASIC 4. Mark Steven Heymann
APRENDA VISUAL BASIC 5 YA! Michael Halvorson
VISUAL BASIC 6.0 Luis Joyanes Aguilar
BASES DE DATOS EN VISUAL BASIC 6. Mc. Manus
16
MENÚS EN VISUAL BASIC
Un menú es una lista de opciones que se muestran al usuario y donde éste puede seleccionar
una o varias de ellas dependiendo de las acciones que desee realizar en el sistema. En este
caso, vamos a diseñar un menú de la siguiente manera:
Archivo
Alumnos
Profesores
Salir
Consultas
Reportes
Listado de alumnos
Reporte de Alumnos
Listado de Profesores Reporte General de profesores
1. Lo primero que debemos hacer es agregar un formulario en blanco a nuestro proyecto que
será nuestro formulario de inicio (ya que desde allí invocaremos todas las posibles opciones del
sistema) y para ello, hacemos clic en el menú Proyecto / Agregar Formulario y adicionamos
un nuevo formulario en blanco en nuestro proyecto.
2. Ahora, hacemos clic en el menú Herramientas / Editor de Menú y aparecerá la siguiente
ventana:
3. En el caption coloque el título del menú
(puede incluir espacios en blanco y
caracteres especiales y utilizar el “&” para
asignar una tecla aceleradora. En este caso,
escribamos “&Archivo”
4. En el name escriba el nombre del objeto.
No puede tener espacios en blanco, ni
caracteres especiales ni empezar con
números. Coloque mnuArchivo
5. Index: es el índice del menú en caso de
que se utilicen menús con el mismo nombre
(arreglos de objetos)
6. El Shortcut permite asignar una
combinación de teclas al menú
Checked Indica si el menú al ser seleccionado tendrá una marca al estilo de una tilde
Enabled: Indica si el menú está activado o no
Visible: Indica si el menú está visible o no
WindowList: Permite que el menú muestre una lista de ventanas secundarias dentro de
aplicaciones de múltiples documentos (MDI)
7. Una vez que hemos dado el nombre y título al menú Archivo, damos Enter y la figura
muestra lo siguiente:
8. Podrá notar que se agrega nuestro menú y
el cursor se ubica una línea justo debajo de
la palabra “&Archivo”
9. Ahora, clickeamos en la flecha derecha
para indicarle a Visual Basic que el elemento
de menú que crearemos ahora está dentro
de la lista Archivo.
10. Hecho esto, notamos que aparece una
línea punteada y escribimos en el caption
“Alumnos”.
Al mismo tiempo, en el name escribimos
mnuArchivoAlumnos. Así sabemos que
17
estamos dentro del elemento “Alumnos” que pertenece al menú “Archivo” y presionamos Enter.
11. Ahora, agregamos el elemento “Profesores” dentro del menú Alumnos. El nombre que le
daremos será mnuArchivoProfesores y por último el menú Salir al cual le daremos el nombre
mnuArchivoSalir.
12. Para crear el menú Consultas debemos hacer clic en la línea en blanco que queda luego
de crear el elemento Salir del menú Archivo. Allí, debe clickear sobre la flecha izquierda para
colocar el menú Consultas al mismo nivel del menú Archivo.
13. Al estar en el nivel del menú Archivo, coloque el caption “Consultas” y en name escriba
mnuConsultas y presione Enter
14. Agregue los elementos Listado de Alumnos y Listado de Profesores a los cuales deberá
asignar el nombre mnuConsultaAlumnos y mnuConsultaProfesores respectivamente.
15. Finalmente coloque el menú Reportes al mismo nivel de los menús Archivo y Consultas.
Asigne el nombre mnuReportes y dentro de éste, cree los elementos mnuReportesAlumnos
y mnuReportesProfesores con el caption “Reporte de Alumnos” y “Reporte de
Profesores” respectivamente.
El resultado final queda así:
16. Finalmente, clickee en Aceptar para
ver el menú en su formulario.
17. Ahora, haga click sobre el formulario y
presione F4 para mostrar la ventana
Propiedades
18. Busque la propiedad Nombre (la
primera que aparece en la lista) y escriba
frmMain (este es el nombre que tendrá
nuestro formulario principal)
19. Ahora, abra el módulo inicial y
ubíquese en la línea de código:
Sub main()
Frmalumnos.show
End Sub
20. Reemplace la línea de código frmalumnos.show por frmMain.show
21. Ahora, abra el formulario de principal (frmmain) y clickee sobre el menú Archivo que
acabamos de crear. Luego sobre el ítem Alumnos y se abrirá la siguiente ventana de código:
22. Agregue la siguiente línea de código:
Frmalumnos.show
Esto quiere decir que cuando se clickee
sobre esta opción se mostrará el formulario
de alumnos.
18
23. Guarde los cambios y Ejecute el proyecto con CONTROL+F5 para probar su
funcionamiento.
24. En el menú Salir escriba la línea de código End para que el usuario salga del sistema
cuando seleccione esta opción.
25. Ahora, abra el formulario frmAlumnos y en el botón cmdCerrar reemplace el código End
por Unload Me quedando así:
Private sub cmdCerrar_Click()
Unload Me
End Sub
Esto indicará que cuando el usuario clickee en el botón Cerrar de dicho formulario, no salga
totalmente del sistema, sino que solamente salga del formulario de alumnos.
LAS CUADRÍCULAS EN VISUAL BASIC
Las cuadrículas (también llamadas rejillas, gradillas, o grids) son objetos muy útiles ya que
permiten presentar la información de una manera integrada. Constan de una tabla dividida en
filas y columnas que pueden ser llenadas con datos procedentes de una base de datos o desde
otros objetos del programa.
Existen numerosos objetos de cuadrícula que podemos utilizar. En este caso, emplearemos el
Microsoft Flex Grid que es proporcionado por Visual Studio 6.0
1. Dado que el FlexGrid no es un control intrínseco (no se muestra en el cuadro de controles de
VB) es necesario agregarlo. Para ello, presionamos CONTROL+T para mostrar los
Componentes (objetos ActiveX)
2. En la lista buscamos Microsoft FlexGrid Control 6.0, lo marcamos y presionamos Aceptar
3. Al hacer esto, se agrega el icono
a nuestro cuadro de controles
4. Agreguemos un nuevo formulario a nuestro proyecto (menú proyecto / formulario) al que
llamaremos frmConsultaAlumnos y allí insertamos un nuevo Flexgrid tal como se muestra a
continuación:
5. Hagamos un clic sobre el grid y
cambiamos
la
propiedad
“nombre”
del
objeto
por
grdConsulta
6. Hagamos doble click sobre el
formulario y se abrirá el evento
Form_Load() y agregue el
siguiente código:
Private Sub Form_Load()
Me.grdconsulta.Clear
'Limpia la cuadricula...
Me.grdconsulta.Rows = 2 'Dibuja 2 lineas (filas) en blanco
'La primera linea es para los titulos y la segunda para datos
Me.grdconsulta.Cols = 5 'Dibuja 5 columnas (una para cada campo de la tabla alumnos)
Me.grdconsulta.ColWidth(0)
Me.grdconsulta.ColWidth(1)
Me.grdconsulta.ColWidth(2)
Me.grdconsulta.ColWidth(3)
Me.grdconsulta.ColWidth(4)
=
=
=
=
=
1000
1000
1000
1000
1000
'Ancho de la primera columna en pixeles
'Ancho de la segunda columna en pixeles
'y asi sucesivamente...
19
Me.grdconsulta.TextMatrix(0,
Me.grdconsulta.TextMatrix(0,
Me.grdconsulta.TextMatrix(0,
Me.grdconsulta.TextMatrix(0,
Me.grdconsulta.TextMatrix(0,
0)
1)
2)
3)
4)
=
=
=
=
=
"cedula"
'Encabezado de la primera columna
"Nombre"
'Encabezado de la segunda columna
"Apellido" 'y asi sucesivamente
"Direccion"
"Telefono"
rst.CursorLocation = adUseClient
ssql = "SELECT * FROM Alumnos ORDER BY cedula"
'Lee todos los registros de la tabla
alumnos
rst.Open ssql, db, adOpenDynamic, adLockOptimistic 'Abre el recordset
If rst.RecordCount = 0 Then
'Si no encuentra registros, muestra
un error
MsgBox "No existen registros para mostrar", vbCritical
Else 'De lo contrario, lee cada registro y agrega una linea con los datos...
For i% = 1 To rst.RecordCount
'El additem permite agregar una nueva linea a la cuadricula...
'En este caso, se coloca el valor de cada campo separados por una tabulacion para
que se vayan moviendo de columna en columna...
Me.grdconsulta.AddItem
rst.Fields(0)
+
vbTab
+
rst.Fields(1)
+
vbTab
+
rst.Fields(2) + vbTab + rst.Fields(3) + vbTab + rst.Fields(4)
'y luego se mueve al siguiente registro...
rst.MoveNext
Next i%
End If
rst.Close 'Una vez terminado todo el recorrido por el recordset, se cierra
End Sub
Veamos lo que hace el código que acabamos de agregar…
Primeramente, se observa el evento clear que borra todo el contenido del flexgrid, dejándolo
con 2 filas y 2 columnas de manera predeterminada.
Luego, se le indica al programa que debe agregar 5 columnas (cedula, nombre, apellido,
dirección y teléfono). Esto se realiza a través de la propiedad Cols. Al mismo tiempo, se le
indica que se dibujarán 2 líneas (una para los encabezados o títulos de las columnas y otra que
quedará en blanco). Para esto, se utiliza la propiedad Rows
Posteriormente, se le otorga el ancho a cada una de las columnas (ColWidth). El mismo debe
estar especificado en Pixeles.
Luego, puede observarse la propiedad TextMatrix. Este es muy importante ya que a través de
ella, podemos “rellenar” la cuadrícula con el texto que deseemos. En este caso, se utiliza para
colocar los encabezados de columnas. De allí las líneas similares a:
Me.grdconsulta.TextMatrix(0, 0) = "cedula"
Nótese que aquí estamos colocando el encabezado a la columna 1 de la línea 1 de nuestra
cuadrícula. Sin embargo, es de hacer notar que nuestra cuadrícula comienza a contar las filas y
columnas desde “Cero” (0). Esto quiere decir que si establecemos TextMatrix(1,2) en realidad
hacemos referencia a línea número dos (2) y columna número tres (3)
Importante: Es un error muy común pensar que al decir TextMatrix(1,1) se está referenciando
a la primera línea y primera columna de la cuadrícula, lo cual como ya se ha visto representa
falta de conocimiento sobre el manejo de los grids.
Continuando con el código, notamos que se abre un recordset con todos los registros de la
tabla Alumnos (tal como se nota en la cadena SQL) y se recorre el recordset registro por
registro con la estructura For de Visual Basic.
El For permite repetir una serie de instrucciones ubicadas entre el For y Next. Allí, se puede
observar que se utiliza el método AddItem para agregar los datos extraídos de la tabla
alumnos en cada una de las columnas de la cuadrícula.
Me.grdconsulta.AddItem rst.Fields(0) + vbTab + rst.Fields(1)
20
El additem funciona así: Se agrega una línea en blanco. A la primera columna se le asigna el
valor del primer campo del recordset (es decir el campo cédula) que tiene el índice cero (0).
Luego, se le suma un carácter de tabulación para que el cursor se mueva a la siguiente
columna dentro de esa línea y coloca el dato para la columna nombre, es decir, el lee el
segundo campo del recordset (rst.fields(1)) y sigue sumando tabulaciones y campos hasta
terminar con el último.
Posteriormente el rst.movenext permite que una vez leído y mostrado un registro, continué con
el siguiente hasta que se terminen de leer todos.
Al final se cierra el recordset.
IMPORTANTE: El FlexGrid no permite escribir directamente sobre las celdas de la cuadrícula.
Para ello debe recurrirse a artificios de programación, aunque existen en el mercado otras
cuadrículas muy funcionales que permiten la escritura directamente sobre ellas.
Es de destacar que en Visual Basic puede insertarse cualquier tipo de cuadrícula siempre y
cuando sea un control ActiveX (OCX). Entre los más populares, se encuentran:
DataGrid y DBGrid: Incluida en Visual Studio 6.0. Aunque permite edición y agregación directa
de registros sobre la cuadrícula, es limitada en cuanto a la cantidad de propiedades, métodos y
eventos que proporciona.
VideoSoft FlexGrid: de VideoSoft Corp. Presenta muchas bondades de edición sobre la
cuadrícula. Excelente opción para jerarquizar datos, cambiar el modo de visualización y
contiene muchos eventos, métodos y propiedades personalizables. Se puede comprar por
Internet.
Janus GridEX: Además de las potencialidades proporcionadas por el VideoSoft FlexGrid, tiene
un generador de propiedades muy fácil e intuitivo de manipular. También se compra por
internet.
Hasta este punto, se ha explorado el uso básico del FlexGrid. Para profundizar más acerca del
funcionamiento de este objeto, revisa la ayuda de Visual Basic 6.0
EJERCICIO:
Diseña un formulario con un MsFlexGrid que reciba datos a partir de la tabla Profesores
previamente diseñada en Access. Invoca este formulario desde la pantalla principal del
sistema.
21
INFORMACIÓN COMPLEMENTARIA
USO DE LOS OBJETOS PICTUREBOX, IMAGE
Un control PictureBox puede mostrar un gráfico a partir de un mapa de bits, un icono o un
metarchivo, así como un metarchivo mejorado, un archivo JPEG o un archivo GIF. Recorta el
gráfico si el control no es lo bastante grande para mostrar la imagen completa
Para vincular una imagen se utiliza la propiedad picture y la función LoadPicture así:
picMiPictureBox.Picture = Loadpicture(“C:\IMAGENES\miimagen.jpg)
Aquí, picMiPictureBox es el objeto PictureBox
Picture es la propiedad que asigna la imagen
LoadPicture es una función de Visual Basic que llama a la imagen que está ubicada en la ruta
especificada. En este caso, se “vincula” la imagen. Si la misma se borra de la ubicación
C:\IMAGENES, el LoadPicture generará un error.
El objeto 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.
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.
EL COMBOBOX Y LISTBOX
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, use 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.
Un control ListBox muestra una lista de elementos entre los cuales el usuario puede
seleccionar uno o más. Si el número de elementos supera el número que puede mostrarse, se
agregará automáticamente una barra de desplazamiento al control ListBox.
Si no se selecciona ningún elemento, el valor de la propiedad ListIndex será -1. El primer
elemento de la lista es ListIndex 0 y el valor de la propiedad ListCount siempre es uno más
que el mayor valor de ListIndex.
Para agregar o eliminar elementos de un control ListBox, use el método AddItem o
RemoveItem. Establezca las propiedades List, ListCount y ListIndex para permitir que un
usuario tenga acceso a elementos del ListBox. También puede agregar elementos a la lista
mediante la propiedad List en tiempo de diseño.
22
REPORTES EN VISUAL BASIC
Para la generación de reportes en Visual Basic, es necesario instalar el complemento Crystal
Reports, el cual, es un sencillo e intuitivo generador de reportes producido por Seagate
Software e incluido en Visual Studio 6.0. La versión a utilizar será la 4.5 (ya que forma parte de
VS 6.0), aunque existen versiones posteriores en el mercado.
La creación de un reporte, se divide en dos etapas:
1. El diseño del archivo de reporte (plantilla del reporte), el cual, tiene extensión .rpt
2. La vinculación del archivo .rpt con visual Basic a través del control ActiveX de Crystal
Reports
Etapa 1. Diseño del archivo .rpt
1. En el IDE de Crystal Reports, clickear en el
botón “Nuevo” y se desplegará la ventana
para elegir el tipo de informe. Se recomienda
utilizar “Estándar” para informes con grupos y
subgrupos, “Listado” para reportes de tipo lista
de registros y “Resumen” para reportes que
ameriten. Sumarizar la información. Elija
“Estándar”
Luego, se abrirá una ventana donde deberá
indicar el archivo de base de datos que
contiene los datos para el informe. La opción
“Archivo” funciona para archivos de Access
97. A partir de la versión 2000, se utiliza la
opción “SQL/ODBC”. Haga clic en esta última.
Después, debe indicar el tipo de origen
ODBC que utilizará. Para Access 2000 en
adelante, utilice ODBC – Ms Access
Database
Posteriormente, indique la(s) tabla(s) que
formarán parte del informe. En este caso,
seleccione la tabla “Alumnos”
23
Ya se ha incluido la tabla en el informe. El paso
siguiente, es indicarle los campos que se mostrarán
en el mismo.
Seleccione el campo que desee agregar al
informe y clickee en “Agregar” para que se
coloquen en la lista de la derecha. También
puede cambiar la leyenda del mismo utilizando la
opción “Encabezado del informe”
Ahora, deberá indicar el campo que servirá para
ordenar el informe. Esta opción es obligatoria.
Ahora, deberá indicar cuáles campos se
totalizarán al final del informe. En este caso, no
se utilizará.
24
Ahora, será necesario indicar la “fórmula de selección de registros”. Esta no se utilizará en
tiempo de diseño, sino en tiempo de ejecución.
En la ventana final, presione
“Informe Previo”
El informe resultante se verá como el siguiente:
Un informe, tiene varias secciones:
Título: Se imprime una vez por cada informe (se recomienda para efectos de identificación de
la empresa)
Encabezado: Se imprime en cada página del informe. Se recomienda colocar aquí, los títulos
de los campos a mostrar. En ocasiones, también es importante utilizar esta sección para
mostrar el encabezamiento de la empresa en lugar de la sección “Título”.
25
Detalle: Se imprime por cada registro del informe. Aquí es prudente colocar los campos que se
desean mostrar en el reporte.
Pie de Página: Se imprime una vez por página. Es prudente colocar aquí, los números de
página o datos similares.
Resumen: Se imprime una vez por informe (al final). Es recomendable utilizarlo para mostrar
sumatorias o totales generales al final del reporte.
Fase 2. Vinculación por Visual Basic 6.0
Para tal efecto, es necesario abrir un nuevo proyecto o uno existente, e insertar el objeto
“Crystal Reports Control” presionando Control + T (Componentes)
Al agregar el componente al proyecto,
deberá incluir un objeto Crystal Reports
dentro de un formulario. Este objeto es
visible en tiempo de diseño e invisible en
tiempo de ejecución.
Colocar el nombre “rpt” en el Objeto
insertado CrystalReports1 del formulario y
agregar un botón con el caption “Generar
Reporte” con el nombre “Generar”
Private Sub cmdGenerar_Click()
'Indica la ruta y nombre del reporte .rpt
Me.rpt.ReportFileName = App.Path + "\PRUEBA.RPT"
'El reporte se mostrará maximizado
Me.rpt.WindowState = crptMaximized
'Muestra el reporte por pantalla
Me.rpt.Action = 1
End Sub
Observación: Es obligatoria la creación de un origen de datos ODBC para la vinculación con
los reportes diseñados en Cristal Reports. Para que funcione el ejemplo anterior, el nombre del
DSN debe ser “Reportes”.
Propiedad LogonInfo:
(0)= Indica el índice de archivo mdb que se vinculará
DSN=”Reportes” =Indica el nombre del DSN previamente creado
UID=admin. =Nombre de usuario. En Access este es el usuario por defecto
PWD= Indica el password hacia la base de datos
DSQ=Indica el nombre del archivo MDB a vincular
26
EMPAQUETADO Y DISTRIBUCION DE UNA APLICACIÓN EN VISUAL BASIC 6.0
Es el momento de preparar nuestra aplicación para la “venta”. Para ello, es necesario
Compliarla, empaquetarla y distribuirla.
COMPILAR: Es el proceso de convertir el proyecto a código binario entendible por la maquina
(código objeto .OBJ) y luego, enlazarlo con las bibliotecas del lenguaje para crear un .EXE
El proceso de compilación es como se describe a continuación:
1. Elija la opción Archivo / Generar y
aparecerá esta ventana donde deberá
especificar el nombre del archivo
ejecutable y su ubicación.
2. Coloque el nombre sistema.exe y
ubíquelo en C:\SISTEMA
3. Haga clic en el botón opciones para
que aparezca la siguiente ventana:
4. En la sección numero de versión
puede especificar la versión primaria,
secundaria y la revisión, que se podrá
incrementar automáticamente cada vez
que se compile el proyecto.
5. Se puede configurar el icono de la
aplicación colocando la propiedad icon del
formulario inicial dependiendo del icono
deseado (archivo .ico).
6. Asimismo, se puede colocar los
comentarios de la compilación, derecho de
autor y argumentos de la línea de
comandos (en caso de que se requiera).
7.Finalmente, seleccione Aceptar (OK)
para iniciar la compilación
Visual Basic 6.0 admite dos modos de compilación: código nativo que significa que cada
archivo frm o bas (o cualquier otro que integre el proyecto) queda encapsulado dentro de un
,exe y código p-code o seudocódigo: donde cada archivo del proyecto se compila
“independientemente” y se requiere la presencia de los archivos objeto para que el .exe se
ejecute normalmente. Se ha extendido ampliamente la compilación por código nativo.
EMPAQUETAR una aplicación en VB 6.0 consiste en recopilar todos los componentes
necesarios para que un programa compilado pueda ejecutarse en un equipo sin necesidad de
instalar el lenguaje. Al empaquetar un proyecto, se deben incluir los OCX, DLL’s, Ejecutables,
Bases de datos, iconos, archivos complementarios y demás componentes requeridos.
DISTRIBUIR: Implica seleccionar los dispositivos de almacenamiento pertinentes para que el
producto empaquetado pueda ser instalado en tantos equipos como se desee.
27
Para realizar este trabajo, Visual Basic cuenta con el Asistente para Empaquetado y
Distribución.
1. Abra el menú Inicio y en el grupo de programas “Microsoft Visual Studio”, luego,
“Herramientas de Visual Studio”
2. Luego, seleccione “Asistente para Empaquetado y Distribución”
3. Presione el botón “Empaquetar para iniciar el
empaquetado del proyecto.
4. En este punto, el asistente buscará los
componentes necesarios para ejecutar el proyecto
5. Luego, se pedirá que seleccionemos una
secuencia de comandos preestablecida para la
instalación (si existe). En este caso, seleccione
“Ninguno” y presione “Siguiente”
6. En el siguiente paso, seleccione “Paquete
de instalación estándar”, es decir, el producto
final, será un programa del tipo “SETUP.EXE”
tal como ocurre con la mayoría de los
productos desarrollados para Windows.
7. Luego, seleccione la carpeta donde se
generarán los archivos del paquete. (se le
asignará el nombre “paquete” por defecto)
28
8. En el siguiente paso, seleccione
alguno de los componentes de la lista
si son necesarios (en este caso, no se
utilizarán). Presione “Siguiente”
9. Luego, si se detectan archivos para
los que no se encuentra información
de dependencia, debe estudiar cada
caso. De no representar ningún
problema, tilde dichos componentes y
clickee en “siguiente”
10. Posteriormente, se muestra una
lista de los archivos necesarios para
ejecutar el proyecto. Asegúrese de
incluir los MDB de access, y los
archivos que no hayan sido
detectados por el asistente.
11. Seleccione si desea empaquetar en un solo archivo .CAB o múltiples archivos (Esta última
opción se utiliza cuando se desea distribuir en múltiples diskettes – No es recomendada)
12. Luego, se le pedirá un título para su instalador y el grupo de programas que se creará en el
menú inicio cuando se instale su aplicación.
29
13. Luego, debe seleccionar la ubicación donde se instalarán sus archivos (normalmente no
debe tener modificaciones salvo casos especiales)
14. Por último, se especifican los archivos compartidos. Si nuestro programa los utiliza,
debemos indicarle esto.
15. Finalmente, se guardará la secuencia de comandos para instalación. Si posteriormente es
necesario volver a empaquetar, se puede seleccionar esta secuencia para evitar el trabajo de
volver a indicar todos los componentes y archivos
30
16. Finalmente, el asistente comenzará a generar los archivos .CAB y nuestro paquete de
distribución quedará listo
Descargar