Vous êtes sur la page 1sur 164

Contenido

Unidad 1 ............................................................................................................ 12 Introduccin a Visual Basic ............................................................................... 12


1.1. Nociones bsicas .................................................................................... 12 1.1.1. Historia ....................................................................................................... 12 1.1.2. Concepto .................................................................................................... 14 1.1.3. Ventajas ..................................................................................................... 14 1.1.4. Requerimientos ........................................................................................... 15 1.1.5. Compilacin ................................................................................................ 15 1.1.6. Modos de operacin .................................................................................... 16 1.1.7. Reglas de Visual Basic ................................................................................. 16 1.2. Teora de Objetos ................................................................................... 18 1.2.1. Clase .......................................................................................................... 18 1.2.2. Objeto ........................................................................................................ 18 1.2.3. Propiedades ................................................................................................ 19 1.2.4. Mtodos...................................................................................................... 20 1.2.5. Evento ........................................................................................................ 20 1.2.6. Procedimientos de evento ............................................................................ 21 1.2.7. Encapsulacin ............................................................................................. 22 1.2.8. Polimorfismo ............................................................................................... 22

Unidad 2 ............................................................................................................ 23 Trabajar con Visual Basic .................................................................................. 23


2.1. Estructura de proyecto ........................................................................... 23 2.1.1. Proyecto ..................................................................................................... 23 2.1.2. Mdulos ...................................................................................................... 23 2.1.3. Procedimientos ............................................................................................ 24 2.1.4. Declaraciones .............................................................................................. 24 2.2. IDE de Visual Basic................................................................................. 25 2.2.1. Entorno de Desarrollo Integrado (IDE).......................................................... 25 2.2.2. Ventana Explorador de Proyecto ................................................................... 25 2.2.3. Ventana Diseador de Formularios ............................................................... 26 2.2.4. Ventana de cdigo....................................................................................... 26 2.2.5. Caja de herramientas................................................................................... 27 2.2.6. Ventana de propiedades .............................................................................. 27 2.2.7. Funciones bsicas del IDE ............................................................................ 28 2.3. Crear una aplicacin............................................................................... 32 2.3.1. Pasos bsicos .............................................................................................. 32 2.3.2. Colocar los objetos ...................................................................................... 32 2.3.3. Establecer las propiedades ........................................................................... 33 2.3.4. Escribir el cdigo ......................................................................................... 34

Unidad 3 ............................................................................................................ 36 Objetos de Visual Basic ..................................................................................... 36


3.1. El formulario .......................................................................................... 36 3.1.1. Formulario (Clase: Form) ............................................................................. 36 3.1.2. Propiedades de formularios .......................................................................... 37 3.1.3. Mtodos de formularios ............................................................................... 38 3.1.4. Eventos de formularios ................................................................................ 38

3.2. Los controles .......................................................................................... 39 3.2.1. Etiqueta (Clase: Label) ................................................................................ 39 3.2.2. Botn de comando (Clase: CommandButton) ................................................ 40 3.2.3. Caja de texto (Clase: TextBox) ..................................................................... 41 3.2.4. Marco (Clase: Frame) .................................................................................. 43 3.2.5. Caja de imagen (Clase: PictureBox) .............................................................. 43 3.2.6. Botn de opcin (Clase: OptionButton) ......................................................... 44 3.2.7. Caja de verificacin (Clase: CheckBox) ......................................................... 44 3.2.8. Caja de lista (Clase: ListBox) ........................................................................ 44 3.2.9. Caja combinada (Clase: ComboBox) ............................................................. 45 3.2.10. Barra de desplazamiento (Clase: HScrollBar, VScrollBar) ................................ 46 3.2.11. Temporizador (Clase: Timer)........................................................................ 46 3.2.12. Imagen (Clase: Image) ................................................................................ 46 3.2.13. Figura (Clase: Shape) .................................................................................. 47 3.2.14. Lnea (Clase: Line) ...................................................................................... 47 3.2.15. Ubicacin de los controles bsicos ................................................................ 47 3.2.16. Ejemplo de los controles bsicos .................................................................. 48

Unidad 4 ............................................................................................................ 50 Cdigo en Visual Basic ....................................................................................... 50


4.1. Espacios de memoria .............................................................................. 50 4.1.1. Identificadores ............................................................................................ 50 4.1.2. Tipos de datos ............................................................................................ 50 4.1.3. Declaracin de espacios de memoria ............................................................ 52 4.1.4. Alcance de variables y constantes................................................................. 53 4.1.5. Declaracin de variables .............................................................................. 53 4.1.6. Declaracin de constantes (simblicas) ......................................................... 54 4.1.7. Constantes intrnsecas ................................................................................. 54 4.1.8. Arreglos ...................................................................................................... 55 4.1.9. Objetos y espacios de memoria .................................................................... 56 4.2. Operadores ............................................................................................. 57 4.2.1. Aritmticos.................................................................................................. 57 4.2.2. Lgicos ....................................................................................................... 58 4.2.3. Relacionales ................................................................................................ 58 4.2.4. Operadores especiales ................................................................................. 59 4.2.5. Precedencia de los operadores ..................................................................... 59 4.3. Estructuras de control ............................................................................ 60 4.3.1. Programacin estructurada .......................................................................... 60 4.3.2. Tipos de estructuras .................................................................................... 60 4.3.3. Estructura bifurcativa If-Then-ElseIf-Else ...................................................... 60 4.3.4. Estructura bifurcativa Select-Case................................................................. 61 4.3.5. Estructura repetitiva For-Next ...................................................................... 62 4.3.6. Estructura repetitiva Do-Loop ....................................................................... 63 4.4. Procedimientos....................................................................................... 64 4.4.1. Procedimientos y subrutinas ......................................................................... 64 4.4.2. Ventajas de los procedimientos .................................................................... 65 4.4.3. Clasificacin de procedimientos .................................................................... 66 4.4.4. Alcance de procedimientos ........................................................................... 67 4.4.5. Trabajar con procedimientos ........................................................................ 67 4.4.6. Transferencia de parmetros........................................................................ 69 4.4.7. Ejemplo completo de la unidad .................................................................... 70

Unidad 5 ............................................................................................................ 71 Funciones intrnsecas ........................................................................................ 71


5.1. Funciones en general ............................................................................. 71 5.1.1. Expresiones ................................................................................................ 71 5.1.2. Funciones ................................................................................................... 71 5.1.3. Instrucciones .............................................................................................. 72 5.2. Funciones de cadena .............................................................................. 72 5.2.1. Tratamiento de cadenas .............................................................................. 72 5.2.2. Cambiar a maysculas y minsculas ............................................................. 73 5.2.3. Determinar la longitud de una cadena .......................................................... 73 5.2.4. Buscar caracteres dentro de una cadena ....................................................... 73 5.2.5. Extraer e insertar caracteres a una cadena ................................................... 74 5.2.6. Tratamiento de espacios en blanco ............................................................... 74 5.2.7. Convertir a nmero y a cadena .................................................................... 75 5.2.8. Obtener cadenas de caracteres con formato ................................................. 75 5.2.9. Mapa de caracteres ..................................................................................... 77 5.3. Funciones numricas.............................................................................. 78 5.3.1. Funciones matemticas ................................................................................ 78 5.3.2. Funciones de ajuste decimal ........................................................................ 78 5.3.3. Funcin de nmero aleatorio ........................................................................ 79 5.4. Funciones de fecha y hora...................................................................... 79 5.4.1. Obtener la fecha y hora del sistema.............................................................. 79 5.4.2. Establecer la fecha y hora del sistema .......................................................... 79 5.4.3. Realizar clculos con fechas y horas ............................................................. 79 5.4.4. Devolver fechas y horas ............................................................................... 82 5.4.5. Cronometrar procesos ................................................................................. 82 5.5. Funciones de Objetos ............................................................................. 82 5.5.1. Cuadro de dilogo de entrada InputBox ........................................................ 82 5.5.2. Cuadro de dilogo de mensajes MsgBox ....................................................... 83

Unidad 6 ............................................................................................................ 87 Archivos............................................................................................................. 87


6.1. Nociones bsicas .................................................................................... 87 6.1.1. Unidades .................................................................................................... 87 6.1.2. Archivos ...................................................................................................... 88 6.1.3. Directorios .................................................................................................. 88 6.2. Instrucciones de archivos ...................................................................... 89 6.2.1. Instrucciones para manipular directorios ....................................................... 89 6.2.2. Instrucciones para manipular archivos .......................................................... 89 6.3. Funciones de archivos ............................................................................ 91 6.3.1. Funciones para manipular directorios ............................................................ 91 6.3.2. Funciones de archivos cerrados .................................................................... 92 6.3.3. Funciones de archivos abiertos ..................................................................... 92 6.4. Objetos de archivos................................................................................ 93 6.4.1. Caja de lista de archivos (Clase: FileListBox) ................................................. 93 6.4.2. Caja de lista de directorio (Clase: DirListBox) ................................................ 93 6.4.3. Caja de lista de unidades (Clase: DriveListBox) ............................................. 93 6.4.4. Cuadro de dilogo comn (Clase: CommonDialog) ........................................ 94

6.5. Archivos secuenciales............................................................................. 97 6.5.1. Abrir archivos secuenciales .......................................................................... 97 6.5.2. Leer archivos secuenciales ........................................................................... 97 6.5.3. Escribir en archivos secuenciales .................................................................. 97 6.6. Archivos aleatorios ................................................................................. 98 6.6.1. Abrir archivos aleatorios............................................................................... 98 6.6.2. Leer registros de archivos aleatorios ............................................................. 99 6.6.3. Escribir registros en archivos directos ..........................................................100 6.6.4. Localizar una posicin de registro ................................................................100 6.6.5. Tareas comunes de archivos aleatorios ........................................................100

Unidad 7 .......................................................................................................... 103 Bases de Datos ................................................................................................ 103


7.1. Introduccin a Bases de Datos ............................................................. 103 7.1.1. Nociones bsicas ........................................................................................103 7.1.2. Arquitectura de bases de datos ...................................................................104 7.1.3. Tecnologas de bases de datos ....................................................................104 7.1.4. Proveedores OLE DB...................................................................................105 7.1.5. Lenguajes de bases de datos ......................................................................106 7.1.6. Modos de manipulacin de registros ............................................................107 7.2. Objetos de acceso a datos ADO ............................................................ 107 7.2.1. Modelo de objetos de ADO..........................................................................107 7.2.2. El objeto Connection...................................................................................108 7.2.3. El objeto Recordset ....................................................................................110 7.2.4. Procedimiento para utilizar el modelo ADO ...................................................112 7.3. Acceso a datos mediante Visual Basic y ADO ....................................... 113 7.3.1. Mtodos para utilizar ADO...........................................................................113 7.3.2. Controles enlazados a datos ........................................................................114 7.3.3. El control de datos ADO ..............................................................................114 7.3.4. Creacin de objetos ADO en cdigo .............................................................118 7.3.5. El diseador de entorno de datos ................................................................120 7.4. Lenguaje de consulta estructurado SQL ............................................... 122 7.4.1. Introduccin a SQL .....................................................................................122 7.4.2. Elementos del lenguaje SQL ........................................................................123 7.4.3. Consultas de seleccin (SELECT) .................................................................124 7.4.4. Consultas de accin (DELETE, INSERT, UPDATE) .........................................125 7.5. Reportes de bases de datos.................................................................. 126 7.5.1. Introduccin a reportes ..............................................................................126 7.5.2. Pasos para crear un reporte ........................................................................127 7.5.3. Partes del generador de reportes ................................................................131 7.5.4. Campos de un reporte ................................................................................132

Unidad 8 .......................................................................................................... 134 Tecnologa OLE ................................................................................................ 134


8.1. Teora de OLE ....................................................................................... 134 8.1.1. Estndar COM ............................................................................................134 8.1.2. Automatizacin ..........................................................................................134 8.1.3. Tecnologa OLE y ActiveX ............................................................................135 8.1.4. Componentes ActiveX .................................................................................135 8.1.5. Componentes en proceso y fuera de proceso ...............................................136

8.2. Aplicaciones habilitadas para ActiveX .................................................. 137 8.2.1. Objetos insertables .....................................................................................137 8.2.2. Control contenedor OLE ..............................................................................137 8.2.3. Control de aplicacin ActiveX.......................................................................140 8.3. Componentes de cdigo ....................................................................... 141 8.3.1. Referencias a un objeto ..............................................................................141 8.3.2. Crear referencias a objetos .........................................................................142 8.3.3. Utilizar las propiedades y mtodos de un objeto ...........................................142 8.3.4. Responder a los eventos de un objeto .........................................................143 8.3.5. Ejemplo completo usando componente de cdigo .........................................144 8.4. Controles ActiveX ................................................................................. 145 8.4.1. Cargar controles ActiveX .............................................................................145 8.4.2. Archivos de controles ActiveX ......................................................................145 8.4.3. Control ActiveX Animation ...........................................................................146 8.4.4. Control ActiveX CoolBar ..............................................................................147 8.4.5. Control ActiveX DTPicker .............................................................................148 8.4.6. Control ActiveX ImageList ...........................................................................148 8.4.7. Control ActiveX TreeView ............................................................................149 8.4.8. Control ActiveX ListView..............................................................................151 8.4.9. Control ActiveX ToolBar ..............................................................................154 8.4.10. Control ActiveX TabStrip .............................................................................155 8.4.11. Conclusiones sobre ActiveX .........................................................................156

Unidad 9 .......................................................................................................... 157 Funciones API.................................................................................................. 157


9.1. Teora de funciones API ....................................................................... 157 9.1.1. Funciones API ............................................................................................157 9.1.2. Las API de Windows ...................................................................................157 9.1.3. Declarar funciones API ................................................................................157 9.1.4. Utilizar funciones API ..................................................................................158 9.1.5. Visor de texto API ......................................................................................159 9.2. Tcnicas para usar funciones API ........................................................ 160 9.2.1. Resolver conflictos de nombre de API ..........................................................160 9.2.2. Enviar cadenas a funciones API ...................................................................160 9.2.3. Recibir cadenas de funciones API ................................................................160 9.2.4. Utilizar procedimientos generales auxiliares ..................................................161 9.2.5. Utilizar funciones API sin parmetros ...........................................................162

Consideracin final .......................................................................................... 163

ndice de figuras
Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura 1.1.2.1.2.2.2.3.2.4.2.5.2.6.2.7.2.8.2.9.2.10.2.11.2.12.2.13.2.14.2.15.2.16.2.17.2.18.3.1.3.2.3.3.3.4.4.1.4.2.4.3.4.4.4.5.4.6.5.1.5.2.5.3.5.4.5.5.5.6.5.7.5.8.5.9.5.10.5.11.5.12.5.13.6.1.6.2.6.3.6.4.6.5.7.1.7.2.7.3.7.4.Evolucin del Basic. ............................................................................... 13 Estructura de un proyecto ...................................................................... 24 Ventana Proyecto .................................................................................. 25 Ventana Diseador de formulario ........................................................... 26 Ventana de cdigo ................................................................................. 26 Cuadro de herramientas ......................................................................... 27 Ventana de propiedades. ....................................................................... 27 Dilogo Nuevo proyecto al iniciar Visual Basic ......................................... 28 Dilogo Nuevo proyecto estndar ........................................................... 28 Dilogo Agregar formulario .................................................................... 29 Men emergente del explorador de proyecto ........................................... 29 Dilogo Agregar mdulo ........................................................................ 30 Dilogo Propiedades del proyecto ........................................................... 31 Dilogo Opciones de editor .................................................................... 31 Agregar objetos a un formulario ............................................................. 33 Modificar las propiedades de objetos ...................................................... 33 Seleccionar objeto para procedimiento de evento .................................... 34 Seleccionar evento para procedimiento de evento ................................... 35 Escribir cdigo en un procedimiento de evento ........................................ 35 Despliegue del operador punto. .............................................................. 37 Elementos bsicos de una ventana. ........................................................ 38 Caja de herramientas (Clases). ............................................................... 47 Ejemplo de los controles bsicos. ........................................................... 48 Dilogo Examinador de objetos. ............................................................. 55 Estructura If-Then-Else simple................................................................ 61 Estructura If-Then-Else completa............................................................ 61 Estructura Select Case ........................................................................... 62 Estructura For-Next. .............................................................................. 63 Estructuras Do-Loop. ............................................................................. 64 Funcin supuesta Licuar......................................................................... 71 Funcin en general ................................................................................ 72 Funcin Seno. ....................................................................................... 72 Posiciones de una cadena de caracteres ................................................. 73 Cuadro de dilogo InputBox ................................................................... 83 Cuadro de dilogo MsgBox ..................................................................... 83 Cuadro de mensaje de Informacin ........................................................ 84 Cuadro de mensaje de Crtico ................................................................. 84 Cuadro de mensaje de Exclamacin ........................................................ 84 Cuadro de mensaje de Pregunta ............................................................. 85 Cuadro de mensaje Si y No .................................................................... 85 Cuadro de mensaje Aceptar y Cancelar ................................................... 85 Cuadro de mensaje Crtico Aceptar y Cancelar ......................................... 85 Memorias de un sistema de cmputo ...................................................... 88 Archivo de documento de Word .............................................................. 88 Estructura de directorios y archivos ........................................................ 89 Objetos de archivos. .............................................................................. 94 Dilogo Componentes (Control Dilogo Comn) ...................................... 95 Tabla Productos de una base de datos. ...............................................104 Arquitectura de Bases de Datos .............................................................104 Acceso de Visual Basic a Bases de Datos ................................................105 Modelo de objetos ADO. .......................................................................107

Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura Figura

7.5.7.6.7.7.7.8.7.9.7.10.7.11.7.12.7.13.7.14.7.15.7.16.7.17.7.18.7.19.7.20.7.21.7.22.7.23.8.1.8.2.8.3.8.4.8.5.8.6.8.7.8.8.8.9.8.10.8.11.8.12.8.13.8.14.8.15.8.16.9.1.-

Dilogo de componentes (Control de datos ADO) ...................................115 Ventana de la propiedad ConnectionString .............................................115 Asistente para crear una conexin a un origen de datos ADO ..................116 Dilogo de propiedades para establecer el origen de registros .................116 Ventana de referencias a libreras de objetos .........................................118 Dilogo Componentes (Diseadores) .....................................................120 Diseador del objeto Entorno de datos ..................................................121 Dilogo Crystal Report Gallery ...............................................................127 Dilogo de seleccin de Tablas para reportes .........................................128 Dilogo de seleccin de Campos para reportes .......................................128 Dilogo para agrupar los registros de un reporte ....................................129 Dilogo para filtrar los registros de un reporte........................................129 Dilogo para seleccionar la plantilla de diseo de un reporte ...................130 Dilogo de confirmacin para crear un reporte .......................................130 Vista de diseo de un reporte de Crystal Report .....................................131 Vista preliminar de un reporte de Crystal Report ....................................131 Tipos de campos de Crystal Report ........................................................132 Editor de ecuaciones de Crystal Report ..................................................133 Campos especiales de Crystal Report .....................................................133 Dilogo Insertar objeto .........................................................................138 Dilogo Pegado especial .......................................................................138 Dilogo Componentes (Objetos insertables) ...........................................141 Cuadro de herramientas (Objetos insertables) ........................................141 Ventana de cdigo con eventos de un objeto componente ......................143 Ejemplo del control ActiveX Animation ...................................................146 Ejemplo de control ActiveX CoolBar .......................................................147 Ejemplo del control ActiveX DTPicker .....................................................148 Propiedades del control ActiveX ImageList .............................................149 Ejemplo del control ActiveX TreeView ....................................................150 Ejemplo del control ActiveX ListView Vista Iconos grandes ......................152 Ejemplo del control ActiveX ListView Vista Iconos pequeos....................152 Ejemplo del control ActiveX ListView Vista Lista ......................................152 Ejemplo del control ActiveX ListView Vista Reporte .................................153 Ejemplo del control ActiveX ToolBar.......................................................154 Ejemplo del control ActiveX TabStrip .....................................................155 Visor de texto API ................................................................................159

ndice de tablas
Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla Tabla 1.1.3.1.3.2.3.3.3.4.3.5.3.6.3.7.3.8.3.9.4.1.4.2.4.3.4.4.4.5.5.1.5.2.5.3.5.4.5.5.5.6.5.7.5.8.5.9.5.10.5.11.6.1.6.2.6.3.6.4.7.1.7.2.7.3.7.4.7.5.7.6.7.7.7.8.7.9.7.10.7.11.7.12.7.13.8.1.8.2.8.3.8.4.8.5.9.1.Lista de prefijos de objetos de Visual Basic. ............................................ 17 Propiedades ms importantes del formulario. .......................................... 38 Mtodos ms importantes del formulario ................................................. 38 Eventos ms importantes del formulario. ................................................ 39 Algunas propiedades de la etiqueta. ....................................................... 39 Algunas propiedades del botn de comando............................................ 40 Algunas propiedades de la caja de texto. ................................................ 41 Propiedades ms importantes de listas. .................................................. 45 Mtodos ms importantes de las cajas de lista ........................................ 45 Propiedades ms importantes de la barra de desplazamiento. .................. 46 Tipos de datos provistos por Visual Basic. ............................................... 51 Operadores aritmticos de Visual Basic ................................................... 57 Resultados de operaciones lgicas. ......................................................... 58 Operadores relacionales de Visual Basic. ................................................. 58 Precedencia de operadores .................................................................... 59 Constantes de formato para nmeros ..................................................... 76 Smbolos especiales de formato para nmeros ........................................ 76 Constantes de formato para fechas y horas ............................................. 76 Smbolos para crear formatos de fecha y hora ......................................... 77 Juego de caracteres ASCII de 0 a 127 .................................................... 78 Funciones matemticas .......................................................................... 78 Funciones de ajuste numrico ................................................................ 78 Valores del parmetro Intervalo de funciones de fecha y hora .................. 80 Funciones que devuelven parte de una fecha .......................................... 81 Estilos de cajas de mensajes MsgBox ...................................................... 84 Valores devueltos por MsgBox ................................................................ 86 Especificaciones del parmetro Tipo de la instruccin Open ................... 90 Propiedades del objeto Dilogo Comn ................................................... 95 Valores de la propiedad Flags. ................................................................ 96 Mtodos del objeto Dilogo Comn......................................................... 96 Propiedades del objeto Connection de ADO ............................................109 Opciones de la propiedad CursorLocation. ..............................................109 Mtodos del objeto Connection de ADO .................................................109 Propiedades del objeto Recordset de ADO..............................................110 Opciones de la propiedad CursorType ....................................................110 Opciones de la propiedad LockType .......................................................111 Valores que devuelve la propiedad EditMode ..........................................111 Mtodos del objeto Recordset de ADO ...................................................112 Eventos del objeto Recordset de ADO ....................................................112 Algunos comandos de SQL ....................................................................123 Algunas clusulas de SQL......................................................................124 Operadores de comparacin SQL ...........................................................124 Funciones de agregado SQL ..................................................................124 Propiedades del control contenedor OLE ................................................139 Mtodos del control contenedor OLE ......................................................139 Archivos de controles ActiveX ................................................................146 Constantes del argumento relationship ..................................................151 Estilos del objeto Button de ToolBar ......................................................155 Archivos contenedores de funciones API ................................................157

Visual Basic 6.0

Unidad 1.- Introduccin a Visual Basic

Unidad 1
Introduccin a Visual Basic
La manera de lograr las cosas es empezndolas . Horace Greeley

1.1. Nociones bsicas 1.1.1. Historia Los lenguajes de programacin han surgido como consecuencia de la necesidad de hacer que los sistemas de clculo y almacenamiento electrnicos sean tiles al hombre. De esta manera han marchado Hardware y Software, hardware requiriendo software y software requiriendo hardware. El primer sistema electrnico de clculo data de 1946 y se llamaba ENIAC, un sistema que efectuaba ciertas operaciones, ocupaba el tamao de una habitacin y utilizaba 18.000 vlvulas de vaco. Al ao siguiente, 1947, Laboratorios Bell crea el transistor, tres capas de silicio polarizadas; y luego Texas Instrument en 1959 logra aumentar el nivel de densidad de capas para obtener el primer circuito integrado de seis transistores. El circuito integrado es el corazn de los sistemas de clculo moderno y los ms recientes albergan a casi 1,5 millones de transistores. Los primeros lenguajes de programacin, como el lenguaje mquina y ensamblador, requeran que el programador fuera experto y conociera fielmente el hardware. Es as como comienzan a aparecer los lenguajes de programacin de alto nivel, tales como COBOL, ADA, FORTRAN y BASIC. La versin original del lenguaje Basic fue creada en 1964 por John G. Kemeny (Budapest, 1926 USA 1992) y Thomas E. Kurtz (Illinois 1928), y estaba dirigido fundamentalmente a principiantes, es decir, para todo aquel que se iniciara como programador; de ah su nombre BASIC o Cdigo de Instruccin Simblico para todo Propsito de principiantes (Beginners All purpose Symbolic Instruction Code), aunque su nombre original fue True BASIC. Para 1978, cuando los microprocesadores comienzan a hacerse populares y surgen los primeros PC (computadores personales), el lenguaje Basic se establece como un estndar y se crea la normativa BASIC STANDAR. La tecnologa continu su avance, y con ella los requerimientos de software ms veloces y eficientes. En el ao de 1983 aparece el procesador 80286 y los conceptos de programacin estructurada y compilacin del cdigo fuente; y Basic comienza a ser despreciado, pues era visto para novatos, su caracterstica de lenguaje secuencial era ineficiente, careca de herramientas de compilacin confiables, no dispona de libreras y era imposible intercambiar informacin y acceder al interior de las mquinas con l; mientras tanto se hacan muy populares los lenguajes C y
12

Visual Basic 6.0

Unidad 1.- Introduccin a Visual Basic

PASCAL. Basic deba evolucionar y la IBM crea una versin modificada de Basic llamaba BASICA, la cual fracas. Paralelamente, la empresa Microsoft saca al mercado la versin estructurada de Basic denominada GWBASIC para DOS. Posteriormente otra empresa, Borland, crea su propia versin de Basic estructurado, pero agrega mejoras de velocidad optimizando la compilacin en su producto TURBO BASIC. Microsoft compite con Borland optimizando tambin la compilacin y corrigiendo casi todos los defectos de las versiones anteriores, para finalmente obtener Quick-BASIC. Las ltimas versiones del sistema operativo MSDOS incluan una versin algo recortada de Quick-BASIC llamada QBASIC. En 1985 aparece Windows, la Interfaz de Usuario Grfica (GUI) de Microsoft para su sistema operativo MS-DOS; y comienzan a aparecer conceptos tales como multitarea, multiprocesamiento y objetos de programacin. El programa Windows permita administrar casi la totalidad de servicios de usuario del sistema con procesadores de texto, hojas de clculo, programas de dibujo y diseo, antivirus y hasta una calculadora. Era necesario crear aplicaciones que se ejecutaran utilizando esta GUI. Es as como los diseadores de Microsoft combinan, convenientemente, la interfaz grfica con su lenguaje de programacin por excelencia, QBASIC; obtenindose una de las primeras versiones visuales de lenguajes de programacin, la cual recibi el nombre Visual Basic. Desde que apareci Visual Basic, ya Basic no es slo para novatos, sino que representa una alternativa para programadores de todos los niveles, quienes estimulados por su gran versatilidad y potencia, comienzan a utilizarlo. Para los aos de 1993 y 1994, Visual Basic comienza a hacerse muy popular con su versin 3.0 de 16 bits. La versin 4.0 estuvo lista para 1995, casi paralelo con la aparicin del primer sistema operativo de Microsoft con ambiente grfico: Windows 95. Este era el momento de transicin de los buses de datos de los microprocesadores de 16 a 32 bits; hecho determinante para que Visual Basic 4.0 estuviera disponible para ambos buses de datos, por lo que la instalacin era opcional para 16 32 bits. No tard mucho en evolucionar un poco ms con su versin 5.0 exclusivamente para 32 bits. A mediados de 1998, Visual Basic adopta su versin 6.0, la cual viene como parte de un paquete de lenguajes de programacin visual para desarrollar aplicaciones Windows llamado Visual Studio 6.0, el cual incluye: Visual C++ 6.0, Visual FoxPro 6.0, Visual J++ 6.0, Visual InterDev 6.0 y Visual Basic 6.0. A partir del ao 2000 surge la plataforma de Microsoft para servicios Web (o cualquier servicio basado en red) conocida como framework.NET, la cual incluye las herramientas para el desarrollo de aplicaciones Visual Studio .NET, entre ellas se encuentra Visual Basic .NET.
True BASIC Visual Basic .NET

BASIC STANDAR

Visual Basic 6.0

GWBASIC

Visual Basic 5.0

Quick BASIC

Visual Basic 4.0

QBasic

Visual Basic 3.0


Figura 1.1.- Evolucin del Basic.

13

Visual Basic 6.0

Unidad 1.- Introduccin a Visual Basic

1.1.2. Concepto de Visual Basic Visual Basic es un sistema de desarrollo o lenguaje de programacin visual destinado a crear aplicaciones para el entorno Windows de una manera rpida y sencilla combinando herramientas de diseo grfico y un lenguaje de programacin de alto nivel. El trmino Visual involucra las herramientas grficas (GUI) y Basic es el lenguaje de programacin, lo que le confiere a Visual Basic la caracterstica de potencia grfica y sencillez. El cdigo intrnseco de los objetos bsicos (ventanas y controles) est prediseado, por lo que no se considera a Visual Basic como un lenguaje de Programacin Orientado a Objeto (OOP), ya que carece de los mecanismos de herencia y polimorfismo; ms bien se considera basado en objetos, aunque en cierta forma, de las caractersticas de la OOP, Visual Basic conserva algo de Polimorfismo y Encapsulacin que veremos mas adelante en el captulo Teora de Objetos. 1.1.3. Ventajas a) Objetos prediseados Visual Basic permite utilizar objetos planos y 3D (ventanas, botones, cajas de texto, etc.) sin necesidad de crearlos, ya que provee una interfaz grfica muy completa y amigable. b) MDI (Multiple Document Interface) Esta opcin, en contraste con SDI (Single Document Interface), permite crear una ventana con mltiples ventanas hijas o documentos dependientes. Aplica tanto para el entorno de desarrollo como para las aplicaciones. Para el entorno de desarrollo se habilita o deshabilita en el men Herramientas | Opciones, pestaa Avanzado. c) DDE (Dynamic Data Exchange) Es un protocolo establecido para intercambiar datos a travs de vnculos activos entre aplicaciones que se ejecutan bajo Microsoft Windows. Por ejemplo, es posible, desde Visual Basic, leer las celdas de una hoja de calculo de Excel. d) DLL (Dynamic Link Libraries) Las bibliotecas de vnculos dinmicos son archivos con extensin DLL que contienen rutinas desarrolladas en otros lenguajes como C y FORTRAN, y que pueden ser accedidas o llamadas desde Visual Basic. El entorno Windows utiliza estas rutinas para mostrar ventanas y grficos, administrar la memoria, controlar puertos, etc. Mltiples aplicaciones pueden acceder a una misma DLL simultneamente. La ventaja radica en que se pueden usar las funciones predefinidas de Windows en tiempo de ejecucin de la aplicacin, en lugar de vincular estticamente en tiempo de diseo o de compilacin. e) OLE (Object Linking Embedding) Se define como una tecnologa que permite a las aplicaciones compartir objetos de una forma coherente con otras aplicaciones, herramientas de programacin y lenguajes de macros. OLE forma parte de toda una filosofa de interoperabilidad entre objetos conocida como ActiveX. Resulta ventajoso usar una aplicacin tratada como objeto de la aplicacin desarrollada en Visual Basic, ya que la aplicacin objeto conserva sus propiedades y mtodos, y no es necesario escribir cdigo adicional. Por ejemplo, se puede agregar un
14

Visual Basic 6.0

Unidad 1.- Introduccin a Visual Basic

documento de Excel, como objeto, a una aplicacin Visual Basic, para efectuar las operaciones normales de una hoja de clculo, pudiendo modificar datos de las celdas del documento original si est vinculado, o slo visualizar y manipular celdas si est incrustado. f) ADO (ActiveX Data Object) Visual Basic provee tres modelos de objetos para acceso a datos: Objetos de Datos ActiveX (ADO), Objetos de Datos Remotos (RDO) y Objetos de Acceso a Datos (DAO). La tecnologa ms reciente es ADO, con un modelo de objetos ms sencillo (y an ms flexible) que RDO o DAO. Un modelo de objetos de acceso a datos es una coleccin de objetos que permite la manipulacin y definicin de bases de datos diversas sin tener que conocer las directivas intrnsecas de cada base de datos. Con esta ventaja se puede controlar en forma grfica o codificada la conexin, los generadores de instrucciones y los datos devueltos de bases de datos, que se usarn en cualquier aplicacin de Visual Basic. g) Otras ventajas Compilador de archivos de ayuda para aadir ayuda personalizada a las aplicaciones, biblioteca de iconos e imgenes, asistente de empaquetado y distribucin para crear los discos de la aplicacin terminada, ayuda completa en lnea, y un editor de cdigo con mens emergentes e interpretador del cdigo. 1.1.4. Requerimientos Los requerimientos de instalacin que aqu se tratan se refieren a la versin de Visual Basic 6.0. Para versiones anteriores refirase a los manuales correspondientes. a) Requerimientos de software: Sistema operativo de red: Microsoft Windows NT 3.51 o posterior. Sistema operativo cliente: Microsoft Windows 95 o posterior. b) Requerimientos de hardware: Microprocesador: Pentium 90MHz o superior. Vdeo: Pantalla VGA de 640x480 o de resolucin superior. Memoria RAM: 24 MB para Windows 95, 32 MB para Windows NT. Espacio en disco duro Edicin Estndar: de 48MB a 80 MB. Espacio en disco duro Edicin Empresarial: de 128MB a 147 MB. Espacio en disco duro para MSDN (Documentacin multimedia): 67MB. CD-ROM (no se supone soporte para MS-DOS). 1.1.5. Compilacin La compilacin es el proceso mediante el cual cualquier lenguaje de programacin convierte su seudo lenguaje al cdigo mquina o cdigo binario para su procesamiento y ejecucin segn el sistema operativo instalado. Se dice que el cdigo mquina (unos y ceros) es el lenguaje de mas bajo nivel, ya que posee las directivas que interactan directamente e internamente con el microprocesador.

15

Visual Basic 6.0

Unidad 1.- Introduccin a Visual Basic

1.1.6. Modos de operacin La aplicacin Visual Basic puede trabajar en dos modos distintos: Modo de Diseo y Modo de Ejecucin. A menudo se dice que cuando se trabaja en modo de diseo o ejecucin se esta en Tiempo de Diseo o en Tiempo de Ejecucin. En modo de diseo el usuario construye interactivamente la aplicacin colocando controles en el formulario, definiendo sus propiedades, y desarrollando funciones para gestionar los eventos. En modo de ejecucin el programador prueba la aplicacin. En este caso la aplicacin se compila, se carga en memoria RAM para producir las directivas necesarias al microprocesador, as el usuario acta sobre el programa y prueba como responde este. 1.1.7. Reglas de Visual Basic Las reglas o convenciones de Visual Basic para codificacin y configuracin son pautas que no estn enfocadas a la lgica del programa, sino a su estructura y apariencia fsica. Por qu existen las convenciones de codificacin? La razn principal de usar un conjunto coherente de convenciones de codificacin es estandarizar la estructura y el estilo de codificacin de una aplicacin de forma que el autor y otras personas puedan leer y entender el cdigo fcilmente. Las convenciones de codificacin correctas dan como resultado un cdigo fuente preciso, legible y sin ambigedad, que es coherente con otras convenciones del lenguaje y lo ms intuitivo posible. Un conjunto de convenciones de codificacin de propsito general debe definir los requisitos mnimos necesarios para conseguir los objetivos explicados anteriormente, dejando libertad al programador para crear la lgica y el flujo funcional del programa. El objetivo es hacer que el programa sea fcil de leer y de entender sin obstruir la creatividad natural del programador con imposiciones excesivas y restricciones arbitrarias. Por tanto, las convenciones sugeridas sern breves y sugerentes; no muestran todos los objetos y controles posibles, ni especifican todos los tipos de comentarios informativos que podran ser tiles. Las convenciones de codificacin pueden incluir los siguientes puntos. a) Convenciones de nombres para objetos, variables y procedimientos El cuerpo de un nombre de variable, constante, procedimiento, funcin u objeto se debe escribir en maysculas y/o minsculas segn el caso, y debe tener la longitud necesaria para describir su funcionalidad. Hay que utilizar nombres mnemnicos; es decir, el nombre debe reflejar correctamente la funcin del elemento que identifica. Adems, los nombres de funciones deben empezar con un verbo, como IniciarNombreMatriz o CerrarDilogo. Para nombres que se usen con frecuencia o para trminos largos, se recomienda usar abreviaturas estndar para que los nombres tengan una longitud razonable. Cuando se usen abreviaturas, hay que asegurarse de que sean coherentes en toda la aplicacin. Por otra parte, debe cuidar que todas las variables sean declaradas explcitamente. Mediante la instruccin Option Explicit detectar las variables no declaradas durante la compilacin. Los archivos generados por Visual Basic se deben guardar con el mismo nombre usado para identificarlo a nivel de objeto. Esta prctica resulta muy til a la hora de transportar el cdigo fuente de una mquina a otra, pues el programador conoce exactamente los archivos a copiar.
16

Visual Basic 6.0

Unidad 1.- Introduccin a Visual Basic

b) Comentarios para documentar el cdigo Todos los procedimientos, funciones y variables deben poseer un comentario breve que describa las caractersticas funcionales de los mismos (qu hace). Esta descripcin no debe describir los detalles de implementacin (cmo lo hace), porque cambian con el tiempo y pueden resultar en comentarios errneos. Los argumentos que se pasan a un procedimiento se deben describir cuando sus funciones no sean obvias o cuando se espera que los argumentos estn en un intervalo especfico. Tambin hay que describir, al principio de cada procedimiento, los valores devueltos de funciones y las variables globales que se modifican en el procedimiento. No debe exagerar en los comentarios. Los comentarios de lneas se inician con el smbolo apstrofe (). El texto que coloque a la derecha de apstrofe no ser considerado por Visual Basic al momento de la compilacin. c) Formatos estandarizados para etiquetar Los nombres de los objetos deben llevar un prefijo de tres letras en minsculas coherente que facilite la identificacin del tipo de objeto rpidamente (ver Tabla 1.1).
Tipo de control Barra de desplazamiento horizontal Barra de desplazamiento vertical Barra de estado Barra de herramientas Barra de progreso Botn animado Botn de opcin Botones de comando Casilla de verificacin Comunicaciones Contenedor OLE Cronmetro o temporizador Cuadrcula o grid Cuadrcula de datos Cuadro combinado de datos Cuadro combinado Cuadro de imagen Cuadro de lista Cuadro de lista de archivos Cuadro de lista de directorios Cuadro de lista de unidades Cuadro de texto Datos Control de Datos ADO Dilogo comn Etiqueta Fichas Forma o figura Formulario Imagen Informacin del sistema Lnea Marco Men
17

Prefijo
hsb vsb sta tlb prg ani opt cmd chk com ole tmr grd dgd dbc cbo pic lst fil dir drv txt dat ado dlg lbl tab shp frm img sys lin fra mnu

Ejemplo
hsbVolumen vsbIndice staFechaHora tlbAcciones prgCargarArchivo aniBuzon optGenero cmdSalir chkSoloLectura comFax oleHojaCalculo tmrAlarma grdPrecios dgdTitulos dbcAutor cboIngles picVGA lstCodigos filOrigen dirSource drvDestino txtApellido datBiblio adoBiblio dlgAbrirArchivo lblMensajeAyuda tabOpciones shpCirculo frmEntrada imgIcono sysMonitor linVertical fraIdioma mnuAbrirArchivo

Tabla 1.1.- Lista de prefijos de objetos de Visual Basic.

Visual Basic 6.0

Unidad 1.- Introduccin a Visual Basic

d) Instrucciones de espaciado, formato y sangra. Normalmente hay una instruccin por lnea; sin embargo, se pueden colocar dos o ms instrucciones en una misma lnea utilizando dos puntos (:) para separarlas. Para hacer el cdigo ms legible, es mejor colocar cada instruccin en una lnea. Por otra parte se puede dividir una instruccin larga en varias lneas de cdigo utilizando un espacio en blanco seguido de un guin bajo _. Esta tcnica puede hacer que sea ms fcil leer el cdigo, tanto en la pantalla como impreso en papel. No se puede poner un comentario despus de partir una instruccin. La mayora de los nmeros utilizados son decimales (base 10). En ocasiones es conveniente o necesario usar nmeros hexadecimales (base 16) u octales (base 8). Con el prefijo &H delante de un nmero se especifica que el nmero es hexadecimal. Para especificar que un nmero es octal, este se debe preceder con &O. Por ejemplo: &H10 y &O20 equivalen a 16 en decimal. Los bloques anidados, deben llevar una sangra de cuatro espacios o un espacio de tabulador cada vez que se efecte anidamiento. El comentario del esquema funcional de un procedimiento debe llevar una sangra de un espacio. 1.2. Teora de Objetos 1.2.1. Clase La Clase es un patrn (horma, molde, plantilla) que define las caractersticas de un objeto y describe qu apariencia y comportamiento debe tener el objeto. La clase define las propiedades del objeto y los mtodos utilizados para controlar el comportamiento del objeto. Podramos decir que existe la clase mamferos, la clase estudiantes o la clase profesor. Como ejemplos de Visual Basic se tiene la clase Form, la clase CommandButton, la clase PictureBox o la clase TextBox. 1.2.2. Objeto Cuando crea una aplicacin en Visual Basic trabaja con objetos. Puede usar los objetos que proporciona Visual Basic como controles, formularios y objetos de acceso a datos. Tambin puede controlar objetos de otras aplicaciones desde su aplicacin de Visual Basic. Puede incluso crear sus propios objetos y definir propiedades y mtodos adicionales para ellos. El objeto se define como la instancia de una clase que combina datos (propiedades) y procedimientos (mtodos) que pueden ser tratados como una unidad, por ejemplo un control, formulario, o aplicacin. Cada objeto est definido por una clase. Para comprender la relacin entre un objeto y su clase, piense en el molde de las galletas y las galletas. El molde es la clase que define las caractersticas de cada galleta, como por ejemplo el tamao y la forma. Se utiliza la clase para crear objetos. Los objetos son las galletas. En el caso de Visual Basic los controles del cuadro de herramientas representan clases. El objeto conocido como control no existe hasta que se coloca en un formulario. Cuando crea un control, est creando una copia o instancia de la clase del control. Se crean todos los objetos como copias idnticas de sus clases. Una vez que existen como objetos individuales, es posible modificar sus propiedades. Por ejemplo, si coloca dos botones de comando en un formulario, cada objeto botn de comando es una instancia de la clase CommandButton. Cada objeto comparte un conjunto de
18

Visual Basic 6.0

Unidad 1.- Introduccin a Visual Basic

caractersticas y capacidades comunes (propiedades, mtodos y eventos), definidos por su clase. Sin embargo, cada uno tiene su propio nombre, se puede activar y desactivar por separado, se puede colocar en una ubicacin distinta del formulario, etc. Son objetos distintos con distinto valor para la propiedad Name. Por ejemplo los botones de comando Command1, Command2, Command3 y Command4 comparten (provienen de) la misma clase, CommandButton. 1.2.3. Propiedades En Visual Basic, los datos de un objeto (caractersticas, datos o atributos) se llaman propiedades. Puede cambiar las caractersticas de un objeto si modifica sus propiedades. Piense en la clase Automvil, y en el objeto MiCarro como instancia de la clase Automvil. Una propiedad de MiCarro es su Velocidad. En Visual Basic, se dira que MiCarro tiene la propiedad Velocidad, la cual se puede graduar modificando su valor. Suponga que el rango de velocidad de MiCarro es de 0 a 140 Km/h, y desea establecerlo a 20. En Visual Basic se escribira mediante la siguiente sintaxis: MiCarro.Velocidad = 20 En el ejemplo anterior se estableci el valor de una propiedad. Las propiedades tambin pueden devolver sus valores de la siguiente manera: Tacmetro = MiCarro.Velocidad En los ejemplos anteriores y en adelante el signo igual = se lee como se le asigna. Este signo se usa en BASIC para asignar el valor de la parte izquierda a la parte derecha del signo. De esta manera, el primer ejemplo se lee Propiedad Velocidad de MiCarro se le asigna 20. Se pueden establecer casi todas las propiedades en tiempo de diseo usando una ventana del IDE de Visual Basic conocida como Propiedades sin tener que escribir cdigo alguno. Otras propiedades no estn disponibles en tiempo de diseo, ya que no aparecen en la ventana de propiedades, por lo que se necesitar escribir cdigo para establecer u obtener esas propiedades en tiempo de ejecucin. Por otra parte, es posible que durante la ejecucin del programa ciertas propiedades no puedan ser modificadas, mientras que otras s. En este sentido se tienen los siguientes tipos de propiedades: a) Propiedades de lectura y escritura Las propiedades cuyo valor se puede establecer y obtener en tiempo de ejecucin se llaman propiedades de lectura y escritura. b) Propiedades de slo lectura Las propiedades que slo se pueden leer (obtener su valor), pero que no se pueden cambiar (establecer) en tiempo de ejecucin se conocen como propiedades de slo lectura. Estas propiedades slo se pueden cambiar en tiempo de diseo. Por ejemplo, la propiedad Velocidad de MiCarro es de lectura y escritura, ya que puede ser leda y establecida en tiempo de ejecucin (auto andando); pero la propiedad NivelDeGasolina de MiCarro es de slo lectura, ya que no se puede cambiar en tiempo de ejecucin (auto andando), y se debe detener la aplicacin
19

Visual Basic 6.0

Unidad 1.- Introduccin a Visual Basic

para que en tiempo de diseo (auto detenido) se reabastezca el nivel de combustible. En general, para cambiar (establecer) el valor de la propiedad de un objeto en tiempo de ejecucin, se utiliza la sintaxis siguiente: NombreDeObjeto.Propiedad = Valor Tambin para leer (obtener) el valor de la propiedad de un objeto en tiempo de ejecucin se utiliza la sintaxis siguiente: Variable = NombreDeObjeto.Propiedad
Sugerencia: Si va a usar el valor de una propiedad ms de una vez, el cdigo se ejecutar ms rpidamente si almacena el valor en una variable.

1.2.4.

Mtodos

Corresponden a los diversos procedimientos que pueden operar sobre el objeto. Los mtodos son parte de los objetos del mismo modo que las propiedades. Generalmente, los mtodos son acciones que desea o est posibilitado a realizar el objeto, mientras que las propiedades son los atributos que puede establecer o recuperar. Se podra decir que MiCarro tiene un mtodo "Acelerar" y podra usar la siguiente sintaxis para cambiar la velocidad: MiCarro.Acelerar 20 Los mtodos pueden afectar a los valores de las propiedades e inclusive activar procedimientos de evento que veremos mas adelante. En el ejemplo de MiCarro, el mtodo Acelerar cambia la propiedad Velocidad. Cuando utiliza un mtodo en el cdigo, la sintaxis depende de los argumentos que necesite el mtodo y de si el mtodo devuelve o no un valor. En general se utiliza la sintaxis siguiente: NombreDeObjeto.Mtodo [Arg1, Arg2,...] De ahora en adelante, en las sintaxis generales, los elementos que aparezcan entre corchetes [ ] son opcionales de la sintaxis. En este caso Arg1, Arg2 , son opcionales, de tal manera que si el mtodo no requiere argumentos, la sintaxis sera: NombreDeObjeto.Mtodo Si el mtodo devuelve un valor til, debe asignar el valor a una variable y utilizar parntesis con o sin argumentos como se muestra a continuacin: Variable = NombreDeObjeto.Mtodo([Arg1, Arg2,...]) 1.2.5. Evento

Un evento es una accin reconocida por un objeto, como cuando el usuario hace clic con el Mouse o presiona una tecla. Los eventos no slo son producidos por el usuario, tambin pueden ser ocasionados por el sistema, por aplicaciones externas, e inclusive por la misma aplicacin. Por ejemplo, MiCarro podra tener los eventos "CambioDeVelocidad, Estacionarse, Encendido, GiroIzquierdo, etc. La sintaxis para alguno de estos eventos de MiCarro sera: MiCarro_CambioDeVelocidad
20

Visual Basic 6.0

Unidad 1.- Introduccin a Visual Basic

MiCarro_Encendido MiCarro_Estacionarse En Visual Basic la sintaxis general para el evento de un objeto es: NombreDeObjeto_NombreDeEvento 1.2.6. Procedimientos de evento

Un procedimiento de evento es una seccin de cdigo que se ejecuta cuando se produce el evento sobre un objeto determinado. Las aplicaciones controladas por eventos ejecutan cdigo Basic como respuesta a un evento. Cada objeto de Visual Basic tiene un conjunto de eventos predefinidos. Si se produce uno de esos eventos, y su procedimiento de evento tiene cdigo asociado, Visual Basic ejecuta ese cdigo. A cada evento le corresponde una seccin de cdigo que es lo que se conoce como un procedimiento de evento. Cuando se desea que un control responda a un evento, se escribe cdigo en el procedimiento de ese evento. El objeto MiCarro tiene un cdigo en el procedimiento de evento CambioDeVelocidad, el cual define los pasos para mostrar la velocidad actual en el tacmetro, por ejemplo; y su estructura sera: Private Sub MiCarro_CambioDeVelocidad() {rea de cdigo para mostrar velocidad} End Sub De modo que un procedimiento de evento en Visual Basic, es de la forma: Private Sub NombreDeObjeto_NombreDeEvento() {rea de cdigo} End Sub Distintos tipos de eventos pueden ser reconocidos por un mismo objeto; por ejemplo, el objeto Form es susceptible al evento Click, y tambin al evento DblClick. El cdigo de respuesta a los eventos, en cada caso, ser como sigue: Private Sub Form_Click() {rea de cdigo para un clic sobre el Form} End Sub Private Sub Form_DblClick() {rea de cdigo para un doble clic sobre el Form} End Sub Por otra parte, distintos tipos de objetos pueden ser susceptibles a un mismo evento. Por ejemplo, la mayora de los objetos reconocen el evento Click. Si el usuario hace clic sobre el cuerpo del formulario, o sobre el rea de un botn de comando, se ejecutan cdigos diferentes: Private Sub Form_Click() {rea de cdigo para un clic sobre el formulario} End Sub Private Sub cmdBotn_Click() {rea de cdigo para un clic sobre el botn} End Sub
21

Visual Basic 6.0

Unidad 1.- Introduccin a Visual Basic

1.2.7. Encapsulacin Esta caracterstica de la OOP es la facultad de unificar el cdigo y los datos que la clase u objeto contiene, as como ocultar el cdigo que maneja dicha informacin. La encapsulacin nos ayuda a olvidarnos de cual es la implementacin realizada en los procedimientos y datos (mtodos y propiedades) de una clase, para que slo nos preocupemos de cmo usarlos. La encapsulacin es la caracterstica que permite ocultar cmo estn codificados los mtodos y propiedades de las clases. El mero hecho de crear un mtodo o una propiedad en una clase ya implica que estamos usando la caracterstica de la encapsulacin en Visual Basic. 1.2.8. Polimorfismo Muchas clases pueden proporcionar la misma propiedad o el mismo mtodo y el que llama no tiene por qu saber la clase a la que pertenece el objeto antes de llamar a la propiedad o al mtodo. Por ejemplo, una clase Automvil y una clase Avin podran tener la misma propiedad Velocidad o el mismo mtodo Acelerar. El polimorfismo significa que puede establecer la Velocidad o invocar Acelerar sin saber si el objeto es MiCarro o MiAvin. Todos los mtodos implementados en las clases deben tener una forma nica de comportarse, y las propiedades de las clases deben ser consistentes con la informacin que corresponde tratar. El polimorfismo sera el contrato firmado para que esos procedimientos y datos se utilicen de forma adecuada. Se dice que una clase es polimrfica cuando podemos usar sus mtodos y propiedades sin importarnos qu objeto los implementa. El Polimorfismo en Visual Basic se puede usar de dos formas diferentes, segn se compruebe si el miembro de una clase (propiedad o mtodo) pertenece al objeto que lo utiliza, en tiempo de diseo o en tiempo de ejecucin.

22

Visual Basic 6.0

Unidad 2.- Trabajar con Visual Basic

Unidad 2
Trabajar con Visual Basic
Cualquier obra grande al principio es imposible . - Carlyle

2.1. Estructura de proyecto 2.1.1. Proyecto El proyecto se define como el grupo archivos asociados necesarios para desarrollar una aplicacin o componente software. En el caso de Visual Basic, el proyecto es un archivo de texto con extensin .vbp (Visual Basic Project) que contiene informacin sobre los archivos que componen la aplicacin. Especficamente, podramos decir que el proyecto es la aplicacin en s, pero en tiempo de diseo en el argot de Visual Basic. Los proyectos estn conformados por Mdulos, dentro de cada uno de los cuales se encuentran Declaraciones y Procedimientos. 2.1.2. Mdulos El cdigo en Visual Basic se almacena en mdulos. Hay tres tipos de mdulos: de formulario, estndar y de clase. Los mdulos estndar y de clase carecen de representacin grfica, mientras que los mdulos de formulario poseen la representacin grfica correspondiente a la interfaz de usuario. Un proyecto puede contener varios mdulos de distintos tipos y cada uno se guarda en archivos por separado; lo que permite crear cdigo reutilizable por otros proyectos. Cada mdulo estndar, de clase y de formulario posee una seccin de Declaraciones y un conjunto de Procedimientos que veremos ms adelante. a) Mdulos de formulario Los formularios son las ventanas mediante las cuales los usuarios interactan con la aplicacin. Cada formulario del proyecto tiene asociado un archivo con extensin .frm, el cual contiene las definiciones de objeto y su cdigo. b) Mdulos estndar Los mdulos estndar son archivos de texto que almacenan cdigo fuente dividido en procedimientos, a los que pueden tener acceso otros mdulos de la aplicacin. Su implementacin es obligatoria en el caso de incluir variables globales al proyecto. La extensin de estos archivos es .bas. c) Mdulos de clase Los mdulos de clase (archivo de extensin .cls) son la base para la creacin de objetos en Visual Basic. Puede escribir cdigo en mdulos de clase para ensamblar nuevos objetos. Estos objetos nuevos pueden incluir propiedades y mtodos personalizados.
23

Visual Basic 6.0

Unidad 2.- Trabajar con Visual Basic

2.1.3. Procedimientos Cada mdulo se divide en procedimientos. Los procedimientos son estructuras que delimitan un conjunto de instrucciones. Los procedimientos pueden tener alcance pblico o privado. Los procedimientos privados slo se pueden acceder desde el mdulo en el cual estn creados, mientras que los procedimientos pblicos se pueden acceder desde cualquier mdulo del proyecto. Tambin los procedimientos existen en tres tipos: Sub, Function, y Property que se estudiarn en detalle en la unidad 4; por lo pronto slo es necesario conocer su estructura, la cual segn el alcance y el tipo se pueden ver de la siguiente manera: Private Sub NombreDeProcedimientoSub() {Cdigo de instrucciones} End Sub Private Function NombreDeProcedimientoFunction() {Cdigo de instrucciones} End Function Los procedimientos se inician con la sentencia Sub y termina con End Sub. De esta misma manera las funciones comienzan con la sentencia Function y terminan con End Function. En general, todas las estructuras de Visual Basic se inician con NombreDeEstructuta y terminan con End NombreDeEstructura. No est permitido escribir cdigo que no sea dentro de la estructura de procedimientos. 2.1.4. Declaraciones Independientemente del tipo de mdulo, todos poseen un rea especial fuera de la estructura de los procedimientos al inicio del mdulo conocida como Seccin de Declaraciones. En esta seccin del mdulo no se pueden escribir instrucciones, slo declaraciones. Las declaraciones consisten en especificar localidades de memoria o funciones externas (API) mediante un nombre o identificador. En la figura 2.1 se puede apreciar una aproximacin grfica de la estructura completa de un proyecto, con dos mdulos de formulario, un formulario estndar y la estructura interna de cada mdulo en declaraciones y procedimientos.
Proyecto.vbp Formulario1.frm Declaraciones Private Sub End Sub Private Function End Function Private Sub End Sub Formulario2.frm Declaraciones Public Sub End Sub Private Sub End Sub Private Sub End Sub Mdulo.bas Declaraciones Private Sub End Sub Public Function End Function Public Sub End Sub

Figura 2.1.- Estructura de un proyecto

24

Visual Basic 6.0

Unidad 2.- Trabajar con Visual Basic

2.2. IDE de Visual Basic 2.2.1. Entorno de Desarrollo Integrado (IDE) El rea de trabajo que interacta con el usuario en cualquier programa se conoce como Entorno de Desarrollo Integrado o IDE (Integrated Development Environment). El entorno de trabajo de Visual Basic integra funciones de diseo, edicin, compilacin y depuracin de proyectos mediante el uso de una interfaz grfica compuesta por ventanas, cuadros de dilogo y herramientas. Todas las ventanas de Visual Basic se pueden acceder desde el men Ver. Muchas de las ventanas del IDE se pueden acoplar o conectar a otra o al borde de la pantalla, esto con el objeto de organizar el entorno y mejorar la visualizacin de las herramientas. Para activar o desactivar el acople de una ventana se debe mostrar el men emergente de la ventana (clic derecho sobre la ventana). El entorno permite MDI (Interfaz de Mltiples Documentos) para manipular varios proyectos al mismo tiempo. Las funciones integradas son: a) DISEO b) EDICIN c) COMPILACIN d) DEPURACIN 2.2.2. Ventana Explorador de Proyecto La ventana explorador de proyecto muestra todos los mdulos que conforman al proyecto permitiendo al programador navegar entre los distintos mdulos. En la figura 2.2 se muestran los rasgos ms significativos de esta ventana. a) Botn Ver cdigo: muestra la ventana de cdigo del mdulo seleccionado. b) Botn Ver objeto: muestra el diseador de formulario del formulario seleccionado. c) Botn Alternar carpetas: cambia la vista de rbol, agrupando por tipo de mdulo. d) Nombre del proyecto y del archivo de proyecto (.vbp) entre parntesis. e) Nombre de un mdulo de formulario y su archivo asociado (.frm) entre parntesis. f) Nombre de un mdulo estndar y su archivo asociado (.bas) entre parntesis.
a b c

d e

Figura 2.2.- Ventana Proyecto

25

Visual Basic 6.0

Unidad 2.- Trabajar con Visual Basic

Para gestionar cada mdulo o proyecto individualmente (agregar, quitar, guardar), se hace clic derecho sobre el mdulo deseado para desplegar su men emergente. Este men emergente tambin permite elegir el objeto inicial cuando se manipulan varios proyectos en una misma sesin. 2.2.3. Ventana Diseador de Formularios Esta ventana permite construir la aplicacin en forma grfica mediante el formulario y el dibujo de los objetos dentro del formulario. Los objetos se pueden inmovilizar mediante la opcin Bloquear controles del men Formato. El grid o rejilla se puede ocultar y volver a mostrar en el men Herramientas | Opciones, pestaa General. A continuacin, la figura 2.3 es un ejemplo del Diseador de Formularios

Figura 2.3.- Ventana Diseador de formulario

2.2.4. Ventana de cdigo La ventana de cdigo es un editor de texto que permite crear, visualizar y modificar todo el cdigo de Visual Basic. Existe una ventana de cdigo por cada mdulo, ya sea de formulario, estndar o de clase. Vea en la figura 2.4 las partes de la ventana editora de cdigo para un mdulo de formulario llamado frmForm1. a) Lista de Objetos del formulario frmForm1, incluyendo al mismo formulario. b) Lista de eventos provistos por el objeto seleccionado en la Lista de Objetos. c) Seccin de declaraciones d) rea de procedimientos

a c

Figura 2.4.- Ventana de cdigo

26

Visual Basic 6.0

Unidad 2.- Trabajar con Visual Basic

2.2.5. Caja de herramientas Esta ventana contiene las clases de los objetos o controles. Con doble clic se selecciona y se inserta un control en el Centro del formulario activo o con un clic se selecciona el objeto y luego se puede dibujar en el formulario (ver Figura 2.5).

Puntero Label Frame CheckBox ComboBox HScrollBar Timer DirListBox Shape Image OLE

Pictute TextBox CommandButton OptionButton ListBox VScrollBar DriveListBox FileListBox Line Data

Figura 2.5.- Cuadro de herramientas

2.2.6. Ventana de propiedades Mediante esta ventana es posible ver o establecer las propiedades de los objetos. Cada vez que selecciona un objeto, la ventana de propiedades se actualiza para ese objeto. Las partes de la ventana de propiedades (ver Figura 2.6) son: a) Lista de todos los Objetos. b) Descripcin de la propiedad. c) Valor de la propiedad. d) Descripcin rpida de la propiedad seleccionada.

Figura 2.6.- Ventana de propiedades.

27

Visual Basic 6.0

Unidad 2.- Trabajar con Visual Basic

2.2.7. Funciones bsicas del IDE a) Crear un nuevo proyecto: Segn su configuracin, al iniciar Visual Basic aparece automticamente el cuadro de dilogo Nuevo proyecto (ver Figura 2.7), el cual presenta tres pestaas: Nuevo, Existente y Recientes. La pestaa Nuevo permite crear un nuevo proyecto. La pestaa Existente es para cargar un proyecto guardado. Y la pestaa Recientes carga los ltimos proyectos abiertos previamente con Visual Basic.

Figura 2.7.- Dilogo Nuevo proyecto al iniciar Visual Basic

El men Archivo | Nuevo proyecto accede al dilogo de la figura 2.8.

Figura 2.8.- Dilogo Nuevo proyecto estndar

Sugerencia: Seleccione EXE estndar en cualquiera de los casos para aplicaciones sencillas. Mediante el teclado: CTRL+N tiene el mismo efecto.
28

Visual Basic 6.0

Unidad 2.- Trabajar con Visual Basic

b) Agregar o quitar mdulos de formulario del proyecto: En el men Proyecto | Agregar formulario aparece el dilogo de la figura 2.9, el cual presenta dos pestaas Nuevo y Existente. Mediante la pestaa Existente, en el proyecto actual se pueden utilizar o importar formularios creados previamente en otros proyectos.

Figura 2.9.- Dilogo Agregar formulario

Otra forma de acceder al dilogo de la figura 2.9 es mediante el men emergente de la ventana Explorador de proyectos (ver Figura 2.10). Este men permite agregar, guardar o remover formularios y mdulos.

Figura 2.10.-Men emergente del explorador de proyecto

Recuerde:

Los mens emergentes de un objeto o ventana se activan haciendo un clic derecho sobre el objeto o ventana.
29

Visual Basic 6.0

Unidad 2.- Trabajar con Visual Basic

c) Agregar o quitar mdulos estndar del proyecto: Haciendo clic en el men Proyecto | Agregar mdulo se accede al cuadro de dialogo que se muestra en la figura 2.11 en la que se puede observar, al igual que para agregar formulario, las pestaas Nuevo y Existente.

Figura 2.11.-Dilogo Agregar mdulo

Tambin puede activar el men emergente de la ventana Explorador de proyecto, con el fin de agregar mdulos estndar. d) Cambiar los modos de operacin del proyecto (tiempo de diseo y ejecucin): Utilizando el men Ejecutar | Iniciar o Ejecutar | Terminar se puede pasar a tiempo de ejecucin o a tiempo de diseo respectivamente. Mediante la barra de herramientas, haciendo clic en el botn Iniciar o en el botn Terminar tiempo de diseo.
Facilidad:

se puede pasar a tiempo de ejecucin o a

Presionar la tecla F5 del teclado es equivalente a Iniciar.

e) Guardar los archivos del proyecto: Men Archivo | Guardar proyecto o Archivo | Guardar proyecto como Mediante la barra de herramientas, haciendo clic en el botn Guardar Se pueden guardar individualmente cada uno de los mdulos mediante el men Archivo o desplegando el men emergente de la ventana explorador de proyecto (ver Figura 2.10). f) Configurar el proyecto: Para acceder a las Propiedades del proyecto (ver Figura 2.12) se usa el men Proyecto | Propiedades de NombreProyecto. La seccin Objeto
30

Visual Basic 6.0

Unidad 2.- Trabajar con Visual Basic

inicial permite al programador elegir al formulario que se cargar en forma predeterminada al iniciarse la aplicacin.

Figura 2.12.-Dilogo Propiedades del proyecto

g) Configurar el entorno: Para configurar el IDE se hace clic en el men Herramientas | Opciones y aparece el dilogo que se muestra en la figura 2.13, en la se pueden apreciar las pestaas Editor, Formato del editor, General, Acople, Entorno y Avanzado.

Figura 2.13.-Dilogo Opciones de editor

Editor: permite configurar a la ventana de cdigo. Formato del editor: define el tipo, tamao y color como se mostrarn las fuentes tipogrficas segn su uso dentro del cdigo. Esta caracterstica es para facilitar la visualizacin del cdigo de parte del usuario.
31

Visual Basic 6.0

Unidad 2.- Trabajar con Visual Basic

General: escoge si mostrar o no la cuadricula, y si forzar o no la posicin de los controles a la cuadrcula. Acople: permite elegir las ventanas del IDE que se podrn acoplar o no. Entorno: escoge la forma de guardar los cambios, Automtica sin preguntar, Preguntar antes de guardar o Guardado manual Avanzado: establece si el entorno soporta o no MDI. 2.3. Crear una aplicacin 2.3.1. Pasos bsicos Para crear una aplicacin (programa) en Visual Basic o cualquier otro lenguaje de programacin visual, existen unos pasos bien definidos, aunque no estrictos, que ayudan o facilitan el proceso de diseo. Se recomienda inicialmente hacer un dibujo de la apariencia que tendr la interfaz de usuario (el formulario), esto con el fin de ilustrar la ubicacin relativa de los objetos que contendr el formulario. Los pasos bsicos son: a) Colocar los objetos b) Establecer las propiedades c) Escribir el cdigo 2.3.2. Colocar los objetos El primer paso consiste en la creacin de los objetos estableciendo su ubicacin, y tamao inicial en forma grfica dentro de un formulario. Cuando se crea un nuevo proyecto, segn el punto 2.2.7(a), automticamente se crea el primer objeto de la aplicacin, y este es el formulario, incluyendo su mdulo de cdigo. En esta primera parte, el programador debe seleccionar la clase (modelo de objeto) en el cuadro de herramientas y luego dibujar el objeto en su contenedor respectivo. Los contenedores son objetos que agrupan a otros objetos, y el nico visto hasta el momento es el formulario.

32

Visual Basic 6.0

Unidad 2.- Trabajar con Visual Basic

Figura 2.14.-Agregar objetos a un formulario

2.3.3. Establecer las propiedades Una vez que se han colocado los objetos, se procede a establecer o modificar las propiedades de los mismos, tales como: color de fondo (BackColor), valor inicial (Text), rtulo o ttulo (Caption) y la propiedad que nunca se debe dejar de establecer en esta parte, la propiedad Nombre (Name). Las propiedades se cambian en la Ventana de propiedades. No debe escribir cdigo sin establecer la propiedad Nombre previamente, ya que en el paso siguiente de construccin del cdigo, los procedimientos de evento se crean automticamente y estos incluyen el nombre del objeto seleccionado. Si el programador cambia el nombre del objeto, despus de haber escrito el cdigo del mismo, entonces deber corregir los nombres de todos los procedimientos de evento del objeto.

Figura 2.15.-Modificar las propiedades de objetos

33

Visual Basic 6.0

Unidad 2.- Trabajar con Visual Basic

2.3.4. Escribir el cdigo Finalmente se procede a escribir el cdigo en la Ventana de cdigo. Tal como vimos en el punto 2.1.3, el cdigo se escribe dentro de un procedimiento; es decir, entre las sentencias Private Sub y End Sub. Ahora la pregunta es En qu procedimiento de evento se debe escribir el cdigo? En los lenguajes de programacin visual, a la hora de escribir el cdigo, se deben tener en cuenta dos elementos: el objeto y el evento. Es relevante entender que un objeto puede responder a mltiples eventos, y que un mismo tipo de evento puede afectar a mltiples objetos. As, el cdigo se divide en procedimientos y cada procedimiento se corresponde con un objeto especfico y a un evento especfico de este objeto. En este sentido, dividimos este paso en tres tareas bsicas. a) Seleccionar el objeto: Se debe analizar cuales de los objetos se han dispuesto para recibir las acciones del usuario, del sistema, o de una aplicacin externa. Las aplicaciones orientadas a eventos, cuando se ejecutan, slo muestran la interfaz y se quedan a la espera de la intervencin del usuario (teclado, ratn), del sistema (reloj del PC), o de una aplicacin externa (peticiones); es decir, la aplicacin espera a que ocurra algo, espera los Eventos; y estos tienen lugar sobre un objeto. En esta primera tarea, el programador debe determinar cuales de sus objetos recibir esas acciones. En nuestro ejemplo, tenemos tres objetos: el formulario, la caja de texto y el botn de comando. El botn de comando ser el que recibir el evento.

Seleccionar el objeto Command1


Figura 2.16.-Seleccionar objeto para procedimiento de evento

b) Seleccionar el evento: Especificar, para el objeto seleccionado, el evento mediante el cual la aplicacin efectuar algn proceso. El editor crea automticamente el procedimiento de evento. Para nuestro ejemplo escogeremos el evento Click.

34

Visual Basic 6.0

Unidad 2.- Trabajar con Visual Basic

Seleccionar el evento Click


Figura 2.17.-Seleccionar evento para procedimiento de evento

c) Escribir el cdigo: Rellenar el procedimiento de evento creado previamente. Se escriben las instrucciones necesarias para que, cuando se produzca el evento sobre el objeto seleccionado, se ejecute el proceso deseado.
Objeto seleccionado Evento seleccionado

Cdigo Basic

Procedimiento de evento
Figura 2.18.-Escribir cdigo en un procedimiento de evento

35

Visual Basic 6.0

Unidad 3.- Objetos de Visual Basic

Unidad 3
Objetos de Visual Basic
La manera ms segura de no fracasar es decidirse a tener xito .- Sheridan.

3.1. El formulario 3.1.1. Formulario (Clase: Form) Un objeto formulario es una ventana o un cuadro de dilogo que forma parte de la interfaz de usuario de una aplicacin cuando esta se ejecuta. Los formularios pertenecen a la clase Form, a la vez que Form tambin es un objeto. Los formularios son objetos contenedores. Los contenedores son objetos diseados para albergar o agrupar a otros objetos, de tal manera que si se mueve o se elimina al contenedor, tambin se mueven o eliminan a los objetos contenidos en l. Para hacer referencia a un objeto contenido dentro de un formulario, se debe especificar el nombre del formulario seguido de un punto y luego el nombre del objeto. NombreForm.NombreObjeto.Propiedad = Valor NombreForm.NombreObjeto.Mtodo [Parmetro1, Parmetro2,] En el caso que el objeto este contenido en el mismo formulario desde el que se hace referencia, se sustituye el nombre del formulario por la palabra reservada Me. La palabra Me es equivalente al nombre del formulario en cuyo mdulo se escribe el cdigo. En otras palabras, para el ejemplo Me reemplaza a NombreForm, siempre que la ventana de cdigo pertenezca al formulario llamado NombreForm. Me.NombreObjeto.Propiedad = Valor Me.NombreObjeto.Mtodo [Parmetro1, Parmetro2,] De esta misma manera, para acceder a propiedades y mtodos del formulario actual, no es necesario escribir su nombre completo como se muestra a continuacin. NombreForm.Propiedad = Valor NombreForm.Mtodo [Parmetro1, Parmetro2,] En su lugar, se hace referencia al formulario actual la palabra reservada Me. Me.Propiedad = Valor Me.Mtodo [Parmetro1, Parmetro2,]

36

Visual Basic 6.0

Unidad 3.- Objetos de Visual Basic

La palabra Me, ms que sintaxis, es una gran ayuda a la hora de escribir cdigo, ya que al colocar el punto justo despus de Me se despliegan, no slo las propiedades y mtodos del formulario, sino tambin los objetos que este contiene (ver Figura 3.1), facilitndose la escritura y verificndose si existe o no el objeto.

Propiedad Mtodo Objeto

Figura 3.1.- Despliegue del operador punto.

Esta funcionalidad es gracias al operador punto del editor de cdigo, y aplica para todos los objetos del sistema, instancias de objetos y estructuras. Observe que se presentan iconos diferentes para distinguir entre propiedades, mtodos y objetos.
Regla de Visual Basic de prefijo para nombre de objeto Formulario: frm.

3.1.2. Propiedades de formularios A continuacin se muestra una tabla con la mayora de las propiedades de los formularios con su descripcin (ver Tabla 3.1), la cual se ha redactado en forma general ya que existen propiedades que pueden aplicar para otros objetos.
Propiedad Appearence AutoRedraw BackColor BorderStyle Caption ControlBox DrawStyle DrawWidth Enabled FillColor FillStyle Font ForeColor Height Icon Left MaxButton MinButton MouseIcon MousePointer Moveable Name Picture ScaleHeight ScaleLeft ScaleMode ScaleTop Descripcin Si el objeto es 3D o plano. Si re-dibuja o no los resultados de mtodos grficos. Color de fondo del objeto. Estilo del borde del formulario. Puede ser sin borde, borde fijo, borde ajustable, etc. Ttulo o rtulo del objeto. Para formularios, aparece en la barra de ttulo. Si muestra o no el cuadro de control del formulario. Estilo de lnea de los resultados de mtodos grficos. Grueso de lnea de los resultados de mtodos grficos. Si permite o no los eventos del ratn. Color de relleno de formas, crculos y cuadros. Estilo de relleno de formas, crculos y cuadros. Nombre y estilo de la fuente tipogrfica para el objeto. Color de la fuente tipogrfica. Altura del objeto. Segn ScaleMode. Imagen del cuadro de control del formulario. Distancia del lado izquierdo del objeto al borde de su contenedor. Segn ScaleMode. Si muestra o no el botn maximizar del formulario. Si muestra o no el botn minimizar del formulario. Imagen personal del apuntador de ratn. MousePointer debe establecerse en 99-Custom. Tipo de imagen del apuntado de ratn sobre el objeto. Si se puede mover o no el formulario en tiempo de ejecucin. Identificador o nombre del objeto. No acepta espacios ni caracteres especiales. Imagen de fondo. Cualquier archivo grfico del entorno de Windows. Altura interior del objeto. Segn ScaleMode. Coordenada del lado izquierdo interno del objeto. Segn ScaleMode. Unidad de medida de las coordenadas. Puede ser Twip, Centmetro, Pulgada, etc. Coordenada del lado superior interno del objeto. Segn ScaleMode.
37

Visual Basic 6.0

Unidad 3.- Objetos de Visual Basic

Propiedad ScaleWidth ShowInTaskBar StarUpPosition Tag Top Visible Width WindowState

Descripcin Ancho interior del objeto. Segn ScaleMode. Si muestra o no la aplicacin en la barra de tareas de Windows. Posicin inicial del formulario cuando se carga o se ejecuta la aplicacin. Informacin adicional del objeto. Distancia del lado superior del objeto al borde de su contenedor. Segn ScaleMode. Si se muestra o no en la pantalla. Ancho del objeto. Segn ScaleMode. Modo del formulario Normal, Maximizado o Minimizado
Tabla 3.1.- Propiedades ms importantes del formulario.

En la figura siguiente se muestra un formulario (ventana) donde se indican sus elementos bsicos.
Barra de ttulo Botn minimizar Botn maximizar Botn cerrar

Caja de control Barra de men

Borde

Height

Fondo

Width
Figura 3.2.- Elementos bsicos de una ventana.

3.1.3. Mtodos de formularios


Mtodo Show Hide Circle Line Cls Move PSet SetFocus Sintaxis Objeto.Show [Estilo] Objeto.Hide Objeto.Circle (x , y), r [, Color] Objeto.Line (x1, y1) - (x2, y2) Objeto.Cls Objeto.Move x, y, Ancho, Alto Objeto.Pset (x, y) [,Color] Objeto.SetFocus Accin Mostrar un formulario en forma modal si Estilo = 1. De lo contrario es no modal. Ocultar un formulario. El formulario no se descarga de la memoria. Dibujar un crculo sobre el objeto. El centro est en x, y. El radio es r. Dibujar una lnea sobre el objeto. La lnea va desde x1, y1, hasta x2, y2. Borrar los resultados de mtodos grficos. Mtodos como Line y Circle son mtodos grficos. Mover y cambiar tamao del objeto. Alternativamente dispone las propiedades Top, Left, Height y Width Dibujar un punto sobre el objeto. El tamao del punto depende del valor de la propiedad DrawWidth. Enfocar al objeto. Los objetos deshabilitados o no visibles, no pueden ser enfocados.
Tabla 3.2.- Mtodos ms importantes del formulario

3.1.4. Eventos de formularios


Evento Click DblClick MouseDown MouseUp MouseMove Ocurre cuando El usuario presiona y suelta un botn del Mouse (ratn) en un objeto. El usuario presiona y suelta un botn del Mouse (ratn) en un objeto dos veces. El usuario presiona un botn del Mouse (ratn) en un objeto. El usuario suelta un botn del Mouse (ratn) en un objeto. El usuario mueve el puntero del Mouse (ratn) en un objeto.
38

Visual Basic 6.0

Unidad 3.- Objetos de Visual Basic

Evento KeyDown KeyUp KeyPress DragDrop DragOver Activate Deactivate GotFocus LostFocus Load Unload QueryUnload Paint Resize

Ocurre cuando El usuario presiona una tecla en un objeto que tiene el enfoque. El usuario suelta una tecla en un objeto que tiene el enfoque. El usuario presiona y suelta una tecla en un objeto que tiene el enfoque. El usuario termina una operacin de arrastrar y colocar sobre un objeto. El usuario ejecuta una operacin de arrastrar y colocar sobre un objeto. Un formulario se convierte en la ventana activa. Un formulario deja de ser la ventana activa. Un objeto recibe el enfoque. Un objeto pierde el enfoque. Un formulario se abre o se carga. Un formulario se cierra o descarga. Un formulario se intenta cerrar o descargar. Un objeto o parte de l se expone si estaba cubierto por otro. Un formulario cambia de tamao.
Tabla 3.3.- Eventos ms importantes del formulario.

3.2. Los controles 3.2.1. Etiqueta (Clase: Label) Un control etiqueta es un control grfico de la clase Label que se puede usar para mostrar algn texto o mensaje que el usuario no podr cambiar directamente. Se puede escribir cdigo para cambiar el texto mostrado por un control Label como respuesta a eventos en tiempo de ejecucin, manipulando la propiedad Caption. Por lo general las etiquetas se usan para rotular otros controles.
Regla de Visual Basic de prefijo para nombre del objeto Etiqueta: lbl.

Veremos slo las propiedades, mtodos y eventos especficos que no hayan sido tratados anteriormente para cada objeto. a) Propiedades de etiquetas
Propiedad Alignment AutoSize BackColor BackStyle BorderStyle Caption DragIcon DragMode ToolTipText WordWrap Descripcin Justificacin de texto centrada, derecha o izquierda. Si ajusta o no su tamao al contenido. Color de fondo. No tiene efecto si la propiedad BackStyle = 0-Transparent Estilo de fondo de etiquetas (Label) y figuras (Shape). Estilo del borde del objeto. Puede ser con o sin borde. Ttulo o rtulo del objeto. Icono que se muestra durante la operacin arrastrar y colocar del objeto. Modo de la operacin arrastrar y colocar del objeto. Mensaje de la etiqueta de ratn cuando se sealiza al objeto. Si ajusta o no su tamao en altura al contenido (Caption).
Tabla 3.4.- Algunas propiedades de la etiqueta.

Se pueden establecer las propiedades AutoSize y WordWrap en forma combinada si desea que el Label muestre lneas de longitud variable o nmeros variables de lneas. Las etiquetas pueden contener mltiples lneas, para lo cual se debe insertar en la cadena los caracteres de retorno de carro y lnea nueva (ASCII 13 y 10), que se pueden implementar mediante la constante vbCrLf. lblLabel.Caption= Line1 & vbCrLf & Line2
39

Visual Basic 6.0

Unidad 3.- Objetos de Visual Basic

La operacin de arrastrar y colocar est disponible para la mayora de los objetos, siempre y cuando la propiedad DragMode se establezca a 0-Manual. Una vez iniciada una operacin de este tipo, la imagen del icono del puntero de Mouse (ratn) cambia segn la imagen establecida mediante la propiedad DragIcon. La operacin de arrastrar y colocar se inicia mediante el mtodo Drag del objeto en su evento MouseDown. b) Mtodos de etiquetas Uno de los mtodos ms importantes es Drag o arrastrar y colocar, como se le conoce. Se utilizan los siguientes argumentos: 0-Cancelar, 1-Iniciar, y 2Terminar. Tambin es interesante el mtodo Refresh, el cual fuerza al sistema para volver a dibujar un formulario o un control completo. c) Eventos de etiquetas Los eventos ms importantes que afectan a una etiqueta son Change, KeyDown y KeyUp. El evento Change ocurre cuando el valor de la propiedad Caption se modifica. Como se explic anteriormente, los eventos KeyDown y KeyUp son tiles para detectar el inicio y fin de una operacin de arrastrar y colocar. 3.2.2. Botn de comando (Clase: CommandButton) Se utiliza un control de la clase CommandButton para comenzar, interrumpir o terminar un proceso, por lo general mediante su evento Click.
Regla de Visual Basic de prefijo para nombre del objeto Botn de comando: cmd.

a) Propiedades de botones de comando


Propiedad BackColor Cancel Default DisabledPicture DownPicture Picture Style TabIndex TabStop Descripcin Color de fondo. No tiene efecto si la propiedad Style = 0-Estndar. Si ejecuta o no el clic de un Botn presionando ESC. Si ejecuta o no el clic de un Botn presionando ENTER. Imagen cuando se deshabilita el objeto. No tiene efecto si la propiedad Style = 0-Estndar. Imagen cuando se hace clic en el objeto. No tiene efecto si la propiedad Style = 0-Estndar. Imagen de fondo. No tiene efecto si la propiedad Style = 0-Estndar. Estilo grfico de objetos. Orden para el enfoque mediante la tecla TAB. Si se enfoca o no mediante la tecla TAB.
Tabla 3.5.- Algunas propiedades del botn de comando

Los botones de comando pueden contener una imagen mediante la propiedad Picture, siempre que la propiedad Style se establezca a 1-Graphical. Se puede definir el grfico que muestra el botn en estado deshabilitado, segn la propiedad DisabledPicture. Tambin se puede mostrar una imagen determinada por la propiedad DownPicture en el botn de comando cuando se mantiene presionado el botn derecho del Mouse (ratn). TabIndex define el orden de seleccin de enfoque de los objetos en la medida que se presiona la tecla TAB, y no aplica en el caso de los objetos cuya la propiedad TabStop o Enabled se ha establecido a False (False es equivalente a cero)
40

Visual Basic 6.0

Unidad 3.- Objetos de Visual Basic

b) Mtodos de botones de comando El mtodo ms importante es SetFocus. De esta manera se puede enfocar cualquier objeto mediante cdigo, siempre que el objeto incluya este mtodo y est habilitado. El siguiente ejemplo enfoca al botn de comando cmdMiBotn. cmdMiBotn.SetFocus c) Eventos de botones de comando Los eventos ms importantes son Click y MouseMove. Se puede ejecutar el evento clic de un botn de comando de mltiples maneras adems de simplemente haciendo clic en l. El evento clic se puede activar presionando la tecla ENTRAR siempre que el botn tenga el enfoque o la propiedad Default est establecida a True (True es equivalente a cualquier valor distinto de cero). Tambin presionando la tecla ESC, y habiendo establecido la propiedad Cancel True. De todos los botones de comando de un formulario, slo uno tiene establecido a True la propiedad Default o Cancel. 3.2.3. Caja de texto (Clase: TextBox) El control de la clase TextBox, tambin denominado control de campo de edicin o control de edicin, permite mostrar, editar e introducir informacin en tiempo de ejecucin. La clase TextBox esta provista de la propiedad Text, la cual se modifica por teclado y est disponible por cdigo tanto para lectura como para escritura.
Regla de Visual Basic de prefijo para nombre del objeto Caja de texto: txt.

a) Propiedades de cajas de texto


Propiedad CausesValidation Enabled HideSelection Locked MaxLength MultiLine PasswordChar ScrollBars SelLength SelStart SelText Text Descripcin Si ejecuta o no el evento Validate del objeto si pierde el enfoque. Si permite o no los eventos del ratn. Si oculta o no la seleccin del objeto cuando pierde el enfoque. Si bloquea o no la escritura en cajas de texto. Cantidad de caracteres admisibles en una caja de texto. Si permite o no varias lneas de escritura en una caja de texto. Carcter para enmascarar la escritura en cajas de texto. Tipo de barra de desplazamiento para cajas de texto. Cantidad de caracteres seleccionados en una caja de texto. Posicin del cursor dentro de una caja de texto. Posicin del cursor dentro de una caja de texto. Contenido alfanumrico de una caja de texto o combinada.
Tabla 3.6.- Algunas propiedades de la caja de texto.

Para escribir en varias lneas de texto en un control de la clase TextBox, establezca la propiedad MultiLine a True. Para personalizar la combinacin de barra de desplazamiento en un TextBox, establezca la propiedad ScrollBars. Las barras de desplazamiento siempre aparecern en el TextBox cuando su propiedad MultiLine se haya establecido a True y su propiedad ScrollBars a cualquier valor excepto a 0-None. Si una caja de texto de mltiples lneas tiene una barra de desplazamiento horizontal, el texto se no ajustar automticamente a la siguiente lnea cuando la cantidad de caracteres abarque el tamao de la caja de texto.
41

Visual Basic 6.0

Unidad 3.- Objetos de Visual Basic

Se puede bloquear contra escritura un control TextBox para evitar que el usuario cambie su informacin con la propiedad Locked a True. Y si desea evitar que el usuario seleccione o enfoque a la caja de texto, coloque a False la propiedad Enabled. El nmero de caracteres, que el usuario puede introducir, tambin se puede limitar mediante la propiedad MaxLength. Otra restriccin til para las cajas de texto consiste en enmascarar los caracteres introducidos para evitar su visualizacin (contraseas), as en la propiedad PasswordChar se define el carcter de mscara. Con las propiedades SelStart, SelLength y SelText se puede seleccionar parte del texto de una caja de texto. SelStart define la posicin inicial, SelLength la longitud de la seleccin en cantidad de caracteres, y SelText devuelve la cadena seleccionada. Por ejemplo, suponga una caja de texto txtMiCaja contiene el texto Todos los perros van al cielo. Al ejecutar esta seccin de cdigo (Click en el botn de comando cmdSeleccionar), en la caja de texto txtSeleccin aparece la siguiente cadena de caracteres: los perros. Private Sub cmdSeleccionar_Click() txtMiCaja.SelStart = 7 txtMiCaja.SelLength = 10 txtSeleccin = txtMiCaja.SelText End Sub b) Mtodos de cajas de texto Se puede controlar el enfoque de una caja de texto mediante el mtodo SetFocus. Recuerde que no se pueden enfocar objetos deshabilitados (Enabled en False). txtMiCaja.SetFocus c) Eventos de cajas de texto Las cajas de texto responden a los siguientes eventos principalmente: Change, KeyDown, KeyPress, KeyUp, GotFocus, LostFocus y Validate. Se puede aprovechar el evento Change para deshabilitar un botn de comando si el contenido de una caja de texto (propiedad Text) es vaco. De esta manera se inhabilita un proceso hasta que el usuario introduzca datos al programa. Private Sub txtMiCaja_Change() Me.cmdBotn.Enabled = Len(Me.txtMiCaja.Text) End Sub
Len: Es una funcin que devuelve el nmero de caracteres de una cadena de texto

Resulta conveniente que al enfocar una caja de texto, el contenido de esta se seleccione para su fcil modificacin. Private Sub txtMiCaja_GotFocus() Me.txtMiCaja.SelStart = 0 Me.txtMiCaja.SelLength = Len(Me.txtMiCaja.Text) End Sub El evento KeyPress incluye el argumento KeyAscii As Integer que representa el cdigo ASCII de la tecla que el usuario presiona dentro de la caja de texto.
42

Visual Basic 6.0

Unidad 3.- Objetos de Visual Basic

As podr validar cada carcter introducido. En el ejemplo siguiente, se limita al usuario a escribir slo caracteres numricos. Private Sub txtMiCaja_KeyPress(KeyAscii As Integer) If (KeyAscii > 47) And (KeyAscii < 58) Then Exit Sub KeyAscii = 0 End Sub
El cdigo ASCII del caracter 0 es 48 y el del 9 es 57.

La primera instruccin indica que si el caracter est entre 0 y 9 , debe salir del procedimiento (Exit Sub), de lo contrario contina con la siguiente instruccin, la cual convierte en caracter nulo a la tecla presionada, lo que es equivalente a bloquear el teclado para ese caracter. Tambin, conociendo que el cdigo ASCII de la tecla ENTER es 13, se puede seleccionar la siguiente caja de texto utilizando el mtodo SetFocus. Private Sub txtMiCaja_KeyPress(KeyAscii As Integer) If (KeyAscii = 13) Then txtSeleccin.SetFocus End Sub Finalmente, la propiedad CauseValidation del objeto caja de texto activa o desactiva la sensibilidad del objeto ante el evento Validation. El evento Validation se ejecuta justo antes de desenfocar al objeto, lo que permite validar el contenido de la caja de texto y evitar su desenfoque si el valor no es vlido, asignndole al parmetro Cancel True. Suponga que el valor a introducir debe ser menor o igual que 20; as que se cancelar el desenfoque para valores mayores a 20 Private Sub txtMiCaja_Validate(Cancel As Boolean) Cancel = (Me.txtMiCaja.Text > 20) End Sub 3.2.4. Marco (Clase: Frame) El objeto de la clase Frame es un contenedor. Este control proporciona un agrupamiento identificable para controles. Tambin se puede usar un control Frame para subdividir un formulario funcionalmente. Para agrupar controles, dibuje primero el control Frame y, a continuacin, dibuje los controles dentro de Frame. De este modo podr mover (propiedades Top y Left), ocultar (propiedad Visible) o desactivar (propiedad Enabled) al mismo tiempo tanto al marco como a los controles contenidos en l. La propiedad BorderStyle establecida a 0-None oculta la etiqueta del marco. La propiedad TabStop no puede ser negada, ya que est establecida a True por defecto.
Regla de Visual Basic de prefijo para nombre del objeto Marco: fra.

3.2.5. Caja de imagen (Clase: PictureBox) La caja de imagen, tambin como los marcos, acta como contenedor. Puede emplear el control caja de imagen para agrupar controles en la parte superior o inferior del rea interna del formulario o para crear una barra de herramientas o de estado. El tipo de alineacin en el interior del formulario se establece mediante la propiedad Align. Al igual que con el marco, para agrupar objetos se debe dibujar primero la caja de imagen y luego los objetos dentro del contenedor. Este tipo de
43

Visual Basic 6.0

Unidad 3.- Objetos de Visual Basic

control permite mostrar imgenes o grficos de mapa de bits, iconos o meta archivos, as como tambin, archivos mejorados JPEG y GIF, mediante la propiedad Picture. Para hacer que un control PictureBox ajuste su tamao automticamente para mostrar un grfico completo, establezca su propiedad AutoSize a True. Por otra parte, Visual Basic provee una funcin para cargar una imagen en tiempo de ejecucin desde una unidad de disco, denominada LoadPicture. picMiDib.Picture = LoadPicture(A:\Nubes.bmp)
Regla de Visual Basic de prefijo para nombre del objeto Caja de imagen: pic.

3.2.6. Botn de opcin (Clase: OptionButton) Generalmente, los controles de la clase OptionButton se utilizan en un grupo de opciones para mostrar opciones entre las cuales el usuario slo puede seleccionar una. Los controles OptionButton se agrupan si los dibuja dentro de un contenedor como un control Frame, un control PictureBox o un formulario. Todos los botones de opcin que estn dentro del mismo contenedor actan como un nico grupo. La propiedad ms importante es la propiedad Value la cual puede ser True o False. El evento clic se ejecuta automticamente con el enfoque del objeto.
Regla de Visual Basic de prefijo para nombre del objeto Botn de opcin: opt.

3.2.7. Caja de verificacin (Clase: CheckBox) Se utiliza este control para ofrecer al usuario una opcin de tipo Verdadero o Falso, o S o No; o para ofrecer mltiples opciones entre las cuales el usuario puede seleccionar una o ms. La propiedad Value determina el estado del control: 0-Desactivado, 1-Activado, o 2-No disponible. Aunque puede parecer que los controles Botn de Opcin y Caja de Verificacin funcionan de forma similar, hay una diferencia importante: cuando un usuario selecciona un OptionButton, los otros controles OptionButton del mismo grupo dejan de estar disponibles automticamente. Por el contrario, es posible seleccionar cualquier nmero de controles de la clase CheckBox.
Regla de Visual Basic de prefijo para nombre del objeto Caja de verificacin: chk.

3.2.8. Caja de lista (Clase: ListBox) La caja de lista muestra un conjunto de elementos entre los cuales el usuario puede seleccionar uno o ms. Si el nmero de elementos supera al nmero de filas que pueden mostrarse, el control agregar automticamente una barra de desplazamiento.
Regla de Visual Basic de prefijo para nombre del objeto Caja de lista: lst.

a) Propiedades de cajas de lista


Propiedad Columns ItemData List ListCount ListIndex MultiSelect Descripcin Nmero de columnas de una lista. Nmero especfico para cada elemento de una lista. Elemento especfico de una lista. Cantidad de elementos dentro de una lista. Nmero del elemento seleccionado de una lista. Modalidad de seleccin de una lista.
44

Visual Basic 6.0

Unidad 3.- Objetos de Visual Basic

Propiedad NewListIndex Selected Sorted Style

Descripcin Nmero del elemento agregado nuevo a una caja de lista. Si est o no seleccionado un elemento de una lista. Si ordena o no los elementos de una lista. Estilo grfico de objetos.
Tabla 3.7.- Propiedades ms importantes de listas.

ItemData es un vector que permite almacenar un nmero entero por cada elemento de la lista. Se utiliza como campo de informacin adicional para referencia o valor del un elemento de la lista. La propiedad ListIndex devuelve la posicin del elemento seleccionado dentro de una caja de lista, y tiene valores desde -1 hasta ListCount-1. Si no se encuentra seleccionado ningn elemento de la lista, el valor de la propiedad ListIndex ser automticamente -1. Si el usuario selecciona el primer elemento de la lista, ListIndex tiene valor 0, y para el ltimo elemento ListIndex es igual a ListCount-1. La propiedad List devuelve o establece los elementos contenidos en la caja de lista en una posicin especfica. Por ejemplo, considere la caja de lista lstMiLista, en la que se quiere escribir su primer y segundo elemento: lstMiLista.List(0) = Primer elemento de lista lstMiLista.List(1) = Segundo elemento de lista Se pueden definir dos estilos de cajas de lista mediante la propiedad Style: 0Normal o 1-Verificacin. La propiedad MultiSelect acepta tres valores: 0-None (no permite seleccin mltiple), 1-Single y 2-Extended. La propiedad Selected devuelve o establece el estado de seleccin de un elemento de la lista. Por ejemplo, para seleccionar el primer elemento de lstMiLista en tiempo de ejecucin: lstMiLista.Selected(0) = True b) Mtodos de cajas de lista
Mtodo AddItem RemoveItem Clear Sintaxis Objeto.AddItem Elemento Objeto.RemoveItem Posicin Objeto.Clear Accin Agregar el Elemento a un control caja de lista o caja combinada. NewListIndex tiene la posicin. Eliminar el elemento que se encuentra en la Posicin de una caja de lista o caja combinada Eliminar todos los elementos de una caja de lista o caja combinada.
Tabla 3.8.- Mtodos ms importantes de las cajas de lista

3.2.9. Caja combinada (Clase: ComboBox) El objeto de la clase ComboBox se conoce como caja combinada porque est constituido por los objetos caja de texto y caja de lista; por lo tanto, incluye las propiedades, mtodos y eventos de ambos. La diferencia del ComboBox respecto al ListBox es que las cajas combinadas no permiten seleccin mltiple, y obligan al usuario a que escoja uno de los elementos de la lista. Una vez seleccionado el tem, se puede usar la propiedad Text y SelText para devolver el valor contenido en el control. Para las cajas combinadas aplican los mtodos AddItem, RemoveItem y Clear de las cajas de lista. Es conveniente utilizar cajas combinadas en lugar de cajas de lista cuando sea requerido ahorrar rea del formulario.
Regla de Visual Basic de prefijo para nombre del objeto Caja combinada: cbo.
45

Visual Basic 6.0

Unidad 3.- Objetos de Visual Basic

3.2.10. Barra de desplazamiento (Clase: HScrollBar, VScrollBar) Visual Basic provee tanto la barra de desplazamiento horizontal (HScrollBar) como vertical (VScrollBar), con el objeto de generar un valor entero limitado entre un mnimo y un mximo.
Regla de Visual Basic de prefijo para nombre del objeto Barra de desplazamiento: hsb, vsb.

a) Propiedades de barras de desplazamiento


Propiedad LargeChange Max Min SmallChange Value Descripcin Variacin del valor de una barra de desplazamiento largo. Valor mximo de una barra de desplazamiento. Valor mnimo de una barra de desplazamiento. Variacin del valor de una barra de desplazamiento en corto. Valor del objeto.
Tabla 3.9.- Propiedades ms importantes de la barra de desplazamiento.

El valor numrico de la barra se puede leer o establecer mediante su propiedad Value, la cual vara desde el valor de la propiedad Min hasta el valor de la propiedad Max. La propiedad Value cambia automticamente cuando el usuario manipula la barra de desplazamiento en ejecucin. Cuando el usuario usa las flechas, la variacin de la propiedad Value depende de la propiedad SmallChange; y cuando hace clic en la barra, la variacin depende de la propiedad LargeChange. Las propiedades Min, Max y Value aceptan valores enteros desde 32768 hasta 32767. Otra forma de modificar el valor de la barra de desplazamiento es moviendo directamente el bloque de desplazamiento, lo que produce el evento Scroll. Tanto el evento Scroll como el evento Change se pueden usar para actualizar los controles que utilizan el valor de la barra de desplazamiento. 3.2.11. Temporizador (Clase: Timer) No todos los eventos son producidos externamente por el usuario. El control temporizador posee slo un evento, el evento Timer, el cual se activa automticamente a intervalos peridicos. El control Timer es invisible para el usuario en tiempo de ejecucin ya que no tiene representacin grfica. Este objeto resulta til para el procesamiento de fondo, especialmente para las animaciones y monitoreo automtico de procesos. La propiedad Interval devuelve o establece el tiempo en milisegundos en que se produce el evento Timer. La propiedad Enabled activa (True) o detiene (False) el reloj del control. No existe ningn lmite prctico en cuanto al nmero de controles Timer activos (Enabled = True) ejecutndose simultneamente.
Regla de Visual Basic de prefijo para nombre del objeto Temporizador: tmr.

3.2.12. Imagen (Clase: Image) Utilice el control Image para mostrar un grfico o imagen. Un control Image puede mostrar un grfico desde un mapa de bits, un icono o un metarchivo, as como un metarchivo mejorado, un archivo JPEG o archivos GIF. La gran diferencia con el control caja de imagen es que el control imagen no es un contenedor, adems posee la propiedad Stretch, la cual permite ajustar la imagen al tamao del control, y no es el control el que se ajusta al tamao de la imagen como ocurre en el PictureBox. Por otra parte, el control de la clase Image utiliza menos recursos del sistema y se actualiza con ms rapidez, por lo que se recomienda para animaciones o funciones decorativas.
46

Visual Basic 6.0

Unidad 3.- Objetos de Visual Basic

Para crear una animacin o simulacin, puede manipular las propiedades y mtodos grficos en el cdigo de un control Temporizador. Puede rellenar un control imagen (propiedad Picture) con distintas imgenes donde cada una muestre un estado consecutivo. Private Sub tmrMiTimer_Timer() If imgImagen.Picture = imgImagen2.Picture Then imgImagen.Picture = imgImagen1.Picture Else imgImagen.Picture = imgImagen2.Picture End If End Sub La imagen imgImagen cambiar su grfico de fondo (propiedad Picture) cada cierto tiempo, segn el valor establecido en la propiedad Interval del objeto Timer. La velocidad de cambio se establece mediante la propiedad Interval del Timer.
Regla de Visual Basic de prefijo para nombre del objeto Imagen: img

3.2.13. Figura (Clase: Shape) El objeto Shape es un control grfico que se muestra como un rectngulo, un cuadrado, una elipse, un crculo, un rectngulo redondeado o un cuadrado redondeado. Su funcin es decorativa es decorativa, para enmarcar otros objetos o para dividir el formulario en varios sectores. Este tipo de objeto carece de eventos. Se usa el control de la clase Shape en lugar de usar los mtodos grficos Line o Circle para dibujar formas bsicas sobre un formulario.
Regla de Visual Basic de prefijo para nombre del objeto Figura: shp.

3.2.14. Lnea (Clase: Line) Line es un control grfico que se muestra como una lnea horizontal, vertical o diagonal, segn sus propiedades X1, Y1, X2 y Y2. Permite reemplazar el uso del mtodo Line de los formularios y las cajas de imagen.
Regla de Visual Basic de prefijo para nombre del objeto Lnea: lin.

3.2.15. Ubicacin de los controles bsicos


PictureBox TextBox CommandButton OptionButton ListBox VScrollBar DriveListBox FileListBox Line Data

Label

Frame

CheckBox

ComboBox

HScrollBar

Timer

DirListBox

Shape

Image

OLE

Figura 3.3.- Caja de herramientas (Clases).

47

Visual Basic 6.0

Unidad 3.- Objetos de Visual Basic

3.2.16. Ejemplo de los controles bsicos

Figura 3.4.- Ejemplo de los controles bsicos.

48

Visual Basic 6.0

Unidad 3.- Objetos de Visual Basic

49

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

Unidad 4
Cdigo en Visual Basic
La confusin es parte del proceso de aprendizaje .- Dr. Lair Ribeiro

4.1. Espacios de memoria 4.1.1. Identificadores A menudo necesitar almacenar valores temporalmente en memoria cuando est realizando clculos con Visual Basic. Por ejemplo, puede que desee calcular diversos valores, compararlos y realizar distintas operaciones con ellos, dependiendo de los resultados de la comparacin. La manera de referir a esos espacios de memoria donde se encuentran los valores es mediante identificadores. Los identificadores son los nombres que se utilizan para referir en el programa a espacios de memoria (variables, constantes, procedimientos y objetos). Estos permiten identificar unvocamente cualquier elemento del programa. En Visual Basic tienen las siguientes caractersticas: a) Deben comenzar con caracter alfabtico (una letra) b) No deben contener caracteres especiales (guiones, espacios, puntos, etc.) c) No pueden ser palabras reservadas (Private, End, Click, Sub, etc.) d) Debera ser lo ms mnemotcnicos posible, y no ms de 25 caracteres. 4.1.2. Tipos de datos Los tipos de datos especifican las caractersticas de la informacin que se almacenar en memoria. De esta manera, cada tipo de datos requiere un espacio de memoria determinado y una forma de manipulacin especfica. Una suma de nmeros es distinta a una suma de caracteres o de fechas. Tambin, requerira menos espacio de memoria la edad de una persona que las distancias interestelares. Por esta razn, es imprescindible que el programador conozca los tipos de datos disponibles en Visual Basic, para que utilice el que menos requerimientos de memoria posea, y el ms apropiado para que cumpla su cometido. Aunque el lenguaje provee muchos tipos de datos, estos tambin pueden ser definidos por el usuario. Tambin existen otros tipos de datos provistos por objetos especficos. En esta parte trataremos los tipos de datos predefinidos en Visual Basic (ver Tabla 4.1) agrupados como sigue: a) Tipos de datos numricos (Byte, Integer, Long, Single, Double y Currency): Permiten efectuar operaciones aritmticas como suma, resta, multiplicacin, etc. Los tipos de datos numricos pueden ser enteros o fraccionarios. Si se asigna a un tipo de dato entero nmeros con decimales, este se redondea al
50

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

entero inmediato superior. Se producir un error de desbordamiento al intentar cargar un tipo de dato numrico con valores superiores a su espacio disponible (ver la columna Intervalo en la Tabla 4.1). Por ejemplo, el tipo de datos Byte permite valores hasta 255. Si intentara asignar valores superiores a 255 para un dato tipo Byte, se producir un error. Por otra parte, si la intencin del espacio de memoria es almacenar nmeros con decimales, es conveniente especificar los tipos de datos Single, Double o Currency. Se recomienda utilizar el tipo de dato Currency para manipular cantidades monetarias o cualesquiera otras que requieran cierto grado de precisin. b) Tipo de dato lgico (Boolean): Este tipo de dato se establece a True (True equivale a -1) cuando se le asigna cantidades distintas de cero; y, se establece a False (False equivale a 0) cuando se le asigna cero. c) Tipo de dato de cadenas de caracteres (String): Los espacios reservados para cadenas de caracteres pueden ser de longitud fija o variable. Se escoge el tipo de dato de cadena fija, slo cuando se conoce con antelacin y seguridad la cantidad de caracteres que desea guardar. Si se asigna una cadena con ms caracteres que los admitidos por el tipo de dato de longitud fija, los caracteres a la derecha de la cadena son truncados. La cantidad de caracteres para cadenas fijas se especifica mediante el valor de L (ver Tabla 4.1). Las cadenas se delimitan mediante comillas dobles, al principio y al final de la cadena.
Tipo Byte (entero positivo) Integer (entero corto) Long (entero largo) Single (coma flotante) Double (coma flotante) Currency (coma fija) Boolean Date Object String (longitud variable) String * L (longitud fija) Variant (con nmeros) Variant (con caracteres) Para Bytes 1 Nmeros enteros 2 4 4 Nmeros con decimales 8 8 Valores lgicos Fechas y horas Instancias de objetos Cadenas de caracteres de longitud variable Cadenas de caracteres de longitud fija Datos variables 22 + L 2 8 4 10 + L L 16 Intervalo Desde 0 Hasta 255 -32.768 hasta +32.767 -2.147.483.648 a +2.147.483.647 -3,4028E38 a 1,4013E-45 (negativos) +1,4013E-45 a +3,4028E38 (positivos)) -1,7977E308 a -4,9407E-324 (negativos) +4,9407E-324 a +1,7977E308 (positivos) -922.337.203.685.477,5808 a +922.337.203.685.477,5807 True False 1 de enero de 100 a 31 de diciembre de 9999 Cualquier referencia a tipo Object No importa la clase del objeto. Desde 0 hasta 2.000 millones de caracteres (L: Cantidad de caracteres) Desde 1 a 65.400 caracteres aprox. (L: Cantidad de caracteres) Cualquier valor numrico hasta el intervalo de un tipo Double Desde 0 hasta 2.000 millones (L: Cantidad de caracteres)
Tabla 4.1.- Tipos de datos provistos por Visual Basic.

d) Tipo de datos para fecha y hora (Date): Permite efectuar clculos de fecha y hora. El valor de una fecha u hora se delimita mediante los caracteres numerales (#), y se utilizan los caracteres barra (/) o guin (-) para separar da, mes y ao, y el caracter dos puntos (:) para separar hora, minuto y segundo.
51

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

e) Tipo de dato para instancias de objetos (Object): Es posible crear un identificador distinto al nombre de un objeto, pero que hace referencia a ese objeto. Este un buen ejemplo de polimorfismo en Visual Basic. f) Tipo de dato variable (Variant): Es el tipo de dato que ms consume recursos de memoria, ya que tiene la posibilidad de adaptarse o convertirse automticamente en cualquiera de los otros tipos de dato.

4.1.3. Declaracin de espacios de memoria Los espacios de memoria pueden estar sujetos a cambio, o estar protegidos para que no puedan ser modificados. En cualquiera de los casos se debe crear un apuntador (identificador) y especificar las caractersticas (tipo de dato) del espacio de memoria. Los espacios de memoria temporales, con nombre y tipo de dato, se conocen como Variables. Por otra parte, los espacios protegidos de memoria, identificados y configurados a un tipo de dato, reciben el nombre de Constantes. En la mayora de los lenguajes de programacin, el uso de un espacio de memoria debe ser informado al sistema operativo de la computadora; es decir, debe ser declarado. La declaracin consiste en indicar el tipo de proteccin (variable o constante), el identificador, y el tipo de dato de un espacio de memoria, teniendo as declaracin de variables y declaracin de constantes. a) Variables Puede considerar una variable como un marcador de posicin en memoria de un valor desconocido. Por ejemplo, suponga que est creando un programa de ventas. Aunque conociera el producto y el precio, no sabe la cantidad que se ha vendido hasta que no se produce realmente la venta. En este caso debe usar variables para almacenar los valores desconocidos: cantidad de producto y precio total. Visual Basic permite utilizar las variables sin ser previamente declaradas, lo que se conoce como declaracin implcita, y es una prctica indebida. Siempre se deben declarar las variables mediante instrucciones adecuadas de manera explcita. Se recomienda utilizar la sentencia siguiente en la seccin declaraciones de cada mdulo para detectar, durante la compilacin, aquellas variables que no hayan sido declaradas explcitamente. Option Explicit b) Constantes Las constante generalmente se utilizan para presentar valores que aparecen en muchas partes del cdigo o para presentar valores numricos difciles de recordar; de tal manera, que una modificacin de la cadena o del nmero se pueda efectuar en una sola parte del cdigo del programa, y no sea necesario navegar toda la aplicacin efectuando la misma modificacin. Por ejemplo, el mensaje de error: Ha ocurrido un error irrecuperable, debe abortar la operacin, es una gran cantidad de caracteres que resultara tedioso escribir cada vez que se requiera para mostrar al usuario que ha ocurrido un error; y tambin si el programador decide escribir este texto en varias zonas del programa y desea cambiar el mensaje de error, tendr que efectuar el cambio en todas las secciones del cdigo donde se encuentre el texto. Visual Basic provee un conjunto de constantes denominadas constantes intrnsecas. Las constantes creadas por el usuario se conocen como constantes simblicas.

52

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

4.1.4. Alcance de variables y constantes En esta parte conoceremos donde se deben efectuar las declaraciones. Las declaraciones de variables y constantes pueden efectuarse en cualquier mdulo y en cualquier parte del mdulo. La escogencia est sujeta al rea del cdigo, en el cual, el analista desea que la variable o constante tenga vigencia; es decir, exista. Una variable o constante comienza a existir en el momento de su declaracin, y estar disponible, existir y conservar su valor slo en las reas del cdigo que abarque el sitio de su declaracin. Por eso es importante conocer en que parte del cdigo declarar. De esta manera, se tienen tres tipos de variables y constantes, segn su alcance o vigencia. a) Vigencia Local: La variable o constante que se declara dentro de un procedimiento, existe slo dentro de ese procedimiento. Cuando el procedimiento termina, la variable o constante deja de existir, y no puede utilizarse nuevamente en otros procedimientos. La vigencia de variables locales puede ser voltil o esttica, segn la variable pierda o conserve su valor al terminar el procedimiento. Aunque la variable esttica conserva su valor al terminar el procedimiento, esta no puede utilizarse en otros procedimientos. b) Vigencia Limitada: La variable o constante se declara en la seccin declaraciones de cualquier mdulo y se puede utilizar en cualquiera de los procedimientos que se encuentran dentro del mdulo donde se cre el espacio de memoria. Una variable o constante de alcance limitado creada en el mdulo 1, no se puede usar en el mdulo2; pero si en cualquier procedimiento del mdulo 1. c) Vigencia Pblica (Global): Este tipo de variable o constante se puede acceder desde cualquier mdulo en cualquiera de sus procedimientos. Se dice que es una variable o constante del proyecto en general, disponible para todos los mdulos. En este caso, la declaracin se debe efectuar en la seccin declaraciones de un mdulo estndar y con una sintaxis particular que veremos mas adelante. 4.1.5. Declaracin de variables Ahora veremos la sintaxis y las sentencias establecidas para efectuar los distintos tipos de declaraciones de variables. a) Variable local voltil: Se utiliza la sentencia Dim dentro de un procedimiento. Private Sub Procedimiento() Dim Edad As Byte {Instrucciones} End Sub b) Variable local esttica: Se utiliza la sentencia Static dentro de un procedimiento. Private Sub Procedimiento() Static Edad As Byte {Instrucciones} End Sub

53

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

c) Variable limitada: Se utiliza la sentencia Private en la seccin declaraciones de cualquier mdulo. Private Edad As Byte Private Sub Procedimiento() Dim VariableLocal As Tipo {Instrucciones} End Sub d) Variable pblica: Se utiliza la sentencia Public en la seccin declaraciones, pero de un mdulo estndar. Public Edad As Byte Private Sub Procedimiento() Dim VariableLocal As Tipo {Instrucciones} End Sub 4.1.6. Declaracin de constantes (simblicas) Para la declaracin de constantes simblicas (de usuario) se utiliza la sentencia Const en todos los casos precedida del tipo de alcance si es limitada o pblica. a) Constante local: (dentro de un procedimiento) Const PI As Currency = 3.1416 b) Constante limitada: (en la seccin declaraciones de cualquier mdulo) Private Const PI As Currency = 3.1416 c) Constante pblica: (en la seccin declaraciones de un mdulo estndar) Public Const PI As Currency = 3.1416 4.1.7. Constantes intrnsecas Las constantes intrnsecas se conocen tambin como constantes definidas por el sistema y son proporcionadas por aplicaciones y controles de Visual Basic. Ejemplo de estas constantes son las de color: vbBlack, vbBlue, vbCyan, vbGreen, vbMagenta, vbRed, vbWhite y vbYellow. Las constantes intrnsecas no requieren ningn tipo de declaracin. Para localizar, visualizar o copiar las constantes incorporadas en Visual Basic, se puede acceder a la ventana Examinador de objetos presionando F2 o mediante el men Ver | Examinador de objetos. Otras aplicaciones que proporcionan bibliotecas de objetos, como Microsoft Excel y Microsoft Project, tambin proporcionan una lista de constantes que se puede usar con sus objetos, mtodos y propiedades. Tambin se definen constantes en la biblioteca de objetos de cada control ActiveX.
ActiveX: Es un conjunto de tecnologas que habilitan componentes de software para interactuar en un ambiente de red, sin tener en cuenta el lenguaje en que fueron creados. En el captulo 8, se ver con ms detalle.

54

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

Figura 4.1.- Dilogo Examinador de objetos.

4.1.8. Arreglos Los arreglos permiten definir varios espacios de memoria del mismo tipo con un solo identificador, pudiendo diferenciar cada espacio de memoria mediante apuntadores o marcadores que se conocen como ndices. Los arreglos pueden ser de una dimensin (vectores), cuando utilizan un solo ndice; o de varias dimensiones (matrices), cuando utilizan varios ndices. Mediante los ndices se puede acceder directamente a cada uno de los elementos de un arreglo. Para declarar arreglos de una dimensin se usa: Dim MiVector(Mximo) As tipo Mximo es un valor que determina el mximo ndice del vector, y tomando en cuenta que el ndice mnimo es cero, el nmero de elementos del vector ser igual a Mximo + 1. Por ejemplo, suponga la siguiente declaracin: Dim MiVector(4) As Long De esta manera se han creado 5 espacios de memoria tipo Long identificados por: Mivector (0), Mivector (1), Mivector (2), Mivector (3) y Mivector (4). Tambin se puede especificar un rango de ndices que inicie distinto de cero: Dim MiArreglo (Mnimo To Mximo) As tipo Mnimo determina en ndice inferior e inicio del rango. Por ejemplo: Dim Estudiantes (1 To 7) As String Para declarar matrices, los rangos de cada dimensin se separan mediante comas: Dim Nota (1 To 7, 1 To 5) As Single Finalmente, para usar la variable de un arreglo, se debe especificar el ndice correspondiente, tal como se muestra a continuacin, donde se asigna la nota de la tercera evaluacin al quinto alumno:
55

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

Alumno = 5 Evaluacin = 3 Nota(Alumno, Evaluacin) = 20.5 4.1.9. Objetos y espacios de memoria Cada uno de los objetos requiere espacios de memoria para variables y constantes. Estos espacios de memoria no requieren declaracin, ya que los mismos se crean automticamente con la creacin del objeto. Se puede decir que estos espacios de memoria son de alcance pblico, ya que estn disponibles en toda la aplicacin. a) Identificadores: Los espacios de memoria requeridos por un objeto se identifican mediante el nombre del contenedor, el nombre del objeto y el nombre de la propiedad separados por el operador punto. b) Variables: Cada propiedad del tipo lectura-escritura de un objeto se almacena en un espacio de memoria variable. Por ejemplo la propiedad Enabled se almacena en un espacio de memoria que se puede cambiar durante la ejecucin y su tipo de dato Boolean. c) Constantes: Las propiedades de solo lectura son constantes, como la propiedad Moveable que se puede leer pero no cambiar durante la ejecucin. Tambin, los valores de ciertas propiedades son constantes del objeto. Por ejemplo, los valores de la propiedad BorderStyle de un formulario pueden ser 0-None, 1-FixedSingle, 2-Sizable, etc. d) Arreglos: Distintos espacios de memoria, pero bajo un mismo nombre de objeto, es posible mediante los arreglos de objetos. Las colecciones son parecidas a los arreglos de objetos, las cuales se basan en crear varios objetos con el mismo identificador. La manera de diferenciar un objeto de otro es mediante su propiedad Index, ya que cada objeto dentro del arreglo posee propiedades individuales. Los arreglos de objetos son unidimensionales y muchas veces se tratan como vectores de objetos. Para referirse a la propiedad de un objeto especfico, se hace referencia tanto al nombre del objeto como a su ndice. En un arreglo de 3 botones de comando se desea deshabilitar slo al segundo botn, y habilitar los otros dos botones: Me.cmdBotn(0).Enabled = True Me.cmdBotn(1).Enabled = False Me.cmdBotn(2).Enabled = True Utilizando colecciones o arreglos se optimiza el uso del sistema, ya que consumen menos recursos que los controles creados independientemente. Los objetos de un arreglo comparten el mismo procedimiento de evento, por lo tanto no es necesario escribir cdigo separado por cada objeto del vector. Los procedimientos de evento de un objeto en un arreglo, incluyen el argumento Index, el cual permite identificar o diferenciar al objeto causante del evento.
56

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

Private Sub cmdBotn_Click(Index As Integer) {Instrucciones} End Sub Como se puede observar, el evento clic incluye la variable Index. Si el usuario hace clic en el primer, segundo o tercer botn, se ejecuta siempre este mismo procedimiento de evento, pero la variable Index se carga con el valor de la propiedad Index del objeto que desat el evento. Por ejemplo, si el usuario hizo clic el cmdBotn (1), la variable Index se carga con el valor 1. Puede crear un arreglo de controles estableciendo la propiedad Index del objeto. Alternativamente, en forma grfica, puede seleccionar, copiar y pegar el objeto, y el sistema solicitar si desea crear un arreglo de controles. Seleccionando S, el control original adopta ndice 0, y el control copia se crea con las mismas propiedades del control original y adopta ndice 1. En adelante se pueden seguir copiando otros controles sin que el sistema solicite confirmacin, y se incrementar automticamente el valor de la propiedad Index. El nmero de elementos de una coleccin o arreglo, se invoca mediante su propiedad Count. Por ejemplo, a continuacin se escribe en una caja de lista el rtulo de todos los botones de comando de la coleccin cmdBotn. Dim i As Integer For i = 0 To Me.cmdBotn.Count - 1 Me.lstObjetos.AddItem Me.cmdBotn(i).Caption Next i En el ejemplo siguiente, se utilizan 15 botones de opcin para establecer el color de fondo del formulario mediante la funcin de color QBColor. Private Sub optColor_Click(Index As Integer) Me.BackColor = QBColor(Index) End Sub 4.2. Operadores 4.2.1. Aritmticos Los operadores aritmticos permiten efectuar los clculos matemticos mostrados a continuacin (ver Tabla 4.2).
Operacin Suma o adicin Resta o sustraccin, e Inversin de signo Multiplicacin o producto Divisin o fraccionamiento Divisin entera Mdulo o resto Elevacin a potencia Operador + * / \ Mod ^
Tabla 4.2.- Operadores aritmticos de Visual Basic

La divisin entera (\) devuelve el valor de la parte entera del resultado de una divisin. Por ejemplo, 5\2 es igual a 2, ya que 5/2 es igual a 2,5. Por otra parte, el operador Mod permite obtener el resto o residuo de una divisin. Para el caso 5 Mod 2, el resultado es igual a 1, ya que 2x2 es igual a 4 y falta 1 para 5.
57

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

4.2.2. Lgicos Los operadores lgicos permiten obtener resultados lgicos (True o False) mediante una comparacin bit a bit de dos expresiones. En Visual Basic, False representa al nmero 0, y True a cualquier otro valor distinto de 0 (cero). La tabla 4.3 muestra los operadores lgicos de Visual Basic y sus resultados segn las expresiones A y B.
A True False True False B True True False False A And B True False False False A Or B True True True False Not(A) False True False True Not(B) False False True True A Xor B False True True False A Eqv B True False False True A Imp B True True False True

Tabla 4.3.- Resultados de operaciones lgicas.

4.2.3. Relacionales Los operadores relacionales se utilizan para comparar dos condiciones lgicas de una expresin. Por lo general se utilizan en las estructuras de control que veremos ms adelante. A continuacin (ver Tabla 4.4) se muestra los operadores relacionales.
Operacin Es igual a Es distinto de Es menor que Es mayor que Es menor o igual que Es mayor o igual que Es como (el patrn de cadena) Operador = <> < > <= >= Like
Tabla 4.4.- Operadores relacionales de Visual Basic.

El operador relacional igual a utiliza el mismo signo que el operador de asignacin (=), y no se deben confundir. Considere el siguiente ejemplo, donde se declara la variable Booleana EsDivisorCero, y se colocan las cajas de texto txtDiv, txtDivisor y txtCoc, para el dividendo, divisor y cociente respectivamente de una divisin en un formulario. Al hacer clic en el botn de comando cmdDividir, se efecta el clculo. Despus de declarar la variable se asigna a la variable EsDivisorCero el resultado de comparar el contenido de la caja de texto del divisor con cero. Si se cumple que el divisor es igual a cero; a la variable se le asigna True, de lo contrario se le asigna False. Luego en la estructura If, se evala el valor de la variable EsDivisorCero, la cual, si es verdadera se ejecuta la sentencia Exit Sub y termina el procedimiento. En este mismo punto, si la variable EsDivisorCero es falso, se contina con la siguiente lnea que finalmente calcula la divisin y se la asigna a la caja de texto cociente. Private Sub cmdDividir_Click() Dim EsDivisorCero As Boolean EsDivisorCero = Me.txtDivisor.Text = 0 If EsDivisorCero Then Exit Sub Me.txtCoc.Text = Me.txtDiv.Text / Me.txtDivisor.Text End Sub El operador Like compara una cadena de caracteres con un patrn, el cual incluye los siguientes caracteres comodines:
58

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

a) : para representar un nico caracter alfanumrico, b) *: para representar un conjunto de caracteres alfanumricos, c) #: para representar un caracter numrico o dgito, d) [A-Z]: para representar un rango de caracteres coincidentes e) [A-Z]. para representar un rango de caracteres no coincidentes Por ejemplo la variable P (de parecido) es tipo Boolean: 'Las siguentes P son True: P = aAGVFa Like a*a P = F Like [B-N] P = F Like [A-D] P = "BAT123" Like "B?T123" 'Las siguientes P son False: P = aAAjFas Like *a P = BT123 Like B?T123 4.2.4. Operadores especiales a) Operador de asignacin (=): Se utiliza el signo igual a (=) para transferir un Valor desde el lado derecho del signo, hasta el Identificador del lado izquierdo. Identificador = Valor
Nota: No confundir la asignacin con la comparacin

'Comienza y termina con a 'La F est entre B y N 'La F no est entre A y D 'Entre B y T hay un caracter 'No termina con a sino con s 'No hay caracter entre B y T

b) Operador de concatenacin (&): Para unir dos cadena de texto en una sola, se acostumbra a utilizar el operador &, aunque tambin se puede usar el operador +. En el ejemplo siguiente, el ttulo de un formulario es el resultado de una concatenacin. Si en la caja de texto se escribe el caracter 5, el ttulo del formulario ser Ventana 5. Observe que si no se dejara el espacio antes de la comilla de cierre, el ttulo resultante sera: Ventana5 Me.Caption = Ventana & Me.txtNumero.Text c) Operador punto (.): Este operador se usa para relacionar un objeto con su propiedad, mtodo u objeto dependiente. Tambin aplica para hacer referencia a variables de tipo de datos definidos por el usuario. Cada vez que se escribe un punto despus de la variable de objeto, se despliegan todos sus miembros, permitiendo al usuario buscar y seleccionar el miembro requerido. 4.2.5. Precedencia de los operadores La precedencia de los operadores se refiere al orden en que las operaciones matemticas se efectan. En la tabla siguiente (ver Tabla 4.5) se muestra el orden de precedencia de los operadores aritmticos, lgicos y relacionales.
Orden 1 2 3 4 5 6 Aritmticos Potencia (^) Inversin de signo (-) Multiplicacin (*) y divisin (/) Divisin entera (\) Mdulo (Mod) Suma (+) y Resta() Lgicos Igual a (=) Distinto de (<>) Menor que (<) Mayor que (>) Menor o igual a (<=) Mayor o igual a (=>) Relacionales Negacin (Not) Conjuncin (And) Disyuncin (Or) Exclusin (Xor) Equivalencia (Eqv) Implicacin (Imp)
Tabla 4.5.- Precedencia de operadores

59

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

Los operadores que se encuentran en la misma lnea, como suma y resta, y multiplicacin y divisin, se ejecutan de izquierda a derecha. Para controlar la precedencia de manera adecuada se usan parntesis. Por ejemplo: Num Num Num Num Num Num = = = = = = 4 + 3 * 2 ^ 4 + 3 * 2 ^ (4 + 3) * 2 4 + (3 * 2) (4 + 3 * 2) (4 + 3 * 2) 2 - 1 (2 - 1) ^ 2 - 1 ^ 2 - 1 ^ 2 - 1 ^ (2 1) 'A 'A 'A 'A 'A 'A Num Num Num Num Num Num se se se se se se le le le le le le asigna asigna asigna asigna asigna asigna 15 10 27 39 99 100

4.3. Estructuras de control 4.3.1. Programacin estructurada Los lenguajes de programacin secuencial incluan un apuntador por cada lnea de cdigo, de tal manera que era posible saltar un conjunto de lneas hacia delante o hacia atrs indicndole al programa el nmero de lnea de salto explcitamente. Los saltos de lnea hacia delante evitaban que se ejecutaran las lneas intermedias (bifurcacin). Y los saltos hacia atrs permitan que las lneas intermedias se ejecutaran varias veces (repeticin). Con la aparicin de los lenguajes estructurados, se evita en lo posible hacer referencia explcita a las lneas de cdigo, y en su lugar existen sintaxis con inicio y fin de estructuras. Las estructuras de control proporcionan al programa la posibilidad de que sus lneas de instruccin no se ejecuten en forma secuencial. Para esto, las estructuras de control evalan resultados lgicos y toman decisiones para la ejecucin, o no ejecucin, de las instrucciones controladas. Las estructuras de control permiten controlar el flujo de ejecucin del programa. Si no se controla el flujo, las lneas de instruccin se leern de arriba hacia abajo, y cada instruccin de izquierda a derecha. La mayor parte del poder y utilidad de un lenguaje deriva de su capacidad de cambiar el orden de las instrucciones mediante saltos y bucles. 4.3.2. Tipos de estructuras Segn el tipo de salto de instrucciones, hacia delante o hacia atrs, se tienen estructuras bifurcativas o repetitivas respectivamente. a) Las estructuras bifurcativas: permiten agrupar conjuntos de instrucciones para activar selectivamente su ejecucin. La seleccin de un conjunto de instrucciones depende del resultado verdadero (True) de una expresin lgica o relacional. b) Las estructuras repetitivas: por su parte agrupan slo a un conjunto de instrucciones que se pueden ejecutar varias veces. La ejecucin del conjunto de instrucciones tambin es controlada por expresiones lgicas o condiciones. 4.3.3. Estructura bifurcativa If-Then-ElseIf-Else La sentencia If permite crear una estructura de decisin que se cierra mediante la sentencia End If; sin embargo, cuando se trata de slo una instruccin a ejecutar, se puede obviar la sentencia de cierre End If y se escribe en una sola lnea. Se pueden tomar decisiones mltiples mediante ElseIf que evala una expresin por cada instruccin o conjunto de instrucciones que se desea ejecutar. A continuacin se muestran algunos casos y sus diagramas de flujo.
60

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

a) Una sola lnea de instruccin por una expresin: If expresin Then UnaInstruccin1 Else UnaInstruccin2
If False Else Expresin True Then

End If
Figura 4.2.- Estructura If-Then-Else simple.

b) Varias lneas de instruccin para varias expresiones lgicas: If expresin1 Then Instrucciones si expresin1 es True ElseIf expresin2 Then Instrucciones si expresin2 es True Else Instrucciones si expresin1 y expresin2 son False End If
If False ElseIf False Expresin 2 Expresin 1 True Then True Then

ElseIf False Else Expresin N True Then

End If
Figura 4.3.- Estructura If-Then-Else completa.

Observacin: En cada bloque de instrucciones tipo Then o Else se pueden anidar estructuras If Then Else.

4.3.4. Estructura bifurcativa Select-Case Para la bifurcacin con Select Case, la variable se evala de distintas maneras en cada bloque Case, como se muestra en la figura 4.4. La expresin lgica (variables y operadores relacionales) se construye internamente a diferencia de la estructura If. Select Case se utiliza cuando la variable a evaluar es la misma en todos los puntos de bifurcacin. La sintaxis es la siguiente, donde se evala a la variable A: Select Case A
61

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

Case 0 'Instrucciones Case 3 'Instrucciones Case 4, 7 'Instrucciones Case 8 To 10 'Instrucciones Case Is > 10 'Instrucciones Case Else 'Instrucciones End Select

si A es 0 si A es 3 si A es 4 7 si A es 8, 9 10 si A es mayor a 10 para los otros casos

Select Case A A=v1 A=v2 False A >=v3 y A<=v4 False True Case v1, v2 True Case v3 To v4

False Case Else

A >vN

True Case Is > vN

End Select
Figura 4.4.- Estructura Select Case

4.3.5. Estructura repetitiva For-Next Se utiliza para repetir un conjunto de instrucciones un nmero determinado de veces; es decir, cuando el usuario conoce exactamente cuantas veces repetir el conjunto de instrucciones. Para esto, la estructura requiere una variable de Control tipo entera que cambiar desde un valor de Inicio hasta un valor de Fin. La variacin o Paso de un valor a otro se puede establecer como un nmero positivo o negativo, de tal manera que la variable cambie en forma ascendente o descendente con incrementos uniformes. La sintaxis para el bucle For-Next es la siguiente: For Control = Inicio To Fin Step Paso 'Instrucciones [Exit For] Next Control Cada vez que se ejecuta el ciclo For-Next, el sistema evala la relacin entre el valor de la variable Control y Fin. Para valores positivos de Paso se tiene variacin ascendente de Control, y siempre que Control sea menor o igual que Fin, el bucle se repite, de lo contrario termina. Para valores negativos de Paso, la variacin es descendente y el bucle se mantiene mientras Control sea mayor que Fin. Para interrumpir un ciclo For-Next, independientemente del valor de Control, se puede usar la palabra Exit For. Los ciclos For-Next anidados estn permitidos.
62

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

For Control Control = Inicio

False

Control < Fin*Paso True Instrucciones del Bucle

Next

Next Control

Control = Control + Paso


Figura 4.5.- Estructura For-Next.

4.3.6. Estructura repetitiva Do-Loop Esta estructura repetitiva ejecuta un conjunto de instrucciones mientras evala una condicin como verdadera o falsa. La evaluacin de la condicin se puede efectuar al principio o al final de la estructura. Si la evaluacin es al principio de la estructura, y no se cumple la condicin predeterminada, el bloque de instrucciones no se ejecuta. Por otra parte, si la condicin se evala al final de la estructura, el conjunto de instrucciones se ejecuta por lo menos una vez, aunque no se cumpla la condicin. Existen dos tipos de sentencia Do-Loop, la sentencia While que mantiene el ciclo mientras una condicin sea verdadera (True), y la sentencia Until que mantiene el ciclo mientras la condicin es falsa (False). La sintaxis para cada uno de los casos se muestra a continuacin: a) Do While-Loop: Se evala al principio con While Condicin=True Do While Condicin {Instrucciones} [Exit Do] Loop b) Do-Loop While: Se evala al final con While Condicin=True Do {Instrucciones} [Exit Do] Loop While Condicin c) Do Until-Loop: Se evala al principio con Until Condicin=Flase Do Until Condicin {Instrucciones} [Exit Do] Loop d) Do-Loop Until: Se evala al final con Until Condicin=Flase Do {Instrucciones} [Exit Do] Loop Until Condicin
63

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

Do While False

Do True

Do Until

Do

Condicin? True Instrucciones Loop

Instrucciones Loop While True

Condicin? False Instrucciones Loop

Instrucciones Loop Until False

Condicin? False Loop

Condicin? True Loop

Loop

Loop

Figura 4.6.- Estructuras Do-Loop.

Salir del Do: Se puede terminar el bucle Do-Loop mediante la sentencia Exit Do.

4.4. Procedimientos 4.4.1. Procedimientos y subrutinas Una de las caractersticas que definen a un lenguaje de programacin estructurado es que el cdigo se encuentra agrupado en bloques de instrucciones con sentencias de inicio y final del bloque. Estos bloques de instrucciones reciben el nombre de procedimientos. Podramos definir un procedimiento como una secuencia de instrucciones para efectuar tareas especficas que se ejecutan como una unidad que tiene nombre o identificador. La estructura bsica del cdigo de Visual Basic es el procedimiento, de hecho todo el cdigo ejecutable esta contenido en procedimientos. A diferencia de las estructuras de control, los procedimientos no se pueden anidar dentro de otros procedimientos. Sin embargo, se pueden crear pequeas secciones de cdigo enmarcados dentro de un procedimiento. Estos pequeos bloques se conocen como Subrutinas, las cuales carecen de nombre o identificador, y en su lugar, se accede a ellos mediante etiquetas de cdigo. Las etiquetas son marcadores de posicin y estn constituidas por un nombre seguido de dos puntos en una lnea de cdigo libre dentro de un procedimiento. Las subrutinas, en trminos de lenguajes de programacin en general, son porciones lgicas de cdigo que se encargan de resolver un problema especfico. La subrutina en trminos de Visual Basic se aplica a la porcin de cdigo que se ejecuta dentro de un procedimiento mediante las sentencias GoTo, GoSub y Return. Por esta razn, no se deben confundir los procedimientos con las subrutinas en Visual Basic. Aunque las subrutinas estn disponibles, el analista debe evitar al mximo su uso, ya que estas rompen con la definicin de Lenguaje Estructurado. En su lugar, se debe procurar la creacin de procedimientos para esas secciones de cdigo necesarias por otros procedimientos. La sentencia GoTo produce un salto incondicional a una etiqueta de lnea, a partir de la cual contina el control del programa. Por su parte, la sentencia GoSub tambin lleva el control del programa a una etiqueta de lnea, pero mediante la sentencia Return, el control del programa puede regresar a la lnea siguiente desde la cual se efectu el llamado de la subrutina. A continuacin se muestra un ejemplo del uso de subrutinas. En el ejemplo la instruccin GoTo Terminar es imprescindible, ya que las etiquetas de lnea slo son marcadores de posicin y no
64

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

ejercen ningn control de programa, es decir, de ninguna manera especifican el fin del procedimiento. Ms adelante veremos que la etiqueta Terminar y la instruccin GoTo Terminar se pueden reemplazar por la sentencia Exit Sub ( Exit Function), para salir del procedimiento. Private Sub cmdBotn_Click() 'Instrucciones GoSub SubRutina1 'Aqu retorna el control del programa 'Instrucciones GoSub SubRutina2 'Aqu retorna de nuevo el control del programa 'Instrucciones GoTo Terminar 'El control de programa nunca pasa por aqu SubRutina1: 'Instrucciones de SubRutina1 Return SubRutina2: 'Instrucciones de SubRutina2 Return Terminar: End Sub 4.4.2. Ventajas de los procedimientos El desarrollo de una aplicacin implica el diseo y la estructuracin de las tareas que debe efectuar la aplicacin. Los procedimientos constituyen una herramienta que facilita este proceso, ya que resultan muy tiles para condensar las tareas repetitivas o compartidas, como clculos utilizados frecuentemente, manipulacin de texto y controles, y operaciones con bases de datos. Bsicamente, los procedimientos ofrecen cinco ventajas al programador, las cuales se exponen a continuacin. a) Organizacin del cdigo: al dividir el programa en pequeos mdulos, una sola lnea de cdigo del procedimiento principal le permite al programador ejecutar un conjunto de lneas de cdigo del procedimiento al que llama, sin necesidad de llenar el procedimiento principal de lneas de cdigo difciles de interpretar y manipular. b) Simplifica problemas: un problema grande difcil de resolver se convierte en varios problemas pequeos, pero fciles de resolver. c) Deteccin de fallas: Los procedimientos le permiten dividir los programas en unidades lgicas discretas, cada una de las cuales se puede depurar ms fcilmente que un programa entero sin procedimientos. Para efectos de pruebas, cada procedimiento se puede ejecutar por separado. d) Cdigo unitario: para las tareas que son comunes en varias secciones del programa no es necesario repetir el cdigo, pues basta con crear un procedimiento general para esas tareas y llamar al procedimiento desde las distintas secciones del programa cada vez que sea requerido. e) Reutilizacin del cdigo: Los procedimientos que se utilizan en un programa pueden actuar como bloques de construccin de otros programas, normalmente con pocas o ninguna modificacin.
65

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

4.4.3. Clasificacin de procedimientos Visual Basic tiene tres tipos de procedimientos: a) Procedimientos Sub: Se caracterizan porque no devuelven un valor, y se conocen simplemente como procedimientos. Existen dos tipos de procedimientos Sub. Los procedimientos de evento, que se ejecutan como respuesta a un evento y estn asociados a un objeto. Los procedimientos generales, que son creados por el usuario y se les debe llamar especficamente desde un procedimiento de evento para su ejecucin. Los procedimientos generales se crean para proveer algn servicio comn a otros procedimientos. Es una buena estrategia de programacin colocar las instrucciones comunes en un procedimiento distinto (un procedimiento general) y hacer que los procedimientos de evento lo llamen. Esto elimina la necesidad de duplicar cdigo y tambin hace que la aplicacin sea ms fcil de mantener. b) Procedimientos Function: A diferencia de los procedimientos Sub, los procedimientos Function devuelven un valor y se les conoce como funciones. Las funciones pueden ser de dos tipos: Las funciones intrnsecas, que estn prediseadas o provistas por el lenguaje como Sqr(), Cos(), Asc(), etc., las cuales devuelven el valor de raz cuadrada, coseno, cdigo ASCII, etc., respectivamente. Las funciones simblicas, creadas por el usuario cuando el lenguaje no provea una funcin especfica o especial. Por ejemplo, se puede crear una funcin que calcule la longitud del cateto opuesto, o hipotenusa, de un tringulo rectngulo, dado el cateto adyacente y el ngulo. c) Procedimientos Property: Son procedimientos que pueden devolver y asignar valores, as como establecer referencias a objetos. Se conocen como procedimientos de propiedad y permiten ejecutar cdigo cuando se establece o se obtiene el valor de una propiedad. Los procedimientos de propiedad permiten que un objeto proteja y valide sus propios datos (propiedades), y se usan mayormente a nivel de mdulos de clase. Visual Basic proporciona tres tipos de procedimientos de propiedad: Property Get, que devuelve el valor de una propiedad. Property Let, que establece el valor de una propiedad. Property Set, que establece el valor de una propiedad de objeto, es decir, una propiedad que contiene una referencia a un objeto. Cada uno de estos procedimientos de propiedad desempea un papel concreto en la definicin de una propiedad. La propiedad tpica estar compuesta por una pareja de procedimientos de propiedad: Property Get para obtener el valor de la propiedad, y Property Let o Property Set para asignar un nuevo valor. La razn por la que hay dos formas de procedimientos de propiedad (Let y Set) para asignar un valor, es que Visual Basic permite la asignacin de
66

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

referencias de objeto a variables de objeto previamente declaradas con una sintaxis especial: Dim cmd As Object Set cmd = New CommandButton 4.4.4. Alcance de procedimientos El alcance se refiere al mbito donde el procedimiento est disponible. En cuanto a su alcance, hay dos tipos de procedimientos a) Procedimientos pblicos b) Procedimientos privados Los procedimientos pblicos estn disponibles desde cualquier parte del cdigo del programa; es decir, se pueden llamar desde cualquier mdulo del programa., aunque el consumo de recursos es mayor. En cambio, los procedimientos privados slo se pueden acceder desde el mdulo donde fueron creados. Para definir un procedimiento pblico se utiliza la palabra reservada Public y para definir un procedimiento privado se utiliza la palabra reservada Private.
Observacin: Si no se especifica la palabra reservada (Public o Private), los procedimientos son pblicos de forma predeterminada, lo que significa que se les puede llamar desde cualquier parte de la aplicacin.

4.4.5. Trabajar con procedimientos En esta parte trataremos la sintaxis requerida para manipular procedimientos Sub y Function, ya sean pblicos o privados. Veremos slo los procedimientos generales y las funciones simblicas, ya que los procedimientos de evento fueron tratados en la unidad 2 y las funciones intrnsecas no requieren de creacin, ya que estn provistas por el sistema. En la unidad 5 veremos con detalle algunas de las funciones del sistema. Los procedimientos de propiedad no se tratarn en esta gua de estudio. a) Sintaxis para la creacin de procedimientos Procedimiento tipo Sub privado (Procedimiento general privado) Private Sub NombreProcedimiento([parmetros]) '{Instrucciones} End Sub Procedimiento tipo Sub pblico (Procedimiento general pblico) Public Sub NombreProcedimiento([parmetros]) '{Instrucciones} End Sub Procedimiento tipo Function privado (Funcin simblica privada) Private Function NombreFuncin([parmetros]) As TipoDeDato '{Instrucciones} NombreFuncin = ValorDevuelto End Sub

67

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

Procedimiento tipo Function pblico (Funcin simblica pblica) Public Function NombreFuncin([parmetros]) As TipoDeDato '{Instrucciones} NombreFuncin = ValorDevuelto End Sub Como se explic anteriormente, los procedimientos tipo Function, a diferencia de los procedimientos tipo Sub, devuelven un valor. Observe que, justo antes de terminar los procedimientos Function, se le asigna al nombre de la funcin el valor que esta devuelve. b) Llamar a procedimientos Una vez que se han creado los procedimientos, estos se pueden invocar, ejecutar efectuando un llamado al procedimiento por su nombre. Los procedimientos Function se utilizan como se utilizara cualquier funcin del sistema, por ejemplo la funcin QBColor, que es del sistema, se invoca de la siguiente manera: Me.BackColor = QBColor(7) En forma general, las funciones simblicas se invocan como sigue: Variable = NombreFuncin([Parmetros]) Respecto a los procedimientos tipo Sub, existen dos maneras de llamarlos. Una forma es mediante la instruccin Call y el nombre del procedimiento. Call NombreProcedimiento([Parmetros]) Y otra forma es directamente escribiendo el nombre del procedimiento. NombreProcedimiento [Parmetros]
Observacin: De la forma directa, los parmetros no se colocan entre parntesis. Recuerde: Una vez que termina el procedimiento, el control del programa contina en la lnea de cdigo siguiente a la que llam al procedimiento.

c) Salir de procedimientos Hemos visto en las estructuras de control repetitivas, que no es necesario esperar a que termine el ciclo para salir de la estructura, ya que esta puede ser interrumpida mediante la sentencia Exit seguida del nombre de la estructura. Para salir de un ciclo For se utiliza Exit For, por ejemplo. Los procedimientos, como estructuras, tambin permiten su terminacin sin necesidad de esperar alcanzar la lnea de cdigo donde se encuentra la sentencia End Sub o End Function. Esto se logra mediante las sentencias Exit Sub o Exit Function, segn sea el caso. Private Sub NombreProcedimiento([Parmetros]) '{Instrucciones que se ejecutan} Exit Sub 'Termina el procedimiento '{Instrucciones que no se ejecutarn} End Sub
68

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

d) Conservar el valor de las variables Ya se ha dicho que las variables locales son las que se declaran dentro de un procedimiento y que estas pueden ser individualmente voltiles o estticas. Se puede hacer que todas las variables, declaradas dentro de un procedimiento, sean estticas, simplemente anteponiendo a la declaracin del procedimiento la palabra reservada Static como se muestra a continuacin para un procedimiento tipo Sub. Static Private Sub NombreProcedimiento([Parmetros]) 'Declaracin de variables voltiles '{Instrucciones} End Sub Aunque la declaracin de las variables sea voltil, estas se convierten en estticas para el procedimiento de ejemplo anterior. 4.4.6. Transferencia de parmetros En los ejemplos de sintaxis anteriores, hemos visto que se incluyen parntesis () en la declaracin de los procedimientos. Opcionalmente dentro de estos parntesis se pueden colocar parmetros. Los parmetros o argumentos son variables, separadas por coma, que se utilizan para pasar o transferir valores tiles a los procedimientos cuando estos son llamados. Los valores de estas variables se pueden pasar por valor o por referencia. a) Transferencia por valor Cuando la variable se pasa por valor, se enva al procedimiento una copia de la variable y el procedimiento reserva un espacio de memoria nuevo, de tal manera que los cambios en el valor de la variable nueva no afectan el valor de la variable original de la lnea de cdigo donde se efectu la llamada. Para pasar variables por valor se utiliza la palabra reservada ByVal en la declaracin de parmetros. Sub NombreProcedimiento (ByVal dato1 As tipo) '{Instrucciones} End Sub b) Transferencia por referencia Al pasar un argumento por referencia, tanto la variable del procedimiento, como la variable original, comparten el mismo espacio de memoria; por esta razn, al cambiar el valor de la variable dentro del procedimiento, la variable original de la lnea de cdigo desde donde se hizo el llamado, adopta el nuevo valor. Para pasar variables por valor se utiliza la palabra reservada ByRef. Sub NombreProcedimiento (ByRef dato2 As tipo) '{Instrucciones} End Sub En el ejemplo de sintaxis, dato1 es el nombre de una variable nueva, y dato2 es la misma variable de la instruccin llamadora, slo que con otro nombre. Por defecto, si no se usa la palabra reservada (ByVal o ByRef), todos los datos se envan por referencia. En el siguiente ejemplo, dato2 se transfiere por referencia.
69

Visual Basic 6.0

Unidad 4.- Cdigo de Visual Basic

Sub NombreProcedimiento (dato2 As tipo) '{Instrucciones} End Sub El siguiente ejemplo muestra como funciona la transferencia de parmetros: Private Sub Dim X As X=5: Y=7 Duplicar 'X sigue End Sub Botn_Click() Integer, Dim Y As Integer X, Y 'Llama al procedimiento con 5 y 7 siendo igual a 5, pero Y cambia a 14

Sub Duplicar(ByVal D1 As Integer, ByRef D2 As Integer) 'D1 se carga con 5 y D2 con 7 D1 = D1 * 2 'D1 cambia a 10 de 5*2=10 D2 = D2 * 2 'D2 cambia a 14 de 7*2=14 End Sub 'Retorna a Botn_Click 4.4.7. Ejemplo completo de la unidad

70

Visual Basic 6.0

Unidad 5.- Funciones del intrnseca

Unidad 5
Funciones intrnsecas
El entusiasmo es la madre del esfuerzo, y sin este nunca se logr nada importante .- Emerson

5.1. Funciones en general 5.1.1. Expresiones La expresin se define como cualquier combinacin de variables, constantes, operadores, funciones y nombres de campos, controles y propiedades que se evala como un nico valor. La evaluacin consiste en la asignacin de un valor a un espacio de memoria, es decir a una variable. As, una instruccin de asignacin es una expresin. Me.txtPeso.Text = Me.txtMasa.Text * 10 5.1.2. Funciones Una funcin es un clculo preprogramado que se puede realizar bajo peticin desde cualquier lugar de un programa. Puesto que una funcin adopta uno o ms argumentos y devuelve un nico valor, esta se puede incluir en una expresin. Por ejemplo, se puede definir la funcin Licuar que permite el uso de una licuadora para mltiples aplicaciones. Para preparar una Merengada fra, se debe escribir la siguiente expresin: Merengada = Hielo + Licuar(Leche, Fruta, Azcar, Vainilla)
Leche Fruta Azcar Vainilla

Licuar

Merengada caliente

Figura 5.1.- Funcin supuesta Licuar

Observe que la funcin Licuar no devuelve Merengada fra y se debe agregar Hielo en una expresin completa. La merengada obtenida depender del tipo e fruta, y cantidades de leche, azcar y vainilla. Se dice que estos ltimos son las variables independientes de la funcin, mientras que la merengada es la variable dependiente. En general todas las funciones se caracterizan por una serie de valores de entrada conocidos como argumentos o variables independientes, y slo un valor de salida conocido como resultado o variable dependiente.

71

Visual Basic 6.0

Unidad 5.- Funciones del intrnseca

A B C

Funcin

Y=Funcin(A, B, , C)

Figura 5.2.- Funcin en general

Por ejemplo, y = Sin(x) es una expresin formada por la funcin Sin, un argumento x como valor de un ngulo, y el resultado (clculo del seno de x) es asignado a y.
x Sin y
Figura 5.3.- Funcin Seno.

Para facilitar el estudio de las funciones, ests se han clasificado segn su relacin con cadenas, nmeros, fechas, objetos o archivos. 5.1.3. Instrucciones Mientras que las funciones son operaciones sobre ciertos argumentos para obtener o devolver un valor, las instrucciones consisten en rdenes para el sistema, y no devuelven valor alguno. Las instrucciones prescinden del par de parntesis que caracterizan a todas las funciones. Podramos comparar a las instrucciones con procedimientos Sub intrnsecos del sistema. Segn el ejemplo, la funcin Licuar tambin podra utilizarse como una instruccin, en lugar que como una funcin, y en este caso no existe devolucin de un valor, sino que se ejecuta una orden y se prescinde del par de parntesis como se muestra a continuacin: Reunir ingredientes Licuar Leche, Fruta, Azcar, Vainilla Agregar Hielo En Visual Basic existen muchas funciones que se pueden utilizar como instrucciones. El trmino instrucciones ha sido utilizado en captulos anteriores para hacer referencia a lneas de cdigo, y en su lugar se ha utilizado el trmino sentencias. Las instrucciones tambin se conocen como sentencias o comandos. 5.2. Funciones de cadena 5.2.1. Tratamiento de cadenas Para el estudio de las funciones que admiten como argumento, o devuelven como valor, cadenas de caracteres, es necesario conocer lo siguiente: a) Las cadenas de caracteres se declaran tipo String. Por ejemplo, declaremos la variable Cadena como una cadena de longitud variable. Dim Cadena As String b) Los valores de cadenas de caracteres se delimitan mediante comillas dobles. Por ejemplo, asignemos a la variable Cadena el valor Visual Basic. Cadena = Visual Basic

72

Visual Basic 6.0

Unidad 5.- Funciones del intrnseca

c) Cada caracter ocupa una posicin comenzando desde la izquierda de la cadena. Por ejemplo, en la posicin 8 de la variable Cadena se encuentra el caracter B.
V 1 i 2 s 3 u 4 a 5 l 6 7 B 8 a s i c

9 10 11 12
Figura 5.4.- Posiciones de una cadena de caracteres

d) La longitud de una cadena es la cantidad de caracteres de la cadena. Por ejemplo, la variable Cadena tiene una longitud de 12 caracteres. Observe que el espacio entre las palabras, se cuenta como un caracter que ocupa la posicin 7. e) Las variables declaradas como cadenas de longitud fija truncan los caracteres sobrantes a la derecha, o rellenan con espacios en blanco, para completar la cantidad de caracteres especificados. Dim K As String * 5 K = Visual Basic K = Pan 'K se carga con Visua (5 caract.) 'K rellena con 2 espacios Pan

5.2.2. Cambiar a maysculas y minsculas Para convertir todos los caracteres de una cadena a maysculas o minsculas se usa UCase o LCase respectivamente. Por ejemplo, la siguiente instruccin presenta en la caja de texto txtCadena la palabra VISUAL BASIC Me.txtCadena.Text = UCase(Cadena) Mientras que la siguiente instruccin presenta la palabra visual basic Me.txtCadena.Text = LCase(Cadena) 5.2.3. Determinar la longitud de una cadena Se puede determinar la cantidad de caracteres contenidos en una cadena, incluyendo los espacios, mediante la funcin Len. La siguiente instruccin presenta en la caja de texto txtCadena el valor 8. Me.txtNmero.Text = Len(Cadena) 5.2.4. Buscar caracteres dentro de una cadena Para determinar la posicin de caracteres dentro de una cadena se usa InStr. La sintaxis general se muestra a continuacin. InStr([Inicio, ]Cadena, Buscado) Inicio es un entero opcional que representa la posicin inicial de bsqueda, y si se obvia la bsqueda comienza desde la posicin 1. Cadena es la cadena examinada, y Buscado son los caracteres buscados. Si los caracteres buscados no se encuentran en la cadena, InStr devuelve el valor 0. Vea los ejemplos siguientes: Buscar la posicin de Ba en la variable Cadena. Recuerde que Cadena = Visual Basic. Se presenta el valor 8 en la caja de texto.
73

Visual Basic 6.0

Unidad 5.- Funciones del intrnseca

Me.txtNmero.Text = InStr(Cadena, Ba) Buscar la posicin de es en Cadena. Se presenta el valor 0 en la caja de texto, indicando que no encontr la secuencia es. Me.txtNmero.Text = InStr(Cadena, es) Buscar la posicin de a en Cadena. Devuelve el valor 5 en la caja de texto. Me.txtNmero.Text = InStr(Cadena, a) Buscar la posicin de a en Cadena, pero desde la posicin 6. En este caso, devuelve el valor 9 en la caja de texto. Me.txtNmero.Text = InStr(6, Cadena, a) 5.2.5. Extraer e insertar caracteres a una cadena Se pueden extraer tantos caracteres como desee del principio de la cadena, del final de la cadena o de cualquier parte de la cadena, utilizando respectivamente las funciones: Left, Right y Mid. La sintaxis general se muestra a continuacin. Left(Cadena, Longitud) Right(Cadena, Longitud) Mid(Cadena, Inicio, Longitud) Longitud es un entero que define el nmero de caracteres que se extraern, e Inicio es la posicin inicial de extraccin dentro de la cadena. Veamos los siguientes ejemplos: Extraer los primeros seis caracteres a la izquierda de Cadena. Me.txtCadena.Text = Left(Cadena, 6) 'Devuelve Visual

Extraer los ltimos cinco caracteres a la derecha de Cadena. Me.txtCadena.Text = Right(Cadena, 5) 'Devuelve Basic Extraer los siete caracteres centrales de Cadena desde la posicin 3. Me.txtCadena.Text = Mid(Cadena, 3, 7)'Devuelve sual Ba Para insertar caracteres en una cadena se usa la funcin Mid de la siguiente manera: Mid(Cadena, 8, 6) = Studio Me.txtCadena.Text = Cadena 'Devuelve Visual Studio Se lee como asignar a la variable Cadena los 6 caracteres de Studio desde la posicin 8. As, la variable Cadena que contena el valor Visual Basic, adopta como nuevo valor Visual Studio, debido a la insercin, desde la posicin ocho, de los seis caracteres Studio. 5.2.6. Tratamiento de espacios en blanco En algunos casos, nos podemos encontrar con cadenas que contienen espacios en blanco innecesarios. Para eliminar los espacios al principio de la una cadena, se
74

Visual Basic 6.0

Unidad 5.- Funciones del intrnseca

usa Ltrim, para eliminar al final de la cadena se usa Rtrim, y para eliminar cualquier espacio al principio y al final de la cadena, se usa simplemente Trim. En el siguiente ejemplo se muestran estos tres casos: Cadena = Visual Basic txtCadena.Text = Ltrim(Cadena) 'Devuelve Visual Basic txtCadena.Text = Rtrim(Cadena) 'Devuelve Visual Basic txtCadena.Text = Trim(Cadena) 'Devuelve Visual Basic
Observe: No se eliminan los espacios intermedios; es decir, la separacin entre palabras de una frase.

Respecto a espacios en blanco, tambin existe la funcin Space, la cual permite crear cadenas de caracteres con slo espacios en blanco. En el siguiente ejemplo se crea una cadena de 7 espacios en blanco: txtCadena.Text = Space(7) 5.2.7. Convertir a nmero y a cadena Una cadena se puede convertir a nmero usando Val, y un nmero se puede convertir a cadena de caracteres usando Str. La funcin Str agrega un espacio en blanco al principio de la cadena. La funcin Val devuelve cero si su argumento es no numrico. Dim Nmero As Single Dim Cadena As String Nmero = 10.24 Cadena = Str(Nmero) Nmero = Val(Cadena) Cadena = A Nmero = Val(Cadena)

'Devuelve la cadena 10.24 'Devuelve el nmero 10,24 'Devuelve el nmero 0

5.2.8. Obtener cadenas de caracteres con formato La funcin Format permite controlar la forma en que aparecern los resultados numricos, de fecha o de carcter. La sintaxis general es la siguiente: Format(Nmero|Fecha|Cadena, Formato) Esta funcin acepta nmeros, fechas o cadenas de caracteres. El parmetro Formato permite definir la forma en que se devuelve el resultado de texto, y puede ser una constante de Visual Basic o un conjunto de caracteres especiales. a) Formatos numricos: para la presentacin de valores numricos se pueden utilizar constantes intrnsecas (ver Tabla 5.1) o smbolos especiales (ver Tabla 5.2) para definir el formato.
Constante General Number Currency Fixed Standard Percent Descripcin del formato El nmero tal y como es, sin separadores de millar. Separador de millar; muestra dos dgitos a la derecha del separador decimal. Al menos un dgito a la izquierda y dos dgitos a la derecha del separador decimal. Separador de millar, al menos un dgito a la izquierda y dos a la derecha del separador decimal. El nmero multiplicado por 100 con un signo de porcentaje (%) a la derecha.
75

Visual Basic 6.0

Unidad 5.- Funciones del intrnseca

Constante Scientific Yes/No True/False On/Off Smbolo 0 # , . % E-,E+

Descripcin del formato Utiliza la notacin cientfica estndar. Muestra No si el nmero es 0; de lo contrario, muestra Yes. Muestra False si el nmero es 0; de lo contrario, muestra True. Muestra Off si el nmero es 0; de lo contrario, muestra On.
Tabla 5.1.- Constantes de formato para nmeros

Descripcin del formato Muestra 0 as no exista dgito en esa posicin Muestra el dgito slo si existe en una posicin Lugar donde aparecer coma decimal. Lugar donde aparecer separado de miles. Multiplica por 100 el nmero y muestra el smbolo %. Muestra el nmero en notacin cientfica.
Tabla 5.2.- Smbolos especiales de formato para nmeros

Veamos los siguientes ejemplos: Cadena Cadena Cadena Cadena Cadena Cadena Cadena Cadena = = = = = = = = Format(1980.326, Format(1980.326, Format(1980.326, Format(1980.326, Format(1980.326, Format(1980.326, Format(1980.326, Format(1980.326, Fixed) Standar) Percent) Yes/No) 00000) #.000.#) #.0) #%) 'Devuelve 'Devuelve 'Devuelve 'Devuelve 'Devuelve 'Devuelve 'Devuelve 'Devuelve 1980,33 1.980,33 198032,6% S 01980 1.980,3 980,3 198033%

b) Formatos de fecha: al igual que para valores numricos, Visual Basic provee constantes intrnsecas (ver Tabla 5.3) y smbolos especiales (ver Tabla 5.4) para la presentacin de valores de fecha y hora.
Constante General Date Long Date Mdium Date Short Date Long Time Mdium Time Short Time Smbolo : / d dd ddd dddd w ww m mm mmm mmmm q y yy yyyy Descripcin Muestra la fecha y hora si estn disponibles en la expresin. Muestra da de la semana, da del mes, el mes y el ao. Muestra da del mes, el mes en tres letras y el ao. Muestra da del mes, el mes y el ao Muestra la hora, minutos y segundos con indicacin AM/PM Muestra la hora y minutos con indicacin AM/PM Slo muestra hora y minutos
Tabla 5.3.- Constantes de formato para fechas y horas

Descripcin Separador de hora, minutos y segundos Separador de da, mes y ao. Da del mes 1-31 Da del mes 01-31 Da de la semana Dom-Sb Da de la semana Domingo-Sbado Da de la semana 1-7 (Dom = 1) Semana del ao 1-54 Mes del ao 1-12 Mes del ao 01-12 Mes del ao Ene-Dic Mes del ao Enero-Diciembre Cuatrimestre del ao 1-4 Da del ao 1-366 Ao en dos dgitos 00-99 Ao en cuatro dgitos 0100-9999
76

Visual Basic 6.0

Unidad 5.- Funciones del intrnseca

Smbolo h hh n nn s ss AM/PM am/pm

Descripcin Hora del da 0-23 Hora del da 00-23 Minuto de la hora 0-59 Minuto de la hora 00-59 Segundo transcurrido 0-59 Segundo transcurrido 00-59 Muestra AM o PM segn corresponda Muestra am o pm segn corresponda
Tabla 5.4.- Smbolos para crear formatos de fecha y hora

Veamos los ejemplos siguientes: Cadena Cadena Cadena Cadena Cadena Cadena Cadena Cadena = = = = = = = = Format(#7/5/00#, Mdium Date) Format(#7/5/00#, Short Date) Format(#7/5/72#, ddd/mm/yyyy) Format(#20:05:12#, Mdium Time) Format(#20:05:12#, Long Time) Format(#20:05:12#, HH:nn) Format(#20:05:12#, HH:n) Format(#20:05:12#, HH:n:s) '07/May/2003 '07/05/03 'Dom/05/1972 '08:05 PM '08:05:54 PM '20:05 '20:5 '20:5:12

c) Formatos de cadena: mediante los cuales la funcin Format se puede usar para la presentacin de maysculas y minsculas segn los caracteres especiales > y < sin necesidad de cambiar el valor de la cadena de caracteres mediante las funciones UCase y LCase. Format no tiene funciones de conversin, es slo para presentacin. Cadena = Format(Simn Bolvar, >) Cadena = Format(Simn Bolvar, <) 5.2.9. Mapa de caracteres Para obtener el cdigo ASCII de un carcter, se usa la funcin Asc. Para obtener el carcter dado un cdigo ASCII se usa la funcin Chr. En el cdigo ASCII (ver Tabla 5.5) a cada valor numrico le corresponde un caracter. El smbolo indica que Windows no lo admite para la mayora de las fuentes predefinidas. La funcin Chr de cdigos ASCII 8, 9, 10 y 13 no devuelve caracter, sino que se traducen en borrado hacia atrs, tabulacin, avance de lnea y retorno de carro, respectivamente.
Asc 0 1 2 3 4 5 6 7 8 9 10 11 12 Chr Nulo [BACKSPAC E] [TAB] [AV. LINE] Asc 32 33 34 35 36 37 38 39 40 41 42 43 44 Chr [SPACE] ! " # $ % & ' ( ) * + ,
77

'SIMN BOLVAR 'simn bolvar

Asc 64 65 66 67 68 69 70 71 72 73 74 75 76

Chr @ A B C D E F G H I J K L

Asc 96 97 98 99 100 101 102 103 104 105 106 107 108

Chr ` a b c d e f g h i j k l

Visual Basic 6.0

Unidad 5.- Funciones del intrnseca

Asc 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Chr [ENTER]

Asc 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

Chr . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?

Asc 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95

Chr M N O P Q R S T U V W X Y Z [ \ ] ^ _

Asc 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

Chr m n o p q r s t u v w x y z { | } ~

Tabla 5.5.- Juego de caracteres ASCII de 0 a 127

5.3. Funciones numricas 5.3.1. Funciones matemticas Visual Basic provee todas las funciones necesarias para clculos directos o para la construccin de otras funciones matemticas (ver Tabla 5.6).
Funcin Sgn(nmero) Log(nmero) Exp(nmero) Sqr(nmero) Atn(nmero) Cos(ngulo) Sin(ngulo) Tan(ngulo) Abs(nmero) Descripcin Signo de un nmero Logaritmo natural de un nmero Potencia neperiana e Raz cuadrada de un nmero Trigonometra Arco tangente de un tringulo Trigonometra Coseno del un ngulo en radianes Trigonometra Seno de un ngulo en radianes Trigonometra Tangente de un ngulo en radianes Valor absoluto de un nmero
Tabla 5.6.- Funciones matemticas

5.3.2. Funciones de ajuste decimal Mientras que las funciones Fix e Int devuelven la parte entera de un nmero, la funcin Round redondea a una cantidad de decimales. La funcin Fix trunca la parte decimal de un nmero de manera indistinta. Para valores negativos la funcin Int ajusta al valor entero inmediato superior. Para valores positivos Fix e Int operan de la misma manera.
Funcin Fix(nmero) Int(nmero) Round(nmero, n) Devuelve Parte entera superior negativa de un nmero Parte entera inferior negativa de un nmero Nmero redondeado de un nmero con n decimales
Tabla 5.7.- Funciones de ajuste numrico

Veamos los siguientes ejemplos:


78

Visual Basic 6.0

Unidad 5.- Funciones del intrnseca

Nmero Nmero Nmero Nmero Nmero Nmero Nmero Nmero Nmero Nmero Nmero Nmero Nmero

= = = = = = = = = = = = =

Fix(99,8) Fix(-99,8) Fix(-99,2) Int(99,8) Int(-99,8) Int(-99,2) Round(99.8,0) Round(-99.8,0) Round(-99.2,0) Round(99.56,0) Round(99.56,1) Round(99.56,2) Round(99.56,3)

'Devuelve 99 'Devuelve -99 'Devuelve -99 'Devuelve 99 'Devuelve -100 'Devuelve -100 'Devuelve 100 'Devuelve -100 'Devuelve -99 'Devuelve 100 'Devuelve 99.6 'Devuelve 99.56 'Devuelve 99.560

5.3.3. Funcin de nmero aleatorio La funcin Rnd devuelve un nmero aleatorio menor que 1, pero mayor o igual a cero. Rnd se usa en conjuncin con la instruccin Randomize, la cual inicializa el generador de nmeros aleatorios para devolver valores entre 0 y 1. Para obtener un rango de nmeros aleatorios enteros entre un lmite Inferior y Superior se puede aplicar la siguiente frmula o procedimiento: Randomize 'Instruccin que inicializa Rnd Aleatorio = Int((Superior-Inferior + 1)*Rnd + Inferior) 5.4. Funciones de fecha y hora 5.4.1. Obtener la fecha y hora del sistema La funcin Date devuelve la fecha del sistema, Time devuelve la hora y Now devuelve tanto la fecha como la hora del sistema. A menudo se utiliza el evento del control Timer para mostrar fechas y horas. En el ejemplo siguiente suponga que la fecha del sistema es 12 de octubre del ao 2000 y son las 6:45 pm. Private Sub Timer1_Timer() lblFecha.Caption = Date 'Devuelve #12/10/2000# lblHora.Caption = Time 'Devuelve #18:45:00# lblHoy.Caption = Now 'Devuelve #12/10/2000 18:45:00# End Sub En combinacin con la funcin Format se pueden establecer los campos de fecha y hora que se desean visualizar. 5.4.2. Establecer la fecha y hora del sistema Para establecer la fecha y hora del sistema se utilizan Date y Time como instrucciones. Date = #12/10/2003# Time = #18:10:00# 5.4.3. Realizar clculos con fechas y horas a) Calcular una fecha dado un intervalo de tiempo
79

Visual Basic 6.0

Unidad 5.- Funciones del intrnseca

Se pueden calcular fechas futuras o pasadas a una fecha de referencia, agregando o sustrayendo intervalos de tiempo en das, meses, aos, horas, segundos, etc., a la fecha de referencia. Cuando utilizamos el trmino fechas, nos referimos a instantes de tiempo; o sea, pueden ser desde segundos hasta aos. Para obtener una fecha dado un intervalo de tiempo, se usa la funcin DateAdd: FechaFutura = DateAdd(Intervalo, Nmero, FechaRef) FechaPasada = DateAdd(Intervalo,-Nmero, FechaRef) El argumento Intervalo es una cadena de caracteres que indica el tipo de intervalo de tiempo para el clculo (ver Tabla 5.8); es decir, si el clculo se efecta en das, meses, horas, etc.
Intervalo Yyyy Q M Y D W Ww H N S Descripcin Clculo en Aos Clculo en Trimestres Clculo en Meses Clculo en Das Clculo en Das Clculo de Das de la semana Clculo en Semanas Clculo en Horas Clculo en Minutos Clculo en Segundos
Tabla 5.8.- Valores del parmetro Intervalo de funciones de fecha y hora

El argumento Nmero es un nmero entero que representa el nmero de intervalos de tiempo seleccionado con Intervalo. Por ejemplo, para calcular la fecha de vencimiento de facturas a treinta das, se puede escribir el cdigo: Dim Fecha As Date Fecha = FechaDeFactura FechaVencimineto = DateAdd(d, 30, Fecha) Para conocer fechas pasadas, suponga que desea conocer la fecha de una mercanca la cual tiene 10 meses en almacn: FechaArribo = DateAdd(m, -10, Date) Observe que se recurre a la funcin Date para obtener la fecha actual del sistema, y as utilizarla como argumento. b) Calcular el intervalo de tiempo entre dos fechas Este tipo de clculo es muy til para determinar la duracin, el retardo o la cantidad de tiempo transcurrido entre dos fechas u horas. Para este efecto se usa la funcin DateDiff: Duracin = DateDiff(Intervalo, Anterior, Posterior) El parmetro Intervalo se regir por la tabla 5.8 ya que tambin es una cadena de caracteres que indica el tipo de intervalo de tiempo. El argumento Anterior es un literal de fecha correspondiente a un momento anterior al valor de fecha del argumento Posterior. Si el argumento Anterior corresponde a un momento posterior, la funcin DateDiff devuelve un nmero
80

Visual Basic 6.0

Unidad 5.- Funciones del intrnseca

negativo y no se produce error. Por ejemplo, para calcular la cantidad de das de vida, se puede usar la siguiente lnea de cdigo: Das = DateDiff(d, FechaNacimiento, Date) La variable FechaNacimiento contiene la fecha de nacimiento, y Date es la funcin vista anteriormente que devuelve la fecha actual del sistema. Veamos otros ejemplos, donde se define la variable D como entero y se aplica la funcin DateDiff a fechas establecidas: Dim D = D = D = D = D = D As Integer DateDiff(yyyy, #31/12/1999#, #31/12/2000#) DateDiff(m, #31/12/1999#, #31/12/2000#) DateDiff(w, #31/12/1999#, #31/12/2000#) DateDiff(ww, #31/12/1999#, #31/12/2000#) DateDiff(d, #31/12/1999#, #31/12/2000#) '1 ao '12 meses '52 das '53 sem. '366 das

Observacin: A diferencia de la funcin DateAdd, que devuelve una fecha, DateDiff devuelve un nmero entero.

c) Calcular parte de una fecha En algunos casos es necesario conocer el valor numrico de slo parte de una fecha. Utilizando la funcin DatePart se puede calcular el nmero del da, mes, ao, trimestre o semana de una fecha, segn el valor del argumento Intervalo: ParteDeFecha = DatePart(Intervalo, Fecha) Veamos los siguientes ejemplos, donde una vez ms se ha definido la variable D como entero para albergar el resultado de DatePart: Dim D = D = D = D = D = D As Integer DatePart(yyyy, #31/12/1999#) DatePart(m, #31/12/1999#) DatePart(w, #31/12/1999#) DatePart(ww, #31/12/1999#) DatePart(d, #31/12/1999#) 'Devuelve 'Devuelve 'Devuelve 'Devuelve 'Devuelve 1999 12 6 (viernes) 53 31

Adems de DatePart, Visual Basic dispone de un conjunto de funciones destinadas a obtener parte de una fecha u hora, sin necesidad del parmetro Intervalo. Estas funciones se detallan en la tabla siguiente:
Funcin Year(fecha) Month(fecha) Day(fecha) WeekDay(fecha) Hour(hora) Minute(hora) Second(hora) WeekDayName(fecha) Devuelve la parte de fecha Ao de 100 a 9999 Mes de 1 a 12 Da de 1 a 31 Da de 1 a 7 Hora de 0 a 23 Minuto de 0 a 59 Segundo de 0 a 59 Da de Lunes a Domingo
Tabla 5.9.- Funciones que devuelven parte de una fecha

81

Visual Basic 6.0

Unidad 5.- Funciones del intrnseca

5.4.4.

Devolver fechas y horas

Existen funciones para convertir nmeros o cadenas en fechas. Las funciones DateSerial y TimeSerial conforman una fecha a partir de valores numricos enteros correspondientes a da, mes, ao, hora, minuto y segundo. Fecha = DateSerial(Da, Mes, Ao) Hora = TimeSerial(Hora, Min, Seg) Por su parte, las funciones DateValue y TimeValue convierten una cadena con formato de fecha y hora a un tipo de dato Date. Fecha = DateValue(Cadena) Hora = TimeValue(Cadena) Veamos los ejemplos: Dim Fecha As Date, Hora As Date Fecha = DateSerial(12, 10, 3) Fecha = DateValue(12/10/2003) Hora = TimeSerial(12, 10, 3) Hora = TimeValue(12:10:3) 5.4.5. Cronometrar procesos Los procesos en Visual Basic se pueden cronometrar utilizando una funcin que devuelve el nmero de segundos del sistema transcurridos desde la medianoche. Esta funcin se llama Timer y se utiliza segn la siguiente estructura: Dim Inicio, Fin As Long Dim DuracinDelProceso As Integer Inicio = Timer {Proceso} Fin = Timer DuracinDelProceso = Fin Inicio La funcin Timer tambin suele usarse para hacer una pausa temporal en la secuencia del programa. Para este caso es imperante utilizar la instruccin DoEvents, mediante la cual, durante la pausa causada en un ciclo, el programa no acapara los recursos del sistema. Veamos esto con un ejemplo donde se crea un retardo de 20 segundos. Dim Inicio As Long Inicio = Timer Do While Timer < (Inicio + 20) DoEvents Loop 5.5. Funciones de Objetos 5.5.1. Cuadro de dilogo de entrada InputBox La funcin InputBox presenta un cuadro de dilogo (ver Figura 5.5) con una leyenda, dos botones de comando (Aceptar, Cancelar) y una Caja de texto. Si el usuario hace clic en el botn Aceptar, la funcin devuelve el contenido de la Caja de Texto como un valor tipo cadena, y si el usuario hace clic sobre el botn
82

'Devuelve 'Devuelve 'Devuelve 'Devuelve

#12/10/2003# #12/10/2003# #12:10:03# #12:10:03#

Visual Basic 6.0

Unidad 5.- Funciones del intrnseca

Cancelar, la funcin devuelve una cadena vaca (). La sintaxis general es la siguiente: InputBox(Leyenda, Ttulo, Texto, X, Y)

Figura 5.5.- Cuadro de dilogo InputBox

Los argumentos X y Y especifican la posicin en la que aparecer el cuadro de dilogo. X y Y son opcionales, y si no se especifican, el cuadro de dilogo aparece en el centro de la pantalla. El parmetro Texto tambin es opcional y por lo general no se coloca, ya que se supone que la caja de texto es para que el usuario escriba los datos a procesar por la aplicacin. 5.5.2. Cuadro de dilogo de mensajes MsgBox La funcin MsgBox permite mostrar un cuadro de dilogo con un mensaje especfico y puede devolver valores tipo Integer de acuerdo a su configuracin y al botn que reciba el clic del usuario. La sintaxis general es la siguiente: MsgBox(Mensaje, Botones, Ttulo) Se puede utilizar MsgBox como instruccin cuando no se espera valor de retorno: MsgBox Mensaje, Botones, Ttulo

Figura 5.6.- Cuadro de dilogo MsgBox

El argumento Botones es el resultado de una suma binaria de enteros que definen la cantidad y tipo de botones del cuadro de dilogo, as como tambin el icono a mostrar. Los posibles valores que se pueden asignar al parmetro Botones, estn disponibles en forma de constantes intrnsecas (ver Tabla 5.10).
Constante VbOKOnly VbOKCancel VbAbortRetryIgnore VbYesNoCancel VbYesNo VbRetryCancel VbCritical Valor 0 1 2 3 4 5 16 Descripcin Muestra solamente el botn Aceptar. Muestra los botones Aceptar y Cancelar. Botones Anular, Reintentar e Ignorar. Muestra a los botones S, No y Cancelar. Muestra a los botones S y No. Muestra a los botones Reintentar y Cancelar. Muestra el icono de mensaje crtico.
83

Visual Basic 6.0

Unidad 5.- Funciones del intrnseca

Constante VbQuestion VbExclamation VbInformation

Valor 32 48 64

Descripcin Muestra el icono de pregunta de advertencia. Muestra el icono de mensaje de advertencia. Muestra el icono de mensaje de informacin.
Tabla 5.10.- Estilos de cajas de mensajes MsgBox

A continuacin veremos algunos ejemplos de cuadros de mensajes con diferentes estilos, como resultado de su respectiva lnea de cdigo. a) Mensaje de informacin para slo aceptar MsgBox "Ejemplo 1", vbInformation, "Informacin..."

Figura 5.7.- Cuadro de mensaje de Informacin

b) Mensaje crtico para slo aceptar MsgBox "Ejemplo 2", vbCritical, "Crtico..."

Figura 5.8.- Cuadro de mensaje de Crtico

c) Mensaje de exclamacin para slo aceptar MsgBox "Ejemplo 3", vbExclamation, "Exclamacin..."

Figura 5.9.- Cuadro de mensaje de Exclamacin

d) Mensaje de pregunta para slo aceptar MsgBox "Ejemplo 4", vbQuestion, "Pregunta..."

84

Visual Basic 6.0

Unidad 5.- Funciones del intrnseca

Figura 5.10.-Cuadro de mensaje de Pregunta

e) Mensaje sin icono para Si o No MsgBox "Ejemplo 5", vbYesNo, "Si y No..."

Figura 5.11.-Cuadro de mensaje Si y No

f)

Mensaje sin icono para Aceptar o Cancelar MsgBox "Ejemplo 6", vbOkCancel, "Aceptar y Cancelar..."

Figura 5.12.-Cuadro de mensaje Aceptar y Cancelar

g) Mensaje con icono para Aceptar o Cancelar MsgBox "Ejemplo 7", vbOkCancel + vbCritical, "Aceptar y_ Cancelar, Crtico..."

Figura 5.13.-Cuadro de mensaje Crtico Aceptar y Cancelar

Por otra parte, el cuadro de mensaje como toda funcin devuelve valores. Los valores devueltos por un cuadro de mensaje se detallan en la Tabla 5.11.
Constante vbOK vbCancel vbAbort vbRetry Valor 1 2 3 4 Si se hace clic en el botn Aceptar Cancelar Anular Reintentar
85

Visual Basic 6.0

Unidad 5.- Funciones del intrnseca

Constante vbIgnore vbYes vbNo

Valor 5 6 7

Si se hace clic en el botn Ignorar S No


Tabla 5.11.- Valores devueltos por MsgBox

Por ejemplo, se puede preguntar al usuario, antes de cerrar una ventana, si realmente desea cerrar la ventana: Private Sub Form_QueryUnload(Cancel As Integer, UnloadM) If MsgBox("Cerrar...?", vbYesNo)=vbNo Then Cancel=1 End Sub

86

Visual Basic 6.0

Unidad 6.- Archivos

Unidad 6
Archivos
El secreto del xito es la constancia en el propsito .- Disraeli

6.1. Nociones bsicas 6.1.1. Unidades Como es de nuestro conocimiento, los sistemas de cmputo incluyen en su arquitectura unidades de almacenamiento o memorias donde se albergan los unos y ceros que representan instrucciones o datos para el microprocesador. Las memorias se clasifican en memorias primarias y memorias secundarias, de acuerdo a la forma de conexin con la unidad central de procesamiento (CPU) o microprocesador. Las memorias primarias corresponden a los circuitos integrados ROM y RAM en sus diferentes versiones que se conectan al CPU a travs de los buses internos impresos en la placa o tarjeta madre. Las memorias ROM contienen programas y tablas de datos esenciales para la operacin general del sistema, y no es posible escribir en ellas. A diferencia de las ROM, las memorias RAM permiten ser escritas de parte del usuario con la informacin que actualmente desea procese la CPU, pero con la gran desventaja que el almacenamiento es voltil; es decir, la informacin se pierde sino se mantiene energizado al equipo. De esta manera surgen las unidades de almacenamiento secundario, las cuales se encuentra fuera de la placa base, se pueden escribir de parte del usuario, y no requieren de energa para mantener la informacin. Dentro de esta categora se encuentran la unidades de disco magnticas, ya sean flexibles (por lo general las unidades A y B de 3 pulgadas) o rgidas (por lo general el disco duro C). Tambin se incluyen las unidades de disco lgicas o de red (H, J, K,), las unidades de disco ptico (D, E) y las unidades de chip de memoria porttil. En la Unidad 4, objetivo 4.1 tratamos el tema de administracin de la memoria primaria RAM; y a continuacin conoceremos sobre la administracin de la memoria secundaria para el almacenamiento de informacin permanente o no voltil; de all su importancia.

87

Visual Basic 6.0

Unidad 6.- Archivos

Figura 6.1.- Memorias de un sistema de cmputo

6.1.2. Archivos Los archivos se pueden definir como un conjunto de bytes relacionados mediante un identificador y almacenados en una unidad de disco. El sistema operativo define la estructura mediante la cual los archivos son etiquetados, almacenados y organizados en el disco, para lo cual crea y mantiene en cada unidad de disco a su disposicin, una tabla de asignacin de archivos conocida como FAT (File Allocation Table), que acta como un ndice si la unidad fuera un libro. La FAT es una tabla que contiene el estatus de varios segmentos, de espacio de disco, usados para el almacenamiento de archivos. Cada vez que se copian, borran o modifican archivos, la FAT es actualizada automticamente por el sistema operativo. En las nuevas versiones de Windows la FAT se ha reemplazado por estructuras ms eficientes como FAT32 y NTSF. Los archivos son decodificados o interpretados por otros archivos con instrucciones llamados programas, para lo cual se requiere transferir o copiar la informacin del archivo desde la memoria secundaria hasta la memoria primaria RAM. La accin de abrir un archivo consiste en crear una copia del archivo en memoria RAM para su manipulacin directa de parte del microprocesador. Al cerrar un archivo se libera toda traza del mismo de la memoria RAM, pero la memoria secundaria permanece intacta si no se guardan los cambios. Si se toma la previsin de guardar los cambios, los cuales se efectan en memoria RAM, la informacin es actualizada, transferida o copiada a la unidad de disco correspondiente. Visual Basic permite manipular tres tipos de archivos segn el modo de acceso: secuencial, aleatorio y binario. Los archivos secuenciales, carecen de estructura y deben ser recorridos en su totalidad para acceder a un dato intermedio. Los archivos aleatorios se organizan en registros de longitud fija, por lo que se puede acceder directamente a cualquier dato intermedio. Los archivos binarios tambin permiten acceso directo, pero los registros son de longitud variable. En esta unidad slo trataremos a los archivos de acceso secuencial y aleatorio.
La Corua, 2003 Seores CompuSoft, S.A. Ciudad.Estimados seores
Figura 6.2.- Archivo de documento de Word

6.1.3. Directorios Los directorios, o carpetas como tambin se les conocen, representan una estructura organizativa soportada por la mayora de los sistemas operativos que
88

101111010 101111010 101000011 100110111 101111111 100111010 010011111

Microsoft Word

Visual Basic 6.0

Unidad 6.- Archivos

permite agrupar archivos en una unidad de disco. Windows, como sistema operativo, soporta esta facilidad. En lugar de almacenar todos los archivos en la raz de la unidad, el usuario puede crear mltiples directorios para contener grupos de archivos, y en cada directorio puede crear otros subdirectorios para un agrupamiento interno, y as sucesivamente.
Archivos Archivos Directorio 1 Archivos Subdirectorio 1 Directorio 2 Unidad de disco Archivos Subdirectorio 2 Archivos Raz
Figura 6.3.- Estructura de directorios y archivos

6.2. Instrucciones de archivos 6.2.1. Instrucciones para manipular directorios a) Establecer la unidad activa Cuando una computadora se enciende, esta ejecuta un programa primario almacenado en ROM o BIOS, el cual contiene las directivas bsicas de inicializacin. El proceso de inicializacin incluye la bsqueda del programa del Sistema Operativo en una unidad de memoria secundaria, es decir, en un disco local o de red. Una vez detectado el sistema operativo, se procede a la carga o ejecucin del mismo; y se establece inicialmente como unidad de disco activa, aquella donde se encuentra el sistema operativo. La unidad activa es donde se crean, borran, listan o modifican archivos y directorios. Para cambiar la unidad activa, Visual Basic cuenta con la instruccin ChDrive. Por ejemplo, suponga que desea cambiar a la unidad de disco A: ChDrive A:\ b) Establecer el directorio activo Tambin se puede establecer el directorio activo, con la instruccin ChDir: ChDir directorio 'cambia directorio

Por ejemplo, si desea establecer Mis documentos como directorio activo: ChDir C:\Mis documentos c) Crear y eliminar directorios Los directorios o carpetas pueden ser creados y borrados mediante las siguientes instrucciones. Para borrar un directorio, este debe ser previamente vaciado. MkDir directorio RmDir directorio 'crea directorio 'borra directorio

6.2.2. Instrucciones para manipular archivos a) Abrir o crear archivos

89

Visual Basic 6.0

Unidad 6.- Archivos

Para abrir o crear un archivo se utiliza la funcin Open con la sintaxis siguiente: Open archivo For tipo Access acceso As #NmeroDeArchivo El parmetro archivo es una cadena que representa la ruta y el nombre de un archivo. tipo es una palabra reservada que indica el tipo de archivo a abrir o crear, y el modo de apertura, segn la tabla siguiente. El acceso se refiere al tipo de acceso; es decir, el tipo de operaciones que se puede efectuar sobre el archivo: lectura (Read), escritura (Write), y lectura-escritura (ReadWrite). Cuando se abre o crea un archivo, este se identifica en el sistema mediante un nmero entero, este nmero es el parmetro NmeroDeArchivo precedido por el signo #.
Tipo Append Input Output Random Binary Descripcin Abre o crea un archivo de texto para agregarle informacin. Abre un archivo de texto para lectura. Si el archivo no existe, se produce un error. Crea un archivo de texto. Si el archivo existe, este se borra para dar lugar al nuevo. Abre o crea un archivo de acceso aleatorio. Archivo directo a registros de longitud fija. Abre o crea un archivo binario. Archivo de longitud variable por registro.
Tabla 6.1.- Especificaciones del parmetro Tipo de la instruccin Open

b) Cerrar archivos abiertos Una vez que se han abierto archivos con la funcin Open, estos se pueden cerrar mediante la instruccin Close. Close #5 Close abiertos c) Copiar archivos Para copiar un archivo, este debe estar cerrado. La instruccin es FileCopy: FileCopy archivo_origen, archivo_destino Para copiar el archivo Carta.doc desde la unidad A:\ hasta Mis documentos en la unidad C:\ con el nombre de Pedido.doc, se utilizara el siguiente cdigo: FileCopy A:\Carta.doc, C:\Mis documentos\Pedido.doc Los comodines dispuestos inicialmente por el sistema operativo MSDOS, como el asterisco y el signo de interrogacin, mantienen vigencia en Microsoft Windows, y se pueden utilizar desde Visual Basic. Estos comodines definen un patrn de bsqueda que facilita la operacin por lotes sobre un conjunto de archivos. El asterisco indica la presencia o no de cualquier cantidad de caracteres en el nombre de los archivos; y el signo de interrogacin indica la presencia de un caracter cualquiera obligatorio en una posicin especfica en el nombre del archivo. Por ejemplo, suponga que desea copiar todos los archivos .doc que comiencen con las letras Car desde la unidad A:\ hasta la carpeta C:\Mis documentos: FileCopy A:\Car*.doc, C:\Mis documentos\
90

'Cierra el archivo abierto nmero 5 'Cierra todos los archivos

Visual Basic 6.0

Unidad 6.- Archivos

De esta manera se copiarn los archivos Carta.doc, Carros.doc, Cario.doc, FileCopy A:\C?????.*, C:\Mis documentos\ As slo se copiaran los archivos Carros.doc y Cario.doc. Adems podran copiarse Cremas.xls o Comida.ppt, ya que la extensin es un asterisco. d) Renombrar archivos Tambin es posible cambiar el nombre de un archivo utilizando el siguiente cdigo: Name nombre_viejo As nombre_nuevo Por ejemplo, para cambiar el nombre de Carta.doc en la unidad A:\ por Pedido.doc, la instruccin se utilizara de la siguiente manera: Name A:\Carta.doc As A:\Pedido.doc e) Borrar archivos Finalmente, para eliminar o borrar un archivo existente del disco se utiliza Kill: Kill nombre_archivo
Observacin: Las instrucciones para copiar, renombrar y eliminar archivos, se deben aplicar solamente a archivos cerrados; de lo contrario, se produce un error.

6.3. Funciones de archivos 6.3.1. Funciones para manipular directorios a) Contenido de un directorio Para ver el primer archivo contenido en un directorio se puede usar la funcin Dir: Archivo = Dir(ruta) El parmetro ruta es una cadena que especifica la unidad y el directorio cuyo contenido desea listar o examinar. La funcin Dir devuelve una cadena con el nombre del archivo encontrado segn la ruta especificada. Si en la ruta especificada no se encuentran archivos, la funcin Dir devuelve una cadena vaca. Para listar todo el contenido de un directorio, se utiliza la funcin Dir, pero sin el parmetro de ruta. Por ejemplo, si se desea listar los archivos con extensin .txt que se encuentran en el directorio C:\Mis documentos en una caja de lista lstArchivo, se pueden usar las siguientes lneas de cdigo en algn procedimiento: Dim Archivo As String Archivo = Dir(C:\Mis documentos\*.txt) Do While Archivo <> Me.lstArchivo.AddItem Archivo Archivo = Dir Loop
91

Visual Basic 6.0

Unidad 6.- Archivos

Observacin: La funcin Dir se usa sin argumentos para repetirse con la ltima ruta especificada.

b) Directorio activo Como vimos anteriormente, la unidad y el directorio activo se establecen mediante las instrucciones ChDrive y ChDir. Es posible visualizar el directorio activo de una unidad con la funcin CurDir segn la siguiente sintaxis: Dim Directorio As String Directorio = CurDir(D:\) 6.3.2. Funciones de archivos cerrados a) Tamao de un archivo cerrado La funcin FileLen devuelve el tamao en bytes de un archivo. El valor devuelto es tipo Long. El nombre del archivo es un parmetro tipo cadena de caracteres que podra incluir la ruta del archivo. Por ejemplo se puede conocer el tamao del archivo Win.ini mediante la siguiente instruccin: Tamao = FileLen(archivo) Dim Tamao As Long Tamao = FileLen(C:\Windows\Win.ini) b) Nmero disponible de archivo Si se intenta abrir un archivo especificando un nmero ya utilizado por otro archivo abierto, se producir un error. La funcin FreeFile permite obtener el prximo nmero de archivo disponible, y as se evita el error en tiempo de ejecucin. Dim NmeroDeArchivo As Integer NmeroDeArchivo = FreeFile 6.3.3. Funciones de archivos abiertos a) Tamao de un archivo abierto Una vez que se ha abierto un archivo, no es posible utilizar FileLen para determinar el tamao del archivo, ya que slo se puede hacer referencia a este mediante un nmero de archivo. Visual Basic proporciona la funcin LOF para determinar el tamao de un archivo abierto y se usa de la siguiente manera: Dim Tamao As Long Tamao = LOF(NmeroDeArchivo) En archivos de acceso aleatorio, donde la longitud de los registros es fija, la funcin LOF permite recalcular la cantidad de registros dentro del archivo cada vez que se agregan o eliminan registros. CantidadDeReg = LOF(NmeroDeArchivo) / LongitudDeUnReg b) Indicador de final de archivo La funcin EOF devuelve un valor lgico True si el puntero se encuentra al final del archivo. El puntero es la posicin de lectura o escritura dentro del archivo. Al abrir un archivo, el puntero se ubica al principio del archivo; luego,
92

Visual Basic 6.0

Unidad 6.- Archivos

debido a instrucciones de lectura o escritura, se desplaza a lo largo del mismo, y la funcin (EOF) nos indica si se ha alcanzado la posicin del registro final. Esta funcin es muy til para efectuar la lectura completa de un archivo, ya que es la condicin que se evala para detener el ciclo de instrucciones de lectura. Dim FinDeArchivo As Boolean FinDeArchivo = EOF(NmeroDeArchivo) 6.4. Objetos de archivos 6.4.1. Caja de lista de archivos (Clase: FileListBox) El control FileListBox encuentra y muestra los archivos contenidos en un directorio determinado en tiempo de ejecucin, mediante una lista de los archivos seleccionados por atributo o patrn. Mencionaremos algunas de las propiedades y eventos ms importantes de este objeto. La propiedad FileName devuelve el nombre del archivo seleccionado de la caja de lista de archivos. La propiedad Path determina la ruta (unidad y directorio) de los archivos que se muestran. Se dispone de las propiedades List, ListIndex, ListCount, etc., de las cajas de lista estudiadas anteriormente. Adems se cuenta con propiedades Booleanas que funcionan como un filtro, y determinan si se muestran o no los archivos segn su atributo, como son: Archive (Modificado), Hidden (Oculto), Normal (Normal), ReadOnly (Slo Lectura), y System (del Sistema). Otra de las propiedades de las cajas de lista de archivos, es la propiedad Pattern, que define el patrn de bsqueda. Si la propiedad Pattern se establece, por ejemplo a *.doc o *.txt, en la caja de lista slo se mostrarn los archivos de documento o los archivos de texto. Inicialmente Pattern es igual a *.*, permitiendo que se muestren todos los archivos. Al producir un Click en la lista, se selecciona uno de sus elementos de la lista, el cual se corresponde con un archivo. El nombre del archivo seleccionado se puede capturar mediante la propiedad FileName. Tambin son importantes los eventos PathChanged y PatternChanged. Estos dos ltimos se ejecutan al cambiar respectivamente la ruta y el patrn de bsqueda. 6.4.2. Caja de lista de directorio (Clase: DirListBox) La caja de lista de directorio muestra los directorios y subdirectorios de una unidad determinada en forma de rbol de jerarqua. La propiedad Path se refiere al nombre del directorio seleccionado en la caja de lista. Estn disponibles las propiedades de cajas de lista convencionales List, ListIndex, ListCount, etc. El evento Change es utilizado para actualizar el contenido de la caja de lista de archivos mediante su propiedad Path. Private Sub DirListBox1_Change() Me.FileListBox1.Path = Me.DirListBox1.Path End Sub 6.4.3. Caja de lista de unidades (Clase: DriveListBox) El control grfico muestra y permite seleccionar la unidad de disco activa. La propiedad Drive de este control determina la unidad de disco. Se pueden manipular las propiedades de cajas de lista List, ListIndex, ListCount, etc. El
93

Visual Basic 6.0

Unidad 6.- Archivos

evento Change es utilizado para actualizar el contenido de las cajas de lista de directorio al establecer su propiedad Path. Private Sub DriveListBox1_Change() Me.DirListBox1.Path = Me.DriveListBox1.Drive End Sub En la figura siguiente se muestran los tres controles de archivo para acceder a las unidades de almacenamiento secundario.
DriveListBox

FileListBox

DirListBox
Figura 6.4.- Objetos de archivos.

6.4.4. Cuadro de dilogo comn (Clase: CommonDialog) El control ActiveX de la clase CommonDialog proporciona un conjunto de cuadros de dilogo estndar para realizar operaciones como abrir y guardar archivos, establecer las opciones de impresin y seleccionar colores y fuentes. Este dilogo comn proporciona una interfaz entre Visual Basic y las funciones de la biblioteca de vnculos dinmicos Commdlg.dll de Microsoft Windows. Para crear un cuadro de dilogo utilizando este control, el archivo commdlg.dll debe encontrarse en el directorio SYSTEM de Microsoft Windows. a) Insertar el objeto CommonDialog Para usar el control CommonDialog en una aplicacin, previamente se debe agregar a la caja de herramientas. Esto se puede hacer seleccionando el men Proyecto | Componentes o presionando Ctrl+T. De esta manera aparece el cuadro de dilogo Componentes, donde se debe activar la casilla correspondiente a Microsoft Common Dialog Control 6.0 (ver Figura 6.5). El Common Dialog no tiene representacin grfica en tiempo de diseo, ya que slo aparece en tiempo de ejecucin mediante mtodos que veremos mas adelante.

94

Visual Basic 6.0

Unidad 6.- Archivos

Figura 6.5.- Dilogo Componentes (Control Dilogo Comn)

b) Propiedades del dilogo comn


Propiedad CancelError DefaultExt DialogTitle FileName FileTitle Filter Flags InitDir MaxFileSize Descripcin Si genera o no un error al usuario presionar el botn Cancelar. Extensin predeterminada de nombre de archivo. Ttulo del cuadro de dilogo. Nombre y ruta del archivo seleccionado que se va a abrir o guardar. Nombre (sin la ruta) del archivo seleccionado que se va a abrir o guardar. Filtros presentados en el cuadro de lista Tipo de un cuadro de dilogo. Opciones para mostrar u ocultar elementos del cuadro de dilogo. Ruta inicial de ubicacin de los archivos. Tamao mximo del nombre de archivo abierto mediante el control.
Tabla 6.2.- Propiedades del objeto Dilogo Comn

En tiempo de ejecucin, cuando el usuario elige un archivo, la propiedad FileName se utiliza para obtener el nombre de archivo seleccionado. Se puede establecer la propiedad Filter de forma que el cuadro de dilogo presente slo ciertos tipos de archivos. Filter es una cadena de caracteres con la sintaxis siguiente: "descripcin1 |filtro1 |descripcin2 |filtro2..." Por ejemplo, para mostrar slo archivos de texto .txt, y de imgenes .bmp e .ico: "Archivos de texto |*.txt |Imgenes e iconos |*.bmp;*.ico" La propiedad Flags se puede usar para cambiar varios elementos del cuadro de dilogo, as como para avisar al usuario cuando pueden producirse ciertas situaciones, tal como la escritura en un archivo existente, o la apertura de uno
95

Visual Basic 6.0

Unidad 6.- Archivos

inexistente. A continuacin se muestran algunos de los valores que puede adoptar la propiedad Flags (ver Tabla 6.3).
Constante cdlOFNReadOnly cdlOFNOverwritePrompt cdlOFNHideReadOnly cdlOFNNoChangeDir cdlOFNHelpButton cdlOFNAllowMultiselect cdlOFNPathMustExist cdlOFNFileMustExist cdlOFNCreatePrompt cdlOFNNoReadOnlyReturn cdlOFNExplorer Descripcin Hace que la casilla de verificacin Slo lectura est activada inicialmente. El dilogo Guardar como, genera un mensajes si el archivo ya existe. Oculta la casilla de verificacin Slo lectura. Restablece como directorio al que lo era en el momento de abrirse el dilogo. Hace que el cuadro de dilogo presente el botn Ayuda. El cuadro de lista Nombre de archivo permite varias selecciones. Slo se pueden escribir rutas de acceso vlidas o existentes. Slo puede introducir nombres de archivos existentes. El cuadro de dilogo requiere la creacin de un archivo que no exista. El archivo devuelto no tendr establecido el atributo de Slo lectura. Usa la plantilla del cuadro de dilogo Abrir archivo de tipo Explorador.
Tabla 6.3.- Valores de la propiedad Flags.

c) Mtodos de dilogos comn El tipo de cuadro de dilogo presentado est determinado por el tipo de mtodo del objeto. En tiempo de ejecucin se presenta un cuadro de dilogo, cuando se invoca el mtodo apropiado; en tiempo de diseo, el control CommonDialog se presenta como un icono dentro del formulario. El CommonDialog puede presentar distintos cuadros de dilogo utilizando los siguientes mtodos.
Mtodo ShowOpen ShowSave ShowColor ShowFont ShowPrinter ShowHelp Cuadro de dilogo presentado Abrir Guardar como Color Fuente Imprimir u Opciones de impresin Invoca el motor de Ayuda de Windows
Tabla 6.4.- Mtodos del objeto Dilogo Comn.

En el siguiente ejemplo, se muestra como se invoca el cuadro de dilogo Abrir. Private Sub cmdBotn_Click() Dim Archivo As String, Dim NmeroDeArchivo As Integer Me.Dilogo.CancelError = False Me.Dilogo.Filter = "Office|*.doc;*.xls;*.ppt" Me.Dilogo.Flags = cdlOFNHideReadOnly Me.Dilogo.ShowOpen Archivo = Me.Dilogo.FileName If Archivo <> Then NmeroDeArchivo = FreeFile Open Archivo For Output As #NmeroDeArchivo End If End Sub

96

Visual Basic 6.0

Unidad 6.- Archivos

6.5. Archivos secuenciales 6.5.1. Abrir archivos secuenciales Los archivos secuenciales se pueden abrir de tres maneras, segn el parmetro tipo de Open, y para archivos secuenciales puede ser Input, Output o Append. (1) Input se usa para abrir archivos existentes, a ser ledos, en el sistema. Si el archivo que intenta abrir no existe, se produce un error en tiempo de ejecucin. (2) Output es para crear archivos nuevos en el sistema a ser escritos. Es exclusivo para crear e ingresar datos a archivos nuevos. Si el archivo existe, este se sobrescribe. (3) Append se usa para abrir archivos existentes o no en el sistema con el objeto de agregarle informacin sin sobrescribirlos. Si el archivo a abrir no existe, se crea como archivo nuevo; pero si existe, slo se abre y se dispone para aadirle ms datos de los que posee. 6.5.2. Leer archivos secuenciales Para leer archivos secuenciales, estos se deben abrir utilizando el parmetro Input de la instruccin Open. La informacin de los archivos secuenciales se puede leer por lnea o por campos separados por coma. Para leer una lnea completa se usa la instruccin Line Input, y para leer campos separados por coma se usa la instruccin Input. Private Sub cmdBotn_Click() Dim Lnea As String Open "A:\Estados.txt" For Input As #1 Do While Not EOF(1) Line Input #1, Lnea txtMiCaja.Text = txtMiCaja.Text & chr(13) & Lnea Loop Close #1 End Sub Ahora suponga que el archivo de texto Estados.txt contiene los estados de Venezuela y sus cdigos de rea separados por coma: Caracas, 0212, Valencia, 0241, Lara, 0251, etc. A continuacin, se abre el archivo y se muestran los estados de Venezuela y sus cdigos de rea en las cajas de lista lstEstado y lstCdigo. Private Sub cmdBotn_Click() Dim ElEstado, ElCdigo As String Open "A:\Estados.txt" For Input As #2 Do While Not EOF(2) Input #2, ElEstado, ElCdigo lstEstado.AddItem ElEstado lstCdigo.AddItem ElCdigo Loop Close #2 End Sub 6.5.3. Escribir en archivos secuenciales Para escribir en archivos secuenciales se utilizan como parmetros de tipo de la instruccin Open los valores Output o Append. Existen dos mtodos para ingresar informacin en archivos secuenciales. Se pueden ingresar cadenas por lnea del archivo con la funcin Print; o por campos separados por coma mediante la
97

Visual Basic 6.0

Unidad 6.- Archivos

funcin Write. El ejemplo a continuacin muestra el uso de la funcin Print para agregar el contenido de tres cajas de texto del arreglo txtMiCaja al archivo de texto Estados.txt. Private Sub cmdBoton_Click() Open "A:\Estados.txt" For Append As #2 Print #2, txtMiCaja(0).Text Print #2, txtMiCaja(1).Text; txt.MiCaja(2).Text Close #2 End Sub Suponiendo que txtMiCaja (0) contiene Carabobo, txtMiCaja (1) contiene 0241 y txtMiCaja (2) contiene Valencia; la forma como se almacenan es: Carabobo 0241 Valencia Como se observa, Print dispone de una lnea completa por cada campo. Si usamos la Instruccin Write, tanto la sintaxis como el resultado son diferentes. Los campos se separan con comas, y no se usa punto y coma, como en el caso de Print. Private Sub cmdBotn_Click() Open "A:\Estados.txt" For Append As #3 Write #3, txtDato(0).Text Write #3, txtDato(1).Text, txtDato(2).Text Close #3 End Sub A continuacin observe que cada campo se enmarca entre comillas automticamente. Adems cada instruccin Write produce un salto de lnea en el archivo, a menos que los campos se separen con coma. Carabobo 0241, Valencia Para que todos los campos queden en una sola lnea se debe escribir la instruccin: Write #3, txtDato(0).Text, txtDato(1).Text, txtDato(2).Text
Observacin: La instruccin Line Input se utiliza para leer un archivo que se ha escrito con la instruccin Print. Por otra parte, la instruccin Input se utiliza para leer un archivo que se ha escrito con la instruccin Write.

6.6. Archivos aleatorios 6.6.1. Abrir archivos aleatorios Para abrir archivos de acceso aleatorio el parmetro tipo de la instruccin Open debe establecerse a Random, aunque previamente se deben tener en cuenta ciertas consideraciones. Cada registro posee una estructura que se le confiere mediante un tipo de dato definido por el usuario. En la unidad 4 se estudiaron los tipos de datos provistos por el sistema. Resulta obligatoria para archivos directos
98

Visual Basic 6.0

Unidad 6.- Archivos

la definicin de tipos de datos que le confieran una estructura. De esta manera se establece una serie de pasos para crear o abrir archivos aleatorios. Se desarrollar, como ejemplo, un archivo para almacenar los estados, cdigo de rea telefnicos y las capitales de un pas. a) Crear la estructura del registro El cdigo para crear tipos de datos personalizados, por lo general, se escribe en la seccin declaraciones de cualquier mdulo, segn el alcance que desee el analista. La palabra reservada para definir tipos de datos es Type, la cual puede ser pblica o privada. Para los archivos directos es fundamental definir un tamao especfico para los registros el cual debe ser menor a 32767. Por lo tanto, en la definicin de tipo de dato, las cadenas de caracteres deben ser de longitud fija. Private Type T_Estado Nombre As String * 15 CdigoDeArea As String * 4 Capital As String * 20 End Type
Observacin: Por simple regla de Visual Basic, se acostumbra a comenzar el nombre del tipo de datos con la letra T mayscula

b) Declarar las variables de registro La variable de registro representa una coleccin de cada uno de los campos que conforman al registro. Esta se declara de la misma manera como se estudi en la unidad 4, y se recomienda escoger la seccin declaraciones, siempre posterior a la declaracin Type. Para tener control del archivo, es necesario declarar otras variables para conocer la longitud de cada registro y la cantidad de registros almacenados en el archivo. Dim Estado As T_Estado Dim Longitud As Integer Dim Registros As Long 'Variable de registro 'Longitud de un registro 'Cantidad de registros

c) Determinar la longitud de cada registro y abrir el archivo Se recomienda utilizar el evento Load del objeto Form para efectuar es paso, y de esta manera el archivo se abre desde el principio de la aplicacin; aunque se puede escoger cualquier otro evento y objeto del proyecto. Para calcular la longitud del registro se utiliza la funcin Len, y para el tamao del archivo se utiliza LOF. Private Sub Form_Load() Longitud = Len(Estado) Open A:\Estados.dat For Random As #1 Len = Longitud Registros = LOF(1) / Longitud End Sub 6.6.2. Leer registros de archivos aleatorios La operacin de lectura requiere que se especifique la posicin de lectura dentro del archivo, para lo cual se utiliza una variable para la posicin en la instruccin Get: La operacin de lectura consiste en: (1) Leer una posicin especfica para la
99

Visual Basic 6.0

Unidad 6.- Archivos

variable de registro, y (2) Operar cada uno de los campos de la variable de registro. El siguiente procedimiento general, donde la variable Posicin ha sido declarada previamente, Lee un registro y lo muestra en cajas de texto. Public Sub Leer() Get #1, Posicin, txtMicaja(0).Text txtMicaja(1).Text txtMicaja(2).Text End Sub Estado = Estado.Nombre = Estado.CdigoDeArea = Estado.Capital

6.6.3. Escribir registros en archivos directos Para colocar informacin en el archivo directo se usa la instruccin Put. As como para la operacin de lectura, la escritura tambin requiere la especificacin de la posicin. La operacin de escritura consiste en: (1) Cargar cada uno de los campos de la variable de registro, y (2) Escribir la variable de registro en una posicin especfica. El siguiente procedimiento permite almacenar el contenido de las cajas de texto txtMiCaja. Public Sub Escribir() Estado.Nombre = txtMicaja(0).Text Estado.CdigoDeArea = txtMicaja(1).Text Estado.Capital = txtMicaja(2).Text Put #1, Posicin, Estado End Sub 6.6.4. Localizar una posicin de registro Si no se especifica la posicin en la instruccin Get; el sistema lee el registro activo. Al abrir un archivo, la posicin inicial es 1 (principio del archivo), y esta se va incrementando automticamente cada vez que se efecta una lectura. Get #1, , Estado Put #1, , Estado 'Lee el registro activo 'Escribe al final del archivo

El apuntador se puede llevar a una posicin especfica dentro del archivo de acceso aleatorio mediante la instruccin Seek. Para ubicar el cuarto registro, escribimos: Seek #1, 4
Observacin: Si no se especifica una posicin en la instruccin de escritura Put, el registro siempre se escribe al final del archivo, a pesar de efectuar previamente un Seek.

6.6.5. Tareas comunes de archivos aleatorios a) Avanzar registros Private Sub cmdAvanzar() If Posicin < Registros Then I = 1 Else I = 0 Posicin = Posicin + I If Posicin = Registros Then cmdAvanzar.Enabled = False If Registros > 1 Then cmdRetroceder.Enabled = True Leer End Sub
100

Visual Basic 6.0

Unidad 6.- Archivos

b) Retroceder registros Private Sub cmdRetroceder() If Posicin > 1 Then I = 1 Else I = 0 Posicin = Posicin I If Posicin = 1 Then cmdRetroceder.Enabled = False If Registros > 1 Then cmdAvanzar.Enabled = True Leer End Sub c) Buscar un registro Private Sub Buscar(ByVal Buscado As String) Dim I As Long For I = 1 To Registros + 1 Get #1, I, Estado If Trim(Estado.Nombre) Like Buscado + * Then Exit For Next I If I > Registros Then 'No se encontr txtMicaja(0).Text = txtMicaja(1).Text = txtMicaja(2).Text = Else 'Si se encontr txtMicaja(0).Text = Estado.Nombre txtMicaja(1).Text = Estado.CdigoDeArea txtMicaja(2).Text = Estado.Capital End If End Sub d) Eliminar un registro Private Sub Buscar(ByVal Buscado As String) Dim I As Long Estado.Nombre = Put #1, Posicin, Estado Open Temporal.tmp For Random As #2 Len = Len(Estado) For I = 1 To Registros Get #1, I, Estado If Trim(Estado.Nombre) <> Then Put #2, , Estado Next I Close #1, #2 Kill A:\Estados.dat Name A:\Temporal.tmp As A:\Estados.dat Open A:\Estados.dat For Random As #1 Len = Len(Estado) Posicin = Posicin 1 cmdAvanzar End Sub En resumen, el cdigo anterior para eliminar un registro de un archivo, sigue el siguiente procedimiento: Hacer blanco uno de los campos del registro a eliminar. Crear un archivo temporal Agregar todos los registros, excepto los blancos, al archivo temporal.
101

Visual Basic 6.0

Unidad 6.- Archivos

Cerrar los dos archivos. Eliminar el archivo original Renombrar el archivo temporal para que se convierta en el original. Volver a abrir el archivo original. Retomar la posicin del registro anterior al eliminado. Ejecutar un avance para mostrar el registro siguiente al eliminado.

102

Visual Basic 6.0

Unidad 7.- Bases de datos

Unidad 7
Bases de Datos
Es prudente tener presente que ni el xito ni el fracaso son definitivos .- Roger Babson

7.1. Introduccin a Bases de Datos 7.1.1. Nociones bsicas Las bases de datos permiten almacenar y mantener una gran cantidad de informacin de una manera bien organizada, de forma que sea posible devolver dicha informacin rpidamente. La estructura que trataremos es la de bases de datos relacionales, en la que se concibe una base de datos como un espacio de trabajo (WorkSpace) donde coexisten y se relacionan varios conjuntos de datos llamadas tablas, las cuales contienen filas, columnas e ndices. a) Las Tablas son conjuntos de datos del mismo tema. Por ejemplo, Clientes, Proveedores, Ventas, Compras y Productos, son temas que se agrupan en tablas de una base de datos administrativa. b) Las Columnas son los Campos que representan caractersticas del tema de una tabla. Por ejemplo, de la tabla Productos se tienen los campos o caractersticas siguientes: Cdigo, Descripcin, Serial, Precio, Existencia, etc. c) Las Filas representan el registro en s; es decir, un elemento de la tabla con todas sus caractersticas. Por ejemplo, un elemento de la tabla Productos sera: Monitor Compaq, serial 1102212221987, precio 215.000 Bs. y existencia 14. d) Finalmente, los ndices son nmeros enteros en un campo especial autonumrico de la tabla y se utilizan para acceder rpidamente a un registro en una base de datos relacional, ordenar los registros y permitir las relaciones entre varias tablas. El campo de una tabla A puede requerir los datos de otra tabla B, y segn el concepto de bases de datos relacional, el ndice funciona como un apuntador o valor en la tabla A que hace referencia a un registro (fila) de la tabla B.

103

Visual Basic 6.0

Unidad 7.- Bases de datos

Figura 7.1.- Tabla Productos de una base de datos.

7.1.2. Arquitectura de bases de datos Bsicamente los datos de una base de datos se almacenan en un archivo de disco local o remoto, y se conoce como la fuente u origen de datos (DataSource). Como se observa en la figura siguiente, las peticiones de servicios, de parte del usuario o una aplicacin externa, no se realizan directamente sobre el origen de datos, sino que existe un motor de administracin de la base de datos.
Interfaz de Usuario Motor de Base de Datos Origen de Datos

Figura 7.2.- Arquitectura de Bases de Datos

En la figura anterior se pueden apreciar las peticiones mediante las flechas gruesas en el sentido hacia el origen de datos. Este motor de base de datos es una librera de funciones, las cuales ejecutan las operaciones necesarias sobre el origen de datos para responder a las solicitudes de servicio. Las libreras de funciones son archivos con extensin DLL o EXE, y no existen exclusivamente para el manejo de bases de datos; por el contrario, el sistema Windows se basa justamente en libreras de funciones, o DLL (Dynamic Link Library) como comnmente se les nombra. La interfaz de usuario se define como la aplicacin para presentar y actualizar los registros de una base de datos, para lo cual debe interactuar con el motor de base de datos. Los programas que integran a estos tres elementos fundamentales se conocen como Sistemas de Administracin de Bases de Datos (DBSM), como lo son Microsoft Access, SQL Server, Oracle, Fox Pro, Clipper, Dbase, Paradox, etc. 7.1.3. Tecnologas de bases de datos Cada tipo de base de datos posee un motor diferente; es decir, un conjunto diferente de funciones, slo compatibles con un origen de datos en particular. Los motores de bases de datos constan de (1) Proveedores de datos, que contienen y exponen los datos; (2) Clientes de datos, que utilizan los datos; y (3) Componentes de servicio, que procesan y transportan datos. Visual Basic, como lenguaje de programacin, permite crear las aplicaciones de usuario; pero carece
104

Visual Basic 6.0

Unidad 7.- Bases de datos

de un motor de base de datos intrnseco, por lo que no se considera un manejador de bases de datos (DBSM). De esta manera, se han diseado tecnologas de acceso a datos para la administracin de bases de datos desde aplicaciones de Visual Basic. Estas tecnologas incluyen: a) Interfaces para orgenes de datos Visual Basic debe acceder a los motores de bases de datos apropiados segn los orgenes de datos que el usuario desee manipular; es as como dispone de diversos proveedores de datos basados en una tecnologa llamada OLE DB (OLE Data Base). OLE DB define una coleccin de interfaces que encapsulan varios servicios de los sistemas de administracin de bases de datos (DBMS). Estas interfaces permiten crear componentes de software que implementen dichos servicios. Los clientes obtienen acceso a un objeto a travs de interfaces implementadas en el objeto. Existe un servidor OLE DB por cada tipo de origen de datos. b) Modelos de objetos de bases a datos La variedad y complejidad de las interfaces OLE DB no permite el acceso directo desde Visual Basic. En vez de esto, existen tecnologas intermedias, entre OLE DB y Visual Basic, destinadas a ofrecer modelos de objetos de acceso a datos que encapsulan y exponen prcticamente toda la funcionalidad de OLE DB a las aplicaciones; de esta manera, se logra uniformidad en las tareas de programacin sin importar el tipo de servidor o proveedor OLE DB. En Visual Basic existen tres modelos de objetos, los cuales proveen un conjunto de objetos y mecanismos necesarios en la conexin con la base de datos a travs de OLE DB. El primer modelo de objetos fue implementado en la versin 3 de Visual Basic y se conoce como DAO (Data Access Objects), el cual posee la gran desventaja de no permitir el acceso a datos ubicados en servidores remotos, y adems est dedicado al motor Microsoft Jet que utiliza Access. Para responder a estas limitaciones, en la versin siguiente de Visual Basic, se incluy el modelo RDO (Remote Data Objects) como una interfaz exclusiva para el acceso a datos remotos. A partir de la versin 6, se comienza a utilizar el modelo ADO (ActiveX Data Objects), el cual encapsula la funcionalidad de las tecnologas DAO y RDO, reduciendo la cantidad de objetos, propiedades, mtodos y eventos.
Origen de Datos 1 Proveedor 1 OLE DB Proveedor 2 OLE DB Proveedor 3 OLE DB
Figura 7.3.- Acceso de Visual Basic a Bases de Datos

Visual Basic

Origen de Datos 2

Modelo de Objetos

Interfaz de Usuario

Origen de Datos 3

7.1.4. Proveedores OLE DB Para Visual Basic estn disponibles los proveedores de Microsoft OLE DB para los siguientes tipos de bases de datos: a) Microsoft Index Server b) Microsoft Active Directory Service Interfaces (ADSI)
105

Visual Basic 6.0

Unidad 7.- Bases de datos

c) Microsoft SQL Server d) Microsoft Jet (Microsoft Access) e) Bases de datos de Oracle f) Orgenes de datos ODBC (Open DataBase Connectivity) Los orgenes de datos ODBC corresponden a bases de datos compatibles con la tecnologa ODBC. Esta tecnologa permite el acceso a distintos tipos de bases de datos adicionales a los que proporciona OLE DB. De esta manera se incrementa el espectro de orgenes de datos que se pueden acceder desde Visual Basic. Utilizando Microsoft OLE DB para ODBC es posible manipular datos provenientes de: Dbase (*.dbf), Excel (*.xls), FoxPro (*.dbf), Visual Foxpro (*.dbf), Paradox (*.db) y Archivos de texto separados por coma (*.csv). Aunque tambin es posible acceder a datos de Microsoft Access, Microsoft SQL Server y Oracle mediante OLE DB para ODBC, se recomienda utilizar el controlador correspondiente OLE DB Jet, SQL y Oracle.
Convencin: En adelante, para los ejemplos presentados en esta gua se ha escogido el proveedor OLE DB para Microsoft Jet para manejar bases de datos de Microsoft Access, y se utilizar ADO como modelo de objetos de acceso a datos.

7.1.5. Lenguajes de bases de datos El motor de base de datos ejecuta un conjunto de tareas sobre el origen de datos mediante las funciones almacenadas en archivos DLL, las cuales son activadas desde la interfaz de usuario. De esta manera, la interfaz de usuario debe proveer los mecanismos necesarios para la configuracin y puesta en marcha de la base de datos. Los mecanismos antes mencionados, se agrupan o se clasifican en dos tipos de lenguaje, segn la respuesta del motor de base de datos al servicio solicitado. a) Lenguaje de definicin de datos (DDL): El DDL consta de las propiedades y mtodos utilizados para definir y crear la propia base de datos, incluyendo sus tablas, campos, ndices, relaciones, etc. Este lenguaje agrupa a todas las instrucciones relacionadas al diseo de la base de datos. DML incluye facilidades para consultar, actualizar, agregar y eliminar tablas, campos, ndices y relaciones. b) Lenguaje de manipulacin de datos (DML): El DML consta de las propiedades y los mtodos utilizados para escribir la seccin de las aplicaciones que tienen acceso a los registros de bases de datos existentes. DML incluye facilidades para consultar, desplazar, actualizar, ordenar, agregar y eliminar registros.
Atencin: Esta clasificacin no significa que existan dos lenguajes separados; es simplemente una forma de agrupar los elementos del lenguaje segn su funcionalidad.

Las tareas de definicin y configuracin de las bases de datos, por lo general, se realizan utilizando los respectivos DBMS; es decir, no se crean aplicaciones destinadas a DDL aunque los lenguajes de programacin, como Visual Basic, incluyan esta facilidad. La razn de esta prctica radica en el hecho que los DBMS poseen las herramientas ms adecuada para el diseo de las bases de datos. Por otra parte, en la mayora de los casos el sistema de base de datos ya se encuentra instalado, y lo que se requiere es la interfaz de usuario para acceder a los datos.
106

Visual Basic 6.0

Unidad 7.- Bases de datos

Observacin: En esta gua de estudio no se consideran los mtodos y propiedades para el diseo de bases de datos DDL, salvo algunos comandos SQL para el manejo de tablas.

7.1.6. Modos de manipulacin de registros El lenguaje de manipulacin de datos (DML) est relacionado con las operaciones (modificar, agregar, guardar, eliminar, ordenar) sobre los registros de una base de datos, y se puede aplicar de dos maneras segn los siguientes modos. a) Modo de desplazamiento Basado en el movimiento a travs de los registros de una tabla de la base de datos; y donde las operaciones se efectan sobre un solo registro, que se corresponde al registro activo o seleccionado de la base de datos. Por ejemplo; la operacin eliminar, slo eliminar al registro activo. b) Modo relacional Basado en el Lenguaje de Consulta Estructurado (SQL), donde las operaciones pueden afectar a uno, varios o a todos los registros de una tabla de base de datos, segn una definicin de parmetros de seleccin. Por ejemplo; se pueden eliminar todos los registros de la tabla Productos cuyo campo Existencia sea nulo, y esto sin necesidad de hacer activos todos los registros a eliminar. 7.2. Objetos de acceso a datos ADO 7.2.1. Modelo de objetos de ADO El modelo de objetos de ADO define una coleccin de objetos programables para aprovechar la eficaz tecnologa denominada OLE DB. Uno de los puntos fuertes de ADO es que puede exponer y utilizar las propiedades nicas de cada proveedor de datos. Independientemente del origen de datos utilizado, ADO es totalmente flexible y adaptable a los requisitos de acceso a datos de su aplicacin. El modelo de objetos ADO, en su versin 2.0, consta de siete objetos y cuatro colecciones:
Connection Command Properties Parameters Rercorset Properties Fields Property Field Properties Properties Errors Property Error
Figura 7.4.- Modelo de objetos ADO.

Objeto Property Coleccin Parameter

Property

a) Objeto Connection: Contiene informacin acerca de un proveedor de datos y la su conexin, como el tipo de cursor, la cadena de conexin, el tiempo de
107

Visual Basic 6.0

Unidad 7.- Bases de datos

espera de la consulta, el tiempo de espera de la conexin y la base de datos predeterminada. b) Objeto Command: Contiene informacin acerca de un comando, como una cadena de consulta, nombre de una tabla, una definicin de parmetro y otros. Puede ejecutar una cadena de comando en un objeto Connection de una cadena de consulta como parte de la apertura de un objeto Recordset, sin definir un objeto Command. El objeto Command es til cuando desee definir parmetros de consultas o ejecutar procedimientos almacenados que devuelva parmetros de resultados. Los objetos Command admiten varias propiedades para describir el tipo y el propsito de la consulta y para ayudar a ADO a optimizar la operacin. c) Objeto Recordset: Contiene los registros devueltos por una tabla o consulta, as como un cursor para dichos registros. Puede abrir un objeto Recordset (por ejemplo, al realizar una consulta) sin abrir explcitamente un objeto Connection. No obstante, si opta por crear un objeto Connection, puede abrir mltiples objetos Recordset con la misma conexin. d) Objeto Property: Contiene las caractersticas definidas por el proveedor de un objeto ADO. Los objetos ADO tienen dos tipos de caractersticas: Integradas y Dinmicas. Las propiedades integradas son las que estn implementadas en ADO y se encuentran disponibles para cualquier objeto nuevo de ADO. Las propiedades dinmicas estn definidas por el proveedor de datos subyacente y aparecen en la coleccin Properties para el objeto de ADO apropiado. Por ejemplo, una propiedad puede indicar si un objeto Recordset admite transacciones o actualizaciones. sta es una de las principales caractersticas de ADO, que permite al proveedor de servicios de ADO presentar interfaces especiales. Cada uno de los objetos Connection, Command, Recordset y Field tiene una coleccin Properties. e) Objeto Error: Contiene informacin ampliada acerca de condiciones de error producida por el proveedor de datos. Como una nica instruccin puede generar dos o ms errores, la coleccin Errors puede contener ms de un objeto Error al mismo tiempo. La coleccin Errors est en el objeto Connection. f) Objeto Parameter: Es un parmetro individual asociado a un objeto Command. El objeto Command utiliza la coleccin Parameters para que contenga a todos sus objetos Parameter. Los objetos Parameter de ADO se pueden generar automticamente enviando consultas a la base de datos. Sin embargo, tambin puede generar esta coleccin mediante programacin para mejorar el rendimiento en tiempo de ejecucin.

g) Objeto Field: Contiene informacin acerca de una nica columna de datos en el conjunto de registros (Recordset). El objeto Recordset utiliza la coleccin Fields para que contenga a todos sus objetos Field. Esta informacin de Field incluye el tipo de datos, la precisin y la escala numrica. 7.2.2. El objeto Connection
Regla de Visual Basic de prefijo para nombre del objeto Connection: cnn.

a) Propiedades
Propiedad ConnectionString Descripcin Cadena que contiene la informacin que se utiliza para establecer una conexin a un
108

Visual Basic 6.0

Unidad 7.- Bases de datos

Propiedad Provider DefaultDatabase ConnectionTimeout CursorLocation Mode State

Descripcin origen de datos. Indica el nombre del proveedor de la base de datos en una conexin. Indica el nombre de la base de datos predeterminada en una conexin. Indica el intervalo de espera mientras se establece una conexin antes de que se genere un error. Establece o devuelve la posicin de un motor de cursores. (AdUseNone, adUseClient, adUseServer). Indica los permisos disponibles para modificar datos en un objeto Connection. (Lectura, escritura...). Indica el estado de la conexin: abierta, cerrada.
Tabla 7.1.- Propiedades del objeto Connection de ADO

La propiedad ConnectionString permite especificar un origen de datos mediante una cadena de conexin detallada que contiene una serie de expresiones (argumento = valor) separadas con punto y coma. Dim C As Cadena C=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\bd.mdb El argumento Provider especifica el nombre del proveedor que se usa en la conexin, es decir, el motor de la base de datos y su versin. El argumento DataSource se refiere a la ruta y nombre de la base de datos que se desea acceder. Tambin se puede especificar slo al proveedor mediante la propiedad Provider; o slo el nombre de la base de datos mediante la propiedad DefaultDatabase. Las opciones de la propiedad CursorLocation se describen en la tabla siguiente:
Opcin adUseNone adUseClient adUseServer Descripcin No se usan servicios de cursor. Usa cursores del lado del cliente suministrados por una biblioteca de cursores locales. Predeterminado. Usa cursores suministrados por el controlador o por el proveedor de datos.
Tabla 7.2.- Opciones de la propiedad CursorLocation.

El valor de la propiedad CursorLocation afecta solamente a las conexiones establecidas despus de que se haya establecido la propiedad. Los cambios en la propiedad CursorLocation no afectan a las conexiones existentes. Se recomienda utilizar la opcin adUseClient si se esta trabajando con una base de datos local. b) Mtodos
Propiedad Open Execute Close Cancel Descripcin Abre una conexin a un origen de datos. Ejecuta una consulta, instruccin SQL, procedimiento almacenado o texto especfico del proveedor. Cierra un objeto de conexin a un origen de datos y los objetos dependientes. Cancela la ejecucin de una llamada asncrona pendiente a un mtodo Execute u Open.
Tabla 7.3.- Mtodos del objeto Connection de ADO

El mtodo Open slo establece una conexin fsica con la base de datos, para lo cual requiere el establecimiento de las propiedades ConnectionString, ConnectionTimeout y CursorLocation. La propiedad ConnectionTimeout esta
109

Visual Basic 6.0

Unidad 7.- Bases de datos

predefinida en 15 segundos, por lo tanto, algunas veces no es necesario establecer. El mtodo Execute puede o no devolver filas. En el caso que devuelva filas (registros), el valor devuelto es una referencia a un objeto Recordset. 7.2.3. El objeto Recordset
Regla de Visual Basic de prefijo para nombre del objeto Recordset: rst.

a) Propiedades
Propiedad AbsolutePosition ActiveConnection BOF EOF CursorLocation CursorType EditMode Filter LockType RecordCount Source State Status Descripcin Especifica la posicin ordinal del registro actual. Indica a qu objeto Connection pertenece actualmente el objeto. Indica que la posicin del registro actual est antes del primer registro. Indica que la posicin del registro actual est despus del ltimo registro. Establece o devuelve la posicin de un motor de cursores. Indica el tipo de cursor que se usa en el objeto. Indica el estado de modificacin del registro actual. Indica un filtro para los datos del conjunto de registros. Indica el tipo de bloqueo que se pone en los registros durante el proceso de edicin. Indica el nmero actual de registros del objeto. Indica el origen de los datos (una instruccin SQL, un nombre de tabla o un procedimiento almacenado). Describe el estado del objeto: abierto o cerrado. Indica el estado del registro actual referente a las actualizaciones por lotes u otras operaciones masivas.
Tabla 7.4.- Propiedades del objeto Recordset de ADO

La propiedad CursorLocation del Recordset es heredada del objeto Connection, aunque se puede cambiar en el objeto Recordset. Use la propiedad CursorType para especificar el tipo de cursor que se debe utilizar al abrir el objeto Recordset. La propiedad CursorType es de lectura/escritura cuando el Recordset est cerrado y de slo lectura cuando est abierto. CursorType especifica los desplazamientos permitidos a travs del conjunto de registros (ver Tabla 7.5)
Opcin adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic Descripcin Predeterminado. Slo permite desplazarse hacia delante en los registros. Esto mejora el rendimiento en situaciones en las que slo se quiere pasar una vez por cada registro. Son inaccesibles los registros que agregan o eliminan otros usuarios. Los cambios que otros usuarios hacen en los datos permanecen visibles. Se admiten todo tipo de movimientos entre registros. Las incorporaciones, cambios y eliminaciones que hacen otros usuarios permanecen visibles, y se admiten todo tipo de movimientos entre registros. Una copia esttica de un conjunto de registros que se puede usar para buscar datos o generar informes. Las incorporaciones, cambios o eliminaciones que hacen otros usuarios no son visibles.
Tabla 7.5.- Opciones de la propiedad CursorType

La propiedad LockType se establece antes de abrir un Recordset para especificar qu tipo de bloqueo debe usar el proveedor al abrirlo. LockType es de lectura/escritura cuando el Recordset est cerrado y de slo lectura cuando est abierto. Los tipos de bloqueo se especifican en la tabla siguiente.
Valor de LockType adLockReadOnly Descripcin Predeterminado. Slo lecturano puede modificar los datos.
110

Visual Basic 6.0

Unidad 7.- Bases de datos

Valor de LockType adLockPessimistic adLockOptimistic adLockBatchOptimistic

Descripcin Bloqueo pesimista, registro a registro: el proveedor hace lo necesario para asegurar la modificacin correcta de los registros, generalmente bloqueando registros en el origen de datos. Bloqueo optimista, registro a registro: el proveedor usa bloqueo optimista, bloqueando registros slo cuando llama al mtodo Update. Actualizaciones optimistas por lotes: requerido para el modo de actualizacin por lotes como contraposicin al modo de actualizacin inmediata.
Tabla 7.6.- Opciones de la propiedad LockType

La propiedad EditMode se puede usar evaluar el estado de edicin de un registro, y as determinar la ejecucin o no de acciones de guardado de registros. EditMode puede tener uno de los siguientes valores:
Devuelve adEditNone adEditInProgress adEditAdd adEditDelete Descripcin Indica que no hay ninguna operacin de modificacin en ejecucin sobre el registro actual. Indica que los datos del registro actual se han modificado pero que no se han guardado an. Indica que se ha invocado el mtodo AddNew y que no se ha guardado an el registro actual nuevo. Indica que el registro actual se ha eliminado.
Tabla 7.7.- Valores que devuelve la propiedad EditMode

La propiedad Filter se utiliza para descartar de manera selectiva registros de un objeto Recordset. El Recordset filtrado se convierte en el cursor actual. Esto afecta a otras propiedades, como AbsolutePosition y RecordCount, que devuelven valores basados en el cursor actual. Filter se basa en una cadena de criterio que se compone de clusulas con el formato [Nombre campo] Operador Valor; por ejemplo, la siguiente instruccin devuelve slo registros cuyo apellido sea Smith: MiRecordset.Filter = "LastName = 'Smith'" Se pueden crear clusulas compuestas mediante la concatenacin de clusulas individuales con operadores lgicos (por ejemplo, "LastName = 'Smith' AND FirstName = 'John'"). Si el nombre de campo contiene espacios, deber encerrar el nombre entre corchetes (por ejemplo, [Last Name] = Smith). Se utilizan comillas simples para las cadenas y el smbolo de numeral (#) para las fechas. Si el operador es LIKE, se podrn utilizar comodines para el valor de comparacin. Los nicos comodines que se admiten son el asterisco (*) y el signo de porcentaje (%) y deben ser el ltimo carcter de la cadena. b) Mtodos
Mtodo AddNew UpdateBatch CancelBatch Update CancelUpdate Open Cancel Close Descripcin Crea un nuevo registro Escribe en disco todas las actualizaciones pendientes de proceso por lotes. Cancela una actualizacin por lotes pendiente. Guarda los cambios realizados en el registro actual de un objeto Recordset. Cancela las modificaciones al registro actual o a un registro nuevo antes de invocar a Update. Abre un cursor que representa los registros de una base de datos o los resultados de una consulta. Cancela la ejecucin de una llamada asncrona pendiente a un mtodo Open. Cierra un objeto Recordset, libera los datos asociados y los accesos exclusivos que pudiera tener.
111

Visual Basic 6.0

Unidad 7.- Bases de datos

Mtodo MoveFirst MoveNext MovePrevious MoveLast Requery Delete

Descripcin Pasa al primer registro y lo convierte en el registro actual. Pasa al siguiente registro y lo convierte en el registro actual. Pasa al anterior registro y lo convierte en el registro actual. Pasa al ltimo registro y lo convierte en el registro actual. Actualiza los datos de un objeto Recordset volviendo a ejecutar la consulta en que se basa el objeto. Elimina el registro actual o al grupo de registros especificados mediante la propiedad Filter.
Tabla 7.8.- Mtodos del objeto Recordset de ADO

c) Eventos
Eventos FetchProgress, FetchComplete WillChangeField, FieldChangeComplete WillMove, MoveComplete, EndOfRecordset WillChangeRecord, RecordChangeComplete WillChangeRecordset, RecordsetChangeComplete Descripcin Estado de recuperacin: notificacin del progreso de una operacin de recuperacin de datos, o de que la operacin de recuperacin ha concluido. Administracin de cambio de campo: Notificacin de que el valor del campo actual cambiar o ha cambiado. Administracin de exploracin: Notificacin de que la posicin de fila (registro) actual en un Recordset cambiar, ha cambiado o ha llegado al final del Recordset. Administracin de cambios en la fila: Notificacin de que algo en la fila (registro) actual del Recordset cambiar o ha cambiado. Administracin de cambios en el Recordset: Notificacin de que algo en el Recordset actual cambiar o ha cambiado.
Tabla 7.9.- Eventos del objeto Recordset de ADO

7.2.4. Procedimiento para utilizar el modelo ADO Una aplicacin tpica basada en ADO utiliza un conjunto de procedimientos u operaciones establecidas para tener acceso a un origen de datos. El modelo de datos ADO requiere obligatoriamente el establecimiento de una conexin antes de cualquier operacin sobre la base de datos. El procedimiento se detalla en los siguientes pasos: a) Crear y abrir la conexin (objeto Connection) Se especifica la cadena de conexin con informacin como el nombre del origen de datos, la identificacin del usuario, la contrasea, el tiempo de espera de la conexin, la base de datos predeterminada y la ubicacin del cursor. Establecidos estos parmetros se procede a abrir la conexin mediante el mtodo Open del objeto Connection. b) Ejecutar el comando (objeto Command y Recordset) Se especifica el tipo de comando (tabla, consulta o procedimiento almacenado) y los registros afectados del origen de datos. El tipo de comando determina bsicamente el tipo de origen de datos. El comando puede ser de seleccin de registros o de accin sobre los registros. Cuando el comando es de seleccin de registros, es necesario establecer el objeto Recordset que contendra al conjunto de registros. A continuacin, segn sea el comando de seleccin o de accin, se sigue uno de los siguientes procedimientos: Ejecutando un comando de seleccin: Se crea y se abre el objeto Recordset para obtener el conjunto de registros provenientes de una tabla, del resultado de una consulta SQL o procedimiento almacenado. Para este paso, primeramente se definen las caractersticas del cursor, el nombre de la tabla, la instruccin de seleccin SQL, o nombre del procedimiento
112

Visual Basic 6.0

Unidad 7.- Bases de datos

almacenado; para posteriormente invocar el mtodo Open del objeto Recordset. Ejecutando un comando de accin: Consiste en ejecutar el mtodo Execute del objeto Connection sin devolucin de filas. Este mtodo acta sobre un conjunto de registros del origen de datos mediante instrucciones de accin SQL, pero no devuelve registros. c) Utilizar el conjunto de resultados (objeto Recordset) Aplica si el comando es de seleccin. En funcin del tipo de cursor (CursorType), se pueden examinar y modificar los datos de las filas en el servidor o en el cliente, mediante mtodos y propiedades del objeto Recordset. d) Finalizar la conexin (objeto Connection) Cancela la conexin con el origen de datos. Se utiliza el mtodo Close del objeto Connection. 7.3. Acceso a datos mediante Visual Basic y ADO 7.3.1. Mtodos para utilizar ADO El modelo ADO se puede implementar de varias maneras desde Visual Basic, usando (a) El control de datos ADO, (b) ADO mediante cdigo, o (c) El entorno de datos. a) El control de datos ADO Este control de datos permite efectuar una conexin con la base de datos y define un conjunto de filas (Recordset) provenientes de una tabla, del resultado de una consulta o de un procedimiento almacenado. Tiene la ventaja que es fcil y rpidamente configurable, provee los botones para desplazarse a travs de los registros y se puede reconfigurar durante la ejecucin. Pero por otra parte, no se tiene suficiente control sobre la conexin, de tal manera que se pueden producir errores durante la carga, si la base de datos es movida de su ubicacin original. b) ADO mediante cdigo Creando los objetos ADO mediante cdigo, el control de la conexin y del origen de datos es total; pero se deben crear por cdigo todos los procedimientos, lo que puede resultar un poco tedioso para el programador. Una vez que se han creado los objetos Recordset, se acostumbra a asignar estas referencias de objeto al control de datos ADO, con el fin de aprovechar su funcionalidad. c) El entorno de datos El entorno de datos es un objeto de la clase DataEnvironment que contiene las conexiones (DEConnection), comandos (DECommand) y campos de una o varias bases de datos. El diseador de entorno de datos permite definir uno o varios objetos conexin (DEConnection); y de cada conexin, el objeto Recordset se define mediante objetos comando (DECommand). Si bien presenta la ventaja de crear los controles enlazados de manera sencilla

113

Visual Basic 6.0

Unidad 7.- Bases de datos

(arrastrar desde el diseador y colocar en el formulario), el acceso a los datos se debe codificar haciendo referencia al nombre del objeto DataEnvironment. Estos procedimientos, aunque se estudian de manera separada, se pueden combinar o complementar entre s para obtener una mxima eficiencia de la interfaz de base de datos y su configuracin. Por otra parte, la visualizacin de los datos de un Recordset se realiza enlazando estos a objetos receptores de datos que se conocen como Controles Enlazados a un campo o al Recordset completo. 7.3.2. Controles enlazados a datos Los objetos receptores de datos son controles que pueden ser enlazados con orgenes de datos. Estos son de la clase TextBox, ListBox, ComboBox, CheckBox, PictureBox, Image y Label; y adems controles no estndar como el DataGrid, DataCombo y DataList. Segn los mtodos para utilizar ADO (7.3.1), los controles se pueden enlazar de las siguientes maneras: a) Control de datos ADO: En tiempo de diseo, en la propiedad DataSource del objeto se indica el nombre del control de datos ADO, y en la propiedad DataField del objeto se escoge el nombre de uno de los campos del Recordset. b) ADO mediante cdigo: Se enlaza en tiempo de ejecucin mediante una referencia del objeto Recordset a la propiedad DataSource del objeto receptor utilizando la sentencia SET. Tambin se debe establecer la propiedad DataField con una instruccin de asignacin del nombre del campo como cadena en forma explcita. c) Entorno de datos: En tiempo de diseo, en la propiedad DataSource del objeto se indica el nombre del entorno de datos, en la propiedad DataMember se coloca el nombre del comando (DECommand), y luego se especifica el nombre del campo en la propiedad DataField. Para este caso, tambin es posible arrastrar y colocar. 7.3.3. El control de datos ADO a) Agregar el control de datos en la caja de herramientas: Este se debe agregar mediante el cuadro de dilogo Componentes (Ctrl+T), seleccionando el objeto Microsoft ADO Data Control 6.0 (OLEDB), como se muestra en la figura 7.5.

114

Visual Basic 6.0

Unidad 7.- Bases de datos

Figura 7.5.- Dilogo de componentes (Control de datos ADO)

b) Crear la conexin con la base de datos: Una vez dibujado el control de datos ADO, se utiliza su propiedad ConnectionString para crear la cadena de conexin, la cual despliega un dilogo que facilita este procedimiento (ver Figura 7.6).

Figura 7.6.- Ventana de la propiedad ConnectionString

Seleccionado la opcin Usar cadena de conexin, y el botn Generar, aparece el asistente que se muestra en la figura 7.7, el cual permite seleccionar, tanto el motor (Proveedor), como el nombre de la base de datos (Conexin).

115

Visual Basic 6.0

Unidad 7.- Bases de datos

Figura 7.7.- Asistente para crear una conexin a un origen de datos ADO

c) Establecer el conjunto de registros: La propiedad CommandType define el tipo de origen de datos. La propiedad RecordSource, abre el dilogo que se muestra a continuacin para seleccionar una tabla o escribir un texto SQL.

Figura 7.8.- Dilogo de propiedades para establecer el origen de registros

d) Enlazar controles a los datos del Recordset: Los controles enlazados se crean estableciendo las propiedades DataSource y DataField en tiempo de diseo; pero tambin se pueden establecer en tiempo de ejecucin de la siguiente
116

Visual Basic 6.0

Unidad 7.- Bases de datos

manera. Suponga que el control de datos ADO tiene como nombre MiAdoDC, y que se desea enlazar una caja de texto MiCaja al campo Apellido de una tabla de datos (Recordset con CommandType = adCmdTable): Set Me.MiCaja.DataSource = Me.MiAdoDC.Recordset Me.MiCaja.DataField = "Apellido" Tambin es posible mostrar todos los campos y registros utilizando el objeto DataGrid. Para lo cual, primero debe agregarse a la caja de herramientas mediante el dilogo de Componentes (Ctrl+T) seleccionado la opcin Microsoft DataGrid Control 6.0 (OLEDB). En este caso slo se especifica la propiedad DataSource, ya que no es necesario especificar un campo en particular. Suponga que el objeto DataGrid tiene el nombre MiDataGrid: Set Me.MiDataGrid.DataSource = Me.MiAdoDC.Recordset e) Utilizar el conjunto de registros: La propiedad Recordset del control de datos ADO hace referencia al conjunto de registros especificados mediante las propiedades CommandType y RecordSource. Suponga que el control de datos ADO tiene como nombre MiAdoDC: Agregar un registro nuevo MiAdoDC.Recordset.AddNew Guardar modificaciones del registro activo o del registro nuevo MiAdoDC.Recordset.Update Cancelar una modificacin o agregado de registro MiAdoDC.Recordset.CancelUpdate Buscar un registro cuyo Apellido comience con el contenido de una caja de texto Dim Buscar As String Me.MiAdoDC.Recordset.MoveFirst Buscar = "Apellido Like '" & Me.Text4.Text & "*'" Me.MiAdoDC.Recordset.Find Buscar If Me.MiAdoDC.Recordset.EOF Then Me.Label1.Caption = "No se encontr" Me.MiAdoDC.Recordset.MoveFirst End If Borrar el registro activo MiAdoDC.Recordset.Delete Desplazarse al ltimo registro MiAdoDC.Recordset.MoveLast Mostrar la cantidad de registros del Recordset en un objeto etiqueta Me.label1.Caption = MiAdoDC.Recordset.RecordCount

117

Visual Basic 6.0

Unidad 7.- Bases de datos

7.3.4. Creacin de objetos ADO en cdigo a) Crear la referencia a la biblioteca de tipos ADO: Las referencias se establecen a travs del men Proyecto | Referencias, el cual despliega el dilogo que se muestra a continuacin. Debe seleccionar Microsoft ActiveX Data Object 2.X Library.

Figura 7.9.- Ventana de referencias a libreras de objetos

b) Crear las variables de objeto: Para crear eventos en una variable tipo objeto se utiliza la sentencia WithEvents despus de Dim, Public o Static. Dim WithEvents Cnn As ADODB.Connection Dim WithEvents Rst As ADODB.Recordset c) Crear los objetos Connection y Recordset: Se recomienda utilizar el evento Form_Load para este fin. Se utiliza la sentencia Set para la referencia a objeto. Set Cnn = New ADODB.Connection Set Rst = New ADODB.Recordset d) Abrir el objeto Connection: Es conveniente chequear previamente el estado de la conexin, ya que si esta se encuentra abierta, y se intenta abrir nuevamente, se producir un error. Antes de abrir la conexin, se debe establecer la cadena de conexin mediante la asignacin de la propiedad ConnectionString. If Cnn.State Then Cnn.Close Cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;_ Data Source=C:\Notas.mdb" Cnn.Open e) Abrir el objeto Recordset: Al igual que el objeto Connection, es conveniente verificar previamente el estado del Recordset, ya se produce un error al intentar abrir un Recordset que ya est abierto. Para abrir el conjunto de registros (Recordset) se debe especificar la localizacin del cursor
118

Visual Basic 6.0

Unidad 7.- Bases de datos

(CursorLocation), el tipo de cursor (CursorType), el tipo de bloqueo de registros (LockType), la conexin activa, y el origen de registros. En el ejemplo siguiente, las propiedades CursorLocation y LockType se establecen de manera explcita, y el resto de las propiedades van implcitas en la misma lnea de ejecucin del mtodo Open. If Rst.State Then Rst.Close Rst.CursorLocation = adUseClient Rst.LockType = adLockOptimistic Rst.Open "Alumnos", Cnn, adOpenDynamic f) Enlazar los datos del Recordset a un control: Una vez mas, basta con establecer las propiedades DataSource y DataField del objeto que se desea enlazar, en este caso una caja de texto llamada MiCaja en la que se quieren mostrar los valores del campo Apellido: Set Me.MiCaja.DataSource = Rst Me.MiCaja.DataField = "Apellido" Si se desea mostrar todos los campos y registros utilizando el objeto DataGrid se debe especificar slo la propiedad DataSource: Set Me.MiDataGrid.DataSource = Rst g) Utilizar el conjunto de registros: El objeto Rst (Recordset) hace referencia al conjunto de registros especificados en la ejecucin del mtodo Open. Agregar un registro nuevo Rst.AddNew Guardar modificaciones del registro activo o del registro nuevo Rst.Update Cancelar una modificacin o agregado de registro Rst.CancelUpdate Buscar un registro cuyo Apellido comience con lo que est en una caja de texto Dim Buscar As String Rst.MoveFirst Buscar = "Apellido Like '" & Me.Text4.Text & "*'" Rst.Find Buscar If Rst.EOF Then Me.Label1.Caption = "No se encontr" Rst.MoveFirst End If Borrar el registro activo Rst.Delete Desplazarse al ltimo registro Rst.MoveLast
119

Visual Basic 6.0

Unidad 7.- Bases de datos

Mostrar la cantidad de registros del Recordset en un objeto etiqueta Me.label1.Caption = Rst.RecordCount 7.3.5. El diseador de entorno de datos a) Agregar el diseador de entorno de datos: Se debe visualiza el dilogo componentes (Ctrl+T) y seleccionar Data Environment de la pestaa Diseadores:

Figura 7.10.-Dilogo Componentes (Diseadores)

b) Agregar un entorno de datos: Al hacer clic en el men Proyecto | Agregar Data Environment, se despliega el diseador del entorno de datos como se muestra en la figura 7.11. Este diseador permite configurar el objeto Entorno de datos con mltiples conexiones (Control, Escuelas) u objetos DEConnection, y para cada conexin se pueden especificar conjuntos de registros (Alumnos, Exmenes, Asistencia, Materias, etc.) u objetos DECommand.

120

Visual Basic 6.0

Unidad 7.- Bases de datos

Figura 7.11.-Diseador del objeto Entorno de datos

c) Crear los objetos DEConnection y DECommand: Estos objetos se crean haciendo clic derecho sobre el objeto correspondiente. Por ejemplo para crear conexiones se hace clic derecho sobre el objeto de entorno de datos MiEntornoDeDatos. d) Crear los controles enlazados: Esta es una de las grandes ventajas de usar el diseador del entorno de datos. Con la operacin de arrastrar y colocar, los objetos enlazados se crean automticamente sobre el formulario. Si no se desea utilizar esta facilidad, o si desea reconfigurar los controles enlazados en tiempo de diseo, se deben establecer las propiedades DataSource (Nombre del objeto entorno de datos: MiEntornoDeDatos), DataMember (Nombre de un objeto DECommand: Alumnos), y DataField (Nombre de uno de los campos de dataMember). Ahora en tiempo de ejecucin, slo se hace referencia al objeto Recordset correspondiente a un comando. Por ejemplo, el comando Alumnos crea automticamente el objeto rsAlumnos de la clase Recordset. Set Me.MiCaja.DataSource = MiEntornoDeDatos.rsAlumnos Me.MiCaja.DataField = "Apellido" Igualmente para el control DataGrid, en tiempo de diseo habra que especificar las propiedades Datasource y DataMember; pero en tiempo de ejecucin basta con hacer referencia al objeto Recordset relacionado al comando: Set Me.MiDataGrid.DataSource = MiEntornoDeDatos.rsAlumnos e) Utilizar el conjunto de registros: Los objetos rsAlumnos, rsExamenes, rsMaterias, etc., son de la clase Recordset, por lo tanto permiten manipular el conjunto de registros. Agregar un registro nuevo MiEntornoDeDatos.rsAlumnos.AddNew Guardar modificaciones del registro activo o del registro nuevo MiEntornoDeDatos.rsAlumnos.Update Cancelar una modificacin o agregado de registro MiEntornoDeDatos.rsAlumnos.CancelUpdate
121

Visual Basic 6.0

Unidad 7.- Bases de datos

Buscar un registro cuyo Apellido comience con lo que est en una caja de texto Dim Buscar As String MiEntornoDeDatos.rsAlumnos.MoveFirst Buscar = "Apellido Like '" & Me.Text4.Text & "*'" MiEntornoDeDatos.rsAlumnos.Find Buscar If MiEntornoDeDatos.rsAlumnos.EOF Then Me.Label1.Caption = "No se encontr" MiEntornoDeDatos.rsAlumnos.MoveFirst End If Borrar el registro activo MiEntornoDeDatos.rsAlumnos.Delete Desplazarse al ltimo registro MiEntornoDeDatos.rsAlumnos.MoveLast Mostrar la cantidad de registros del Recordset en un objeto etiqueta Me.label1.Caption = MiEntornoDeDatos.rsAlumnos.RecordCount 7.4. Lenguaje de consulta estructurado SQL 7.4.1. Introduccin a SQL Como hemos visto, el modelo relacional se basa en el Lenguaje de Consulta Estructurado, mejor conocido como SQL. El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado o incluido en el motor de base de datos para crear objetos RecordSet. Tambin se puede utilizar con el mtodo Execute del objeto Connection de ADO para manipular directamente lotes de registros de las bases de datos. Es posible crear consultas SQL de paso a travs para manipular bases de datos remotas cliente-servidor. SQL es un lenguaje de programacin, cuyos orgenes estn estrechamente relacionados con la invencin de las bases de datos relacionales por E. F. Codd a principios de los aos 70. Un antecedente del actual SQL fue el lenguaje Sequel, razn por la cual SQL todava se pronuncia en ingls como Sequel en vez de letra a letra, aunque las dos pronunciaciones son aceptables. El SQL moderno ha evolucionado hasta ser un estndar utilizado ampliamente en casi todas las bases de datos relacionales y se encuentra definido en la norma ANSI. La mayora de las implementaciones de SQL tienen pocas variaciones respecto al estndar, incluyendo la versin admitida por el motor de base de datos Microsoft Jet. SQL tiene la ventaja de ser una interfaz de bases de datos normalizada, por lo que conocer los comandos SQL permite acceder y manipular una gran variedad de productos de bases de datos procedentes de distintos fabricantes. Para utilizar SQL desde Visual Basic, se debe construir la instruccin SQL en una variable tipo cadena de caracteres, la cual sirve de argumento para objetos de ADO. El lenguaje permite efectuar dos tipos de consultas: a) Consultas de seleccin: devuelven un conjunto de registros que se pueden manipular mediante el objeto RecordSet de ADO. Por ejemplo, habiendo
122

Visual Basic 6.0

Unidad 7.- Bases de datos

creado los objetos Cnn (Connection) y Rst (Recordset), se utiliza el mtodo Open del objeto Recordset para obtener registros de la tabla Alumnos: Dim CadSQL As String CadSQL = SELECT [Apellido], [Nombre] FROM Alumnos; If Rst.State Then Rst.Close Rst.CursorLocation = adUseClient Rst.LockType = adLockOptimistic Rst.Open CadSQL, Cnn, adOpenDynamic b) Consultas de accin: realizan una operacin sobre la base de datos o sobre uno o ms registros de una tabla. Para este caso no es necesario crear el objeto Recordset, ya que las consultas de accin no devuelven registros. En su lugar se utiliza el mtodo Execute del objeto Connection. El siguiente ejemplo elimina los registros de la tabla Alumnos con ms de 25 inasistencias: Dim CadSQL As String CadSQL = DELETE * FROM Alumnos WHERE [Inasistencia] > 25 If Cnn.State Then Cnn.Close Cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;_ Data Source=C:\Notas.mdb" Cnn.Execute CadSQL Como se observa en los ejemplos anteriores, lo nico nuevo es la construccin de la instruccin SQL, ya que los objetos ADO se siguen utilizando de la misma manera. A continuacin veremos los elementos y sintaxis del lenguaje de consulta estructurado SQL. 7.4.2. Elementos del lenguaje SQL El lenguaje SQL est compuesto por (a) Comandos, (b) Clusulas, (c) Operadores y (d) Funciones de agregado. Estos componentes, se combinan en instrucciones completas para seleccionar, actualizar, agregar o borrar registros de bases de datos. a) Comandos SQL Los comandos corresponden a las rdenes que se especifican mediante SQL, y en la sintaxis constituyen el inicio de cada instruccin.
Comando SELECT UPDATE INSERT DELETE Utilizado para Seleccionar un conjunto de registros de la base de datos y crear un Recordset. Modificar los valores de los campos de uno o ms registros. Agregar uno o ms registros a una tabla de base de datos. Eliminar uno o ms registros de una tabla de base de datos.
Tabla 7.10.- Algunos comandos de SQL

b) Clusulas SQL Las clusulas son condiciones de modificacin utilizadas para definir los datos que desean seleccionar o manipular, y la forma como estos se presentan.
Clusula FROM WHERE GROUP BY HAVING ORDER BY Descripcin Especifica las tablas de las cuales se van a seleccionar los registros. Especifica las condiciones de los registros que se van a seleccionar. Separa los registros seleccionados en grupos especficos. Especifica las condiciones que deben satisfacer cada grupo generado por GROUP BY. Indica los campos para el ordenamiento de los registros.
123

Visual Basic 6.0

Unidad 7.- Bases de datos


Tabla 7.11.- Algunas clusulas de SQL

c) Operadores SQL Existen dos tipos de operadores en el lenguaje SQL, operadores lgicos y operadores relacionales. Los operadores lgicos se usan para conectar expresiones lgicas, normalmente dentro de una clusula WHERE o HAVING. Para SQL los operadores lgicos son: AND, OR y NOT. Por otra parte, los operadores relacionales (ver Tabla 7.12) se usan para comparar valores relativos de dos expresiones.
Operador < > = BETWEEN IN <= >= <> LIKE Significado/Uso Menor que Mayor que Igual que Especifica un intervalo de valores Especifica registros de una base de datos Menor o igual que Mayor o igual que Distinto de Utilizado en la comparacin de un modelo
Tabla 7.12.- Operadores de comparacin SQL

d) Funciones de agregado SQL Las funciones de agregado (ver Tabla 7.13) se usan dentro de una clusula SELECT para devolver un nico valor que se aplica a un conjunto de registros agrupados segn cierto criterio.
Funcin COUNT MAX AVG SUM MIN Descripcin Calcula el nmero de veces que aparece un valor en un campo especificado. Devuelve los registros con el valor ms alto de un campo especificado. Calcula el promedio de todos los valores de un campo especificado. Calcula la suma de todos los valores de un campo especificado. Devuelve los registros con el valor ms bajo de un campo especificado.
Tabla 7.13.- Funciones de agregado SQL

7.4.3.

Consultas de seleccin (SELECT)

La instruccin SELECT se utiliza para recuperar registros de una base de datos en forma de un conjunto de registros, almacenndolos en un nuevo objeto Recordset. Las instrucciones SELECT no modifican los datos de la base de datos; slo los recuperan. La sintaxis general de la consulta SELECT es la siguiente: SELECT listaCampos FROM nombresTablas IN nombreBaseDatos WHERE criteriosDeSeleccin GROUP BY listaCampos HAVING criteriosDeGrupo ORDER BY listaCampos [ASC|DESC] La consulta SELECT ms simple, seleccionando slo los campos Nombre y Apellido es: SELECT [Nombre], [Apellido] FROM Empleados;
Sintaxis SQL: Los nombres de campos se colocan entre corchetes y se separan con comas. Las instrucciones SQL terminan con punto y coma.
124

Visual Basic 6.0

Unidad 7.- Bases de datos

Para seleccionar todos los campos de la tabla Empleados: SELECT * FROM Empleados;
Sintaxis SQL: El asterisco en SQL indica todos los campos. Para el operador LIKE el comodn asterisco se sustituye por el caracter porcentaje %.

La clusula WHERE especifica una condicin para el filtrado de los registros. La clusula GROUP BY permite agrupar el conjunto de registros, y HAVING determina los registros a filtrar una vez efectuado el agrupamiento. Mientras GROUP BY ordena los registros por el campo especificado, ORDER BY permite seleccionar otro campo de ordenamiento. Por ejemplo se pueden obtener todos los empleados contratados despus del ao 2000, cuyo apellido comienza con las letras Ro (Rodriguez, Romn, Rosales,), agrupados por el departamento al que pertenecen, y con sueldo inferior o igual a 500 mil Bolvares, adems ordenado por apellido: SELECT [Nombre], [Apellido], [Departamento] FROM Empleados WHERE [Ingreso] > #31/12/2000# AND [Apellido] LIKE 'R%' GROUP BY [Departamento] HAVING [Sueldo] <= 500000 ORDER BY [Apellido] ASC;
Sintaxis SQL: Las cadenas de caracteres se especifican entre apstrofes. Las fechas se delimitan con el signo numeral. Los valores numricos no utilizan delimitadores.

Las funciones de agregado se utilizan en la definicin de campos de la consulta SELECT. El resultado de las funciones de agregado se adjudica a un alias mediante la palabra reservada AS. Por ejemplo, se puede calcular la suma de los sueldos de todos los empleados por departamento: SELECT [Departamento], SUM([Sueldo]) AS CostoDepartamento FROM Empleados; 7.4.4. Consultas de accin (DELETE, INSERT, UPDATE) a) Consulta de eliminacin (DELETE) DELETE [tabla.*] FROM expresinTabla WHERE criterios En el siguiente ejemplo se eliminan los registros de la tabla Empleados cuyo campo Estatus es igual Despedido. DELETE * FROM Empleados WHERE [Estatus] = 'Despedido'; b) Consulta de datos aadidos (INSERT) Se puede ejecutar una consulta de datos aadidos con registros mltiples: INSERT INTO destino [IN baseDatosExterna] SELECT [origen.]campo1[, campo2[, ...]
125

Visual Basic 6.0

Unidad 7.- Bases de datos

FROM expresinTabla Sera conveniente almacenar los registros de empleados despedidos en una tabla antes de ejecutar la consulta de eliminacin en la tabla de empleados: INSERT INTO Despedidos SELECT * FROM Empleados WHERE [Estatus] = 'Despedido'; Se puede ejecutar una consulta de datos aadidos sobre un nico registro: INSERT INTO destino [(campo1[, campo2[, ...]])] VALUES (valor1[, valor2[, ...]) Por ejemplo, para agregar un nuevo empleado a la tabla empleados: INSERT INTO Empleados ([Nombre], [Apellido], [Sueldo]) VALUES ('Pedro', 'Prez', 500000) c) Consulta de actualizacin (UPDATE) UPDATE tabla SET Campo1 = nuevoValor1, Campo2 = nuevoValor2 WHERE criterios; UPDATE es especialmente til cuando desea cambiar numerosos registros o cuando los registros que quiere cambiar estn en mltiples tablas. Puede cambiar varios campos simultneamente. El siguiente ejemplo incrementa el sueldo de todos empleados con 5 o ms de 5 aos de antigedad en un 10 por ciento. Simultneamente, se actualiza la edad del empleado. UPDATE Empleados SET [Sueldo] = [Sueldo]*1.1, [Edad] = DateDiff('yyyy', [Nacimiento], Date()), WHERE [Antiguedad] >= 5; 7.5. Reportes de bases de datos 7.5.1. Introduccin a reportes Como instrumento de administracin, el reporte o informe es usado para proporcionar a la gerencia los elementos necesarios para controlar una organizacin de forma efectiva. Los informes presentan los datos de una base de datos de una manera organizada, comprensiva y atractiva al usuario. Es posible generar pedidos, facturas, cartas, etiquetas de correos y otros de salida de datos. Los generadores de informe son programas especializados que cuentan con, adems de motores de bases de datos, motores de impresin que se encargan de controlar todo lo relacionado al formato de las hojas de reporte. Visual Basic en su versin 6.0 incluye un generador de informes integrado como objeto de la clase DataReport. En versiones anteriores, y en la nueva versin .NET, se incluye un programa generador de informes conocido como Crystal Report. Dada la eficiencia de Crystal Report y su vigencia en nuevas versiones de Visual Basic, en esta gua se tratar este generador de informes.
126

Visual Basic 6.0

Unidad 7.- Bases de datos

7.5.2. Pasos para crear un reporte Para crear un informe con Crystal Report, previamente debe asegurarse que est incluido en la lista de Diseadores en la ventana de Componentes (Ctrl+T). De esta manera aparece como una de las opciones dentro del men Proyecto del IDE de Visual Basic. Aunque es posible crear el reporte utilizando por separado el programa Crystal Report, y luego anexarlo al proyecto; los pasos que veremos a continuacin se refieren al uso del generador de informes en forma integrada. a) Seleccione el men Proyecto | Agregar Crystal Report 9. Aparece el cuadro de dilogo Crystal Report Gallery.

Figura 7.12.-Dilogo Crystal Report Gallery

b) Seleccione la opcin correspondiente al tipo de creacin de reporte, es decir; Using the Report Expert, As a Blank Report o From an Existing Report. En nuestro caso utilizaremos la primera opcin, para la cual se habilita la lista de asistentes segn el tipo de reporte, de la cual escogeremos Standard; y al presionar el botn OK se abre el asistente que se muestra en la figura 7.13.

127

Visual Basic 6.0

Unidad 7.- Bases de datos

Figura 7.13.-Dilogo de seleccin de Tablas para reportes

c) La opcin Create New Connection incluye OLEDB (ADO), el c ual despliega un sencillo asistente, parecido al del control de datos ADO, para seleccionar el motor y el archivo de base de datos. Al presionar el botn siguiente se abre el dilogo de seleccin de campos.

Figura 7.14.-Dilogo de seleccin de Campos para reportes

d) El siguiente cuadro de dilogo permite elegir uno o varios campos mediante los cuales se agrupan los datos en la presentacin del reporte. Para nuestro ejemplo, los productos podran agruparse por el campo fabricante.

128

Visual Basic 6.0

Unidad 7.- Bases de datos

Figura 7.15.-Dilogo para agrupar los registros de un reporte

e) El siguiente cuadro de dilogo permite elegir uno o varios campos mediante los cuales se filtran los datos con el objeto de mostrar slo ciertos registros. Por ejemplo, se podran mostrar slo los productos cuyo campo Existencia tenga el valor de cero con el objeto de generar un listado de fallas o faltantes. Es importante hacer notar que al seleccionar un campo determinado, aparecen el en cuadro de dilogo dos cajas combinadas, una para seleccionar el operador relacional, y otra para seleccionar el valor de comparacin.

Figura 7.16.-Dilogo para filtrar los registros de un reporte

f)

A continuacin se presenta un cuadro de dilogo con los estilos o plantillas de reporte disponibles, lo que facilita en gran medida la tarea de diseo.
129

Visual Basic 6.0

Unidad 7.- Bases de datos

Figura 7.17.-Dilogo para seleccionar la plantilla de diseo de un reporte

g) Finalmente el asistente consulta al usuario sobre dos aspectos. El primero solicita confirmacin para crear automticamente el formulario donde se presentar el reporte, y se recomienda tildar este aspecto positivamente. La segunda consulta es sobre la modificacin automtica de las propiedades del proyecto, la cual debe indicarse en NO para evitar que Crystal Report cambie el objeto inicial que se carga al ejecutarse la aplicacin.

Figura 7.18.-Dilogo de confirmacin para crear un reporte

h) A continuacin, en el proyecto se crea un formulario nuevo y un objeto Crystal Report. Tambin se puede observar el reporte en vista de diseo. Lo que queda es escribir el cdigo necesario para mostrar el nuevo formulario (mtodo Show).

130

Visual Basic 6.0

Unidad 7.- Bases de datos

7.5.3. Partes del generador de reportes En la vista de diseo, el generador de reportes presenta tres secciones bsicas: Encabezado de pgina, Detalle y Pie de pgina. Tanto el encabezado como el pie de pgina albergan etiquetas, membretes, ttulos de las columnas y cualquier otra informacin propia del informe. La seccin que contiene los datos es la de detalle. En esta seccin se colocan los campos de la base de datos.

Figura 7.19.-Vista de diseo de un reporte de Crystal Report

Cuando el informe se muestra en vista preliminar, el cuerpo de la pgina muestra los datos almacenados en la base de datos; y los campos especiales, como la fecha, se actualizan a la fecha del computador.

Figura 7.20.-Vista preliminar de un reporte de Crystal Report

131

Visual Basic 6.0

Unidad 7.- Bases de datos

7.5.4. Campos de un reporte Toda la informacin que aparece en un reporte est contenida en objetos grficos denominados campos. Adems de estos campos, la herramienta de diseo ofrece dos objetos grficos para la creacin de lneas y cuadros. A continuacin veremos los tipos de campos ms importantes que se pueden colocar en un reporte de Crystal Report.

Figura 7.21.-Tipos de campos de Crystal Report

a) Campos de base de datos: Son los campos que contienen informacin de las columnas de una tabla o Recordset de la base de datos activa. Se caracterizan porque se colocan en la seccin Detalle del generador de informe y se corresponden con cada uno de los registros de la base de datos.
Observacin: Slo deben arrastrase los campos seleccionados hasta la seccin correspondiente del generador de informe.

b) Campos de texto: Estos campos se corresponden al objeto etiqueta conocido de Visual Basic. Un campo de texto es simplemente un campo que contiene texto independiente. Puede contener un nico carcter, una palabra, frases completas o prrafos. Este es un comando usado para agregar etiquetas, ttulos, notas al pie, disculpas, explicaciones, comentarios o cualquier otra clase de texto que fuera necesario. Para agregar un campo de texto, este se debe escoger de la clase TextObject en la caja de herramientas, para dibujarlo luego en la seccin correspondiente.
Observacin: Como el tamao mximo de un campo de texto es 32K (incluyendo los caracteres retorno de carro y salto de lnea), se recomienda que los campos de texto se usen slo con bloques de texto de tamao ms manejable.

c) Campos de frmula: Los campos de frmula permiten crear un objeto de datos calculados. Una frmula es una instruccin que establece ciertas acciones sobre determinados datos antes de imprimirlos en el informe. Crystal Report ofrece un editor de ecuaciones, el cual se activa automticamente con el botn derecho del ratn y seleccionar New. El editor de ecuaciones contiene un conjunto de funciones
132

Visual Basic 6.0

Unidad 7.- Bases de datos

matemticas, de cadena y otras, operadores de varios tipos y los campos de la base de datos activa para construir expresiones de clculo.

Figura 7.22.-Editor de ecuaciones de Crystal Report

d) Campos especiales: La informacin adicional de un informe referida a fecha, nmero de pgina, nmero de registros, etc., se puede insertar utilizando los campos especiales. Los campos especiales son como los campos de frmula, pero estn predefinidos en el sistema.

Figura 7.23.-Campos especiales de Crystal Report

133

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

Unidad 8
Tecnologa OLE
A pocos hombres les falta capacidad; si fracasan es porque les falta dedicacin .- Calvin Coolidge

8.1. Teora de OLE 8.1.1. Estndar COM Visual Basic proporciona las herramientas que le permiten combinar objetos de distintos orgenes mediante la visin evolucionada de componentes de software, que se basa un estndar abierto y extensible conocido como el Modelo de Objetos Componentes (COM, Component Object Model). COM es una arquitectura o modelo de programacin de plataforma independiente, distribuida y orientada a objeto para la creacin de componentes de software (objetos) que puedan interactuar. Gracias a este estndar binario se pueden disear aplicaciones a partir de componentes que se comunican entre s, que interactan unos con otros, a travs de un conjunto comn de interfaces, con la velocidad y la sencillez de uso que caracteriza a Visual Basic. El Modelo de Objetos Componentes (COM), incluye la Automatizacin como el estndar de interoperabilidad, y ha permitido el desarrollo de las tecnologas que habilitan la interoperabilidad, conocidas como ActiveX. La Automatizacin es una caracterstica del Modelo de Objetos Componentes (COM), y este a su vez forma la infraestructura de la especificacin ActiveX. 8.1.2. Automatizacin La Automatizacin, antes denominada Automatizacin OLE, es un estndar usado por las aplicaciones para proveer objetos de una forma consistente a otras aplicaciones; en otras palabras, la norma que permite la comunicacin entre objetos de las aplicaciones se conoce como Automatizacin. Se puede decir que la automatizacin es la parte de OLE que define, no slo cmo se comparte el cdigo entre las aplicaciones, sino tambin cmo se pueden compartir servicios pblicos entre las mismas. La Automatizacin se usa tpicamente para crear aplicaciones que ofrecen objetos a herramientas de programacin y lenguajes de macros, para crear y manipular los objetos de una aplicacin desde otra aplicacin, o para crear herramientas para tener acceso a objetos y manipularlos. El uso de la Automatizacin en Visual Basic permite "tomar prestada" la funcionalidad de otras aplicaciones, al controlar sus objetos desde el interior de la aplicacin de Visual Basic. Si se trata de un objeto de Automatizacin, se pueden emplear sus propiedades y mtodos en el cdigo. Cada objeto de Automatizacin es un bloque que puede utilizarse en cdigo para recopilar y exponer informacin y funciones de otras aplicaciones, de forma que tengan sentido en la aplicacin actual. Por ejemplo, se puede generar una aplicacin que utilice Excel de Microsoft como
134

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

motor de clculo, y cuyos informes se generen como documentos de Microsoft Word. Muchas de las aplicaciones actuales han aprovechado la Automatizacin para usar el cdigo de otras aplicaciones. 8.1.3. Tecnologa OLE y ActiveX Una aplicacin completa se puede ofrecer como componente (objeto) a otra aplicacin mediante una parte de ActiveX conocida como OLE. Se dice que la tecnologa ActiveX incluye a la tecnologa OLE, pero que no est limitada a ella. Mientras ActiveX se utiliza en forma general, OLE se enmarca en la creacin y manipulacin de documentos compuestos; es decir, documentos con distintos formatos. A pesar de esta diferenciacin muchos autores coinciden en que OLE era la forma tradicional de referirse a lo que ahora se conoce como ActiveX. La palabra ActiveX es el nombre de marca de Microsoft para agrupar a las tecnologas que habilitan la interoperabilidad usando el Modelo de Objetos Componentes (COM). La interoperabilidad permite a componentes de software interactuar unos con otros sin tener en cuenta el lenguaje en que fueron escritos. As, ActiveX (anteriormente OLE) facilita la integracin de aplicaciones permitiendo que los programadores definan juegos de interfaces, grupos de mtodos y propiedades a travs de los cuales una aplicacin accede a los servicios de objetos de otra aplicacin. El concepto de ofrecer funcionalidad mediante interfaces estndar hace de ActiveX una tecnologa abierta y extensible, ya que todas las aplicaciones basadas en ActiveX pueden definir y usar estas interfaces. La tecnologa ActiveX permite ensamblar componentes software reutilizables en aplicaciones y servicios, conocidos como Componentes ActiveX. 8.1.4. Componentes ActiveX Un componente ActiveX es un fragmento reutilizable de cdigo de programacin y datos compuesto por uno o ms objetos creados mediante la tecnologa ActiveX. Un componente ActiveX es una unidad de cdigo ejecutable, como un archivo .exe, .dll u .ocx, que sigue la especificacin ActiveX para proporcionar objetos. Los componentes ActiveX le ofrecen al programador la capacidad de ensamblar aplicaciones sofisticadas a partir de piezas que ya existen, dentro de las cuales se encuentran: a) Componentes incluidos en las aplicaciones habilitadas para ActiveX Las aplicaciones compatibles con la tecnologa ActiveX, como Microsoft Excel, Microsoft Word y Microsoft Access, proporcionan objetos que se puede manipular mediante programacin desde la aplicacin de Visual Basic. Por ejemplo, puede usar en su aplicacin propiedades, mtodos y eventos de una hoja de clculo de Microsoft Excel o de un documento de Microsoft Word. b) Componentes de cdigo ActiveX Los componentes de cdigo (antes Servidores OLE) son bibliotecas de objetos programables que proporcionan una forma fcil de empaquetar el cdigo para su reutilizacin. A diferencia de un objeto contenido en una aplicacin habilitada para ActiveX, un objeto contenido en el componente de cdigo se puede ejecutar en el mismo proceso que la aplicacin, lo que permite un acceso ms rpido al objeto. c) Controles ActiveX
135

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

Puede agregar caractersticas sin necesidad de crearlas, utilizando controles ActiveX como componentes. Un control ActiveX es una extensin del cuadro de herramientas de Visual Basic. Los controles ActiveX se usan como cualquiera de los controles estndar incorporados, como el control CheckBox. Cuando se agrega un control ActiveX, este pasa a formar parte del entorno de desarrollo y del tiempo de ejecucin, y proporciona nueva funcionalidad a la aplicacin. Los controles ActiveX incrementan la capacidad del programador conservando algunos mtodos, propiedades y eventos ya familiares, como la propiedad Name, que se comportan como cabra esperar. Pero adems, los controles ActiveX incorporan mtodos y propiedades adicionales que aumentan enormemente la flexibilidad y capacidad del programador en Visual Basic. Existen controles ActiveX de diversos proveedores que ofrecen muchas caractersticas especializadas, como mostrar un calendario en un formulario o leer datos con un determinado formato. Por ejemplo, las ediciones Profesional y Empresarial de Visual Basic incluyen los controles Windows Common, que permiten crear aplicaciones totalmente compatibles con las barras de herramientas, barras de estado y modos de ver de las estructuras de directorios de Windows en sus diferentes versiones. d) Documentos ActiveX Los documentos ActiveX le permiten crear aplicaciones interactivas para Internet. Se pueden definir formularios que pueden aparecer en ventanas de los exploradores de Internet. Los documentos ActiveX pueden mostrar cuadros de mensajes y formularios secundarios, y pueden contener controles ActiveX. Los documentos ActiveX tambin pueden funcionar como componentes de cdigo. Adems de los tipos de componentes ActiveX existentes antes expuestos, Visual Basic tambin permite al programador crear sus propios componentes. El desarrollo de componentes software mediante la tecnologa ActiveX no se debe confundir con la programacin orientada a objetos (OOP); ya que esta se ocupa de crear objetos, mientras que ActiveX se ocupa de que los objetos funcionen juntos. 8.1.5. Componentes en proceso y fuera de proceso Los componentes ActiveX interactan con la aplicacin y entre s mediante una relacin cliente-servidor. El cliente es el cdigo de aplicacin que utiliza las caractersticas de un componente. El servidor es el componente y sus objetos asociados. Dependiendo de la forma en que est implementado, un componente ActiveX se puede ejecutar en el mismo proceso que las aplicaciones cliente o en un proceso diferente. En general, si un componente ActiveX se ha implementado como parte de un archivo ejecutable (.exe), se trata de un servidor fuera de proceso y se ejecuta en su propio proceso. Si se ha implementado como una biblioteca de vnculos dinmicos (.dll u .ocx), se trata de un servidor en proceso y se ejecuta en el mismo proceso que la aplicacin cliente.

136

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

8.2. Aplicaciones habilitadas para ActiveX 8.2.1. Objetos insertables Hay tres categoras generales de controles en Visual Basic: los controles intrnsecos, los controles ActiveX, y los objetos insertables. Estos ltimos son el caso de los componentes compatibles con la vinculacin e incrustacin de objetos admitido tradicionalmente por OLE. Se pueden insertar objetos componentes (como documentos de Word, u Hojas de clculo de Excel) en una aplicacin sin necesidad de escribir cdigo, utilizando la interfaz visual del componente. Hay dos maneras de usar la interfaz visual de un componente: a) Agregando un control contenedor OLE a la aplicacin, e insertando despus un objeto en el control contenedor OLE. b) Agregando la clase del objeto al cuadro de herramientas, y despus, agregando un objeto de esa clase a la aplicacin, como lo hara con un control TextBox sobre el formulario. La clase es de un control de aplicacin habilitada para ActiveX. 8.2.2. Control contenedor OLE El control contenedor OLE proporciona la mxima flexibilidad para usar la interfaz visual de un objeto. Un control contenedor OLE slo puede contener un objeto cada vez. Hay varias formas de crear un objeto vinculado o incrustado en el control contenedor OLE una vez que se ha dibujado sobre el formulario. El mtodo elegido depender de si va a crear el objeto vinculado o incrustado en tiempo de diseo o en tiempo de ejecucin. A continuacin veremos detalles de inters relacionados al control contenedor OLE, como incrustacin y vinculacin, formas de insertar objetos, las propiedades y mtodos mas resaltantes del control, y algunas utilidades bsicas. a) Incrustacin y vinculacin Si un objeto esta vinculado, se crea una referencia o apuntador al documento fuente, de tal manera que las modificaciones de los datos durante la ejecucin se efectan en el documento original. Si el objeto esta incrustado, se crea una copia del documento original en la aplicacin, las modificaciones se efectan slo en y durante la aplicacin de Visual Basic, y en consecuencia los cambios no son persistentes, ya que se pierden al terminar o detener la ejecucin. El control contenedor OLE dispone de mtodos para guardar los cambios de los datos de objetos incrustados mediante archivos binarios. b) Insertar objetos en tiempo de diseo Para insertar objetos en tiempo de diseo se utiliza el cuadro de dilogo Insertar objeto, o el cuadro de dilogo Pegado especial. El cuadro de dilogo Insertar objeto (ver Figura 8.1) aparece automtica e inmediatamente despus de dibujar el control contenedor OLE sobre el formulario. Este permite escoger entre crear un nuevo objeto, o utilizar un documento ya existente. Si se activa la casilla Vincular, el objeto que se crea es vinculado. Tambin es posible escoger si se muestra el contenido del documento o el icono de la interfaz del documento. Si se cancela el cuadro de dilogo, el control OLE quedar vaco. En este caso las propiedades SourceDoc
137

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

y SourceItem en la ventana de propiedades permiten activar una vez ms el cuadro de dilogo.

Figura 8.1.- Dilogo Insertar objeto

Por su parte, el cuadro de dilogo Pegado especial est disponible si se ha copiado algo en el portapapeles, y se puede activar haciendo clic derecho sobre el control contenedor OLE. La apariencia de este dilogo se muestra a continuacin.

Figura 8.2.- Dilogo Pegado especial

c) Insertar objetos en tiempo de ejecucin Se puede crear un objeto vinculado o incrustado desde un archivo, en tiempo de ejecucin, con los mtodos CreateLink o CreateEmbed del objeto contenedor OLE. Estos mtodos requieren el argumento documento fuente, que es la ruta de acceso y el nombre del archivo desde el cual se crea el objeto. Opcionalmente, para objetos vinculados, se puede indicar el argumento elemento fuente, que especifica los datos que se desean vincular o incrustar del documento fuente. Tambin, para objetos incrustados, es opcional indicar el argumento clase, para especificar el nombre de la interfaz que provee el objeto. El siguiente fragmento de cdigo crea un objeto vinculado proveniente de la hoja de clculo activa del archivo prueba1.xls, y consiste de las primeras 15 filas y 8 columnas:
138

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

OLE1.CreateLink "C:\EXCEL\PRUEBA1.XLS", "L1C1:L15C8" Para el caso de incrustacin se especifica la clase, como se muestra: OLE1.CreateEmbed " C:\EXCEL\PRUEBA2.XLS", "Excel.Sheet" d) Propiedades del control contenedor OLE La siguiente tabla enumera las propiedades del control OLE.
Propiedad Class DisplayType Object OLEType OLETypeAllowed SizeMode SourceDoc SourceItem Descripcin Identifica el objeto contenido en el control contenedor OLE. Presentacin con su contenido o como un icono. Propiedad de slo lectura, en ejecucin, que indica la clase activa. Determina si un objeto se puede vincular o incrustar en el control OLE. Determina el tipo de objeto que puede crear (vinculado, incrustado). Determina el tipo de ajuste de tamao de la imagen de los datos. Esta propiedad determina el archivo de origen del vnculo o la plantilla. Especifica los datos que se van a vincular dentro de un archivo.
Tabla 8.1.- Propiedades del control contenedor OLE

La propiedad Class determina el tipo de objeto que contiene el control OLE. Por ejemplo, si contiene datos de una hoja de clculo de Microsoft Excel versin 5.0, la propiedad Class es Excel.Sheet.5. Object es la propiedad que representa al objeto contenido en el control OLE, y se utiliza para realizar tareas de Automatizacin, que incluyen la manipulacin por programa de las propiedades y mtodos que el objeto admite. Mediante la propiedad SourceDoc se especifica la ubicacin y el nombre del archivo de documento ActiveX. e) Mtodos del control contenedor OLE La siguiente tabla muestra los mtodos ms importantes que dispone el control contenedor OLE.
Mtodo CreateEmbed CreateLink DoVerb InsertObjDlg PasteSpecialDlg SaveToFile ReadFromFile Descripcin Crea un objeto incrustado. Crea un objeto vinculado. Ejecuta el verbo especificado (o predeterminado) sobre el objeto; es decir: Abrir, Editar, Imprimir, etc. Muestra el cuadro de dilogo Insertar objeto, para escoger el objeto que contendr el control OLE. Muestra el cuadro de dilogo Pegado especial, para pegar el contenido del Portapapeles en el control OLE. Guarda los datos de objetos incrustados en archivos binarios. Recupera los datos guardados en archivos binarios de objetos incrustados.
Tabla 8.2.- Mtodos del control contenedor OLE

f)

Guardar y recuperar datos de objetos incrustados Los datos asociados con un objeto incrustado no son persistentes; es decir, cuando se cierra un formulario que contiene un control contenedor OLE, los cambios efectuados sobre los datos asociados al control se pierden si no se guardan previamente. Una vez que los datos se han guardado en un archivo, posteriormente puede abrir el archivo y restaurar los datos del objeto. Para esto slo se pueden utilizar archivos binarios abiertos, y los mtodos SaveToFile o ReadFromFile segn corresponda. El procedimiento de guardado se ilustra a continuacin:
139

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

Private Sub cmdGuardarOLE_Click() Open "PRUEBA.BIN" For Binary As #1 OLE1.SaveToFile 1 Close #1 End Sub

'Abrir archivo 'Guardar arch. 'Cerrar arch.

Y el procedimiento de evento siguiente permite la recuperacin de los datos: Private Sub cmdRecuperarOLE_Click() Open "PRUEBA.BIN" For Binary As #1 OLE1.ReadFromFile 1 Close #1 End Sub 'Abrir archivo 'Leer archivo 'Cerrar arch.

Cada vez que se modifica el contenido de un objeto se llama al evento Updated. Este evento es til para determinar si los datos de un objeto se han modificado antes de guardarlos. Para ello, establezca en el evento Updated una variable global que indique si es necesario guardar el objeto. g) Ejecutar el verbo predeterminado de un objeto Una vez que se ha cargado un objeto en el contenedor OLE, se puede ejecutar la accin o verbo predeterminado del objeto mediante el mtodo DoVerb con argumento 0. La accin o verbo predeterminado es la operacin que se lleva a cabo cuando se efecta un doble clic sobre el documento fuente en una ventana o Explorador de Windows. En la mayora de los casos, el verbo predeterminado es Editar. Otros verbos comunes son Abrir, Mostrar, Imprimir, etc. Por ejemplo, el siguiente fragmento de cdigo activa la accin predeterminada del objeto contenido en OLE1: OLE1.DoVerb 0 'Cero para verbo predeterminado 8.2.3. Control de aplicacin ActiveX De la misma forma que se utiliza el cuadro de herramientas para agregar a un formulario uno de los controles incorporados de Visual Basic, tambin puede usarse para agregar un objeto de aplicacin habilitada para ActiveX. En primer lugar, se agrega la clase del objeto al cuadro de herramientas y, despus, se agrega el objeto a un formulario. Para agregar la clase de un objeto al cuadro de herramientas se debe: a) Elegir Componentes en el men Proyecto, o presionar Ctrl+T. b) Del dilogo Componentes, seleccionar la ficha Objetos insertables (ver Figura 8.3).

140

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

Figura 8.3.- Dilogo Componentes (Objetos insertables)

c) Seleccionar la clase que se desea agregar al cuadro de herramientas. Visual Basic agregar un botn de esa clase al cuadro de herramientas (ver Figura 8.4).

Excel

Word

WordPad

Paint

Graph

Figura 8.4.- Cuadro de herramientas (Objetos insertables)

Por ejemplo, para agregar al cuadro de herramientas un botn Hoja de clculo de Excel, seleccione Hoja de clculo de Microsoft Excel en la ficha Objetos insertables del cuadro de dilogo Componentes. Una vez agregada la clase del objeto al cuadro de herramientas, puede dibujarla en un formulario para crear un objeto de esa clase, es decir una hoja de clculo de Excel sobre el formulario. 8.3. Componentes de cdigo 8.3.1. Referencias a un objeto Si un componente ActiveX proporciona una biblioteca de tipos, es necesario agregar una referencia a la biblioteca de tipos en el proyecto de Visual Basic antes de poder usar los objetos de la biblioteca. Una biblioteca de tipos de un componente Active X contiene definiciones de todos los objetos que proporciona el
141

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

componente, incluidas definiciones para todos los mtodos, propiedades y eventos disponibles. 8.3.2. Crear referencias a objetos Para crear una referencia a un objeto definido en una biblioteca de tipos es necesario: a) Elegir Referencias, en el men Proyecto. En el cuadro de dilogo Referencias (ver Figura 7.9), seleccionar el nombre del componente ActiveX que contiene los objetos que desea usar en la aplicacin. Se puede usar el botn Examinar para buscar el archivo de biblioteca de tipos que contiene el objeto que se necesita. Las bibliotecas pueden tener una extensin de archivo .olb (librera de objetos) o .tlb (librera de tipos). Los archivos ejecutables (.exe) y de biblioteca de vnculos dinmicos (.dll) tambin pueden proporcionar bibliotecas de tipos, por lo que tambin se pueden buscar archivos que tengan estas extensiones de archivo. b) Elegir Examinador de objetos, en el men Ver, para ver la biblioteca de tipos a la que se ha hecho referencia, seleccionando la biblioteca de tipos apropiada en la lista Proyecto/Biblioteca del cuadro de dilogo Examinador de objetos (ver Figura 4.1). Se pueden usar todos los objetos, mtodos y propiedades que se enumeran en el Examinador de objetos de la aplicacin. c) Declarar una variable de objeto de la clase del objeto. Por ejemplo, se podra declarar una variable de la clase Excel.Chart para hacer referencia a un objeto Chart de Microsoft Excel. Dim xlChart As Excel.Chart d) Asignar una referencia de objeto a la variable utilizando la palabra clave New, CreateObject o GetObject en una instruccin Set. Si el objeto es dependiente (una hoja es dependiente de un libro en Excel), se debe asignar una referencia de objeto utilizando un mtodo de un objeto de nivel superior en una instruccin Set. La asignacin de referencia de objeto crea propiamente al objeto. En el ejemplo siguiente se abre el archivo Ingresos.xls como un libro de Microsoft Excel: Dim Libro As Excel.Workbook Set Libro = GetObject("C:\Cuentas\Ingresos.xls") Observe que antes de usar la instruccin Set, se aplica el punto (c) de declaracin de la variable de objeto; en este caso se declara Libro como libro de Excel. 8.3.3. Utilizar las propiedades y mtodos de un objeto Despus de asignar una referencia de objeto a una variable de objeto (despus de crear el objeto), puede usar la variable para manipular las propiedades y los mtodos del objeto. Se mantiene la sintaxis objeto.propiedad para establecer y devolver los valores de la propiedad de un objeto o la sintaxis objeto.mtodo para usar los mtodos del objeto. Por ejemplo, para cerrar el objeto Libro, mediante su mtodo Close. Libro.Close
142

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

8.3.4. Responder a los eventos de un objeto Para hacer que una aplicacin responda a los eventos de un objeto proporcionado por componentes ActiveX, primero se debe declarar la variable de objeto mediante la palabra clave WithEvents, ya que los procedimientos de evento para los objetos proporcionados por componentes no estn disponibles automticamente. Despus de declarar una variable de objeto mediante WithEvents, en la ventana de cdigo la variable se utiliza para presentar procedimientos de evento para el objeto. Entonces se puede agregar cdigo a estos procedimientos para responder a los eventos del objeto. En forma detallada, para crear un procedimiento de evento para un objeto proporcionado por un componente, se siguen los pasos a continuacin: a) La declaracin descrita en el punto (c) de 8.3.2, debe hacerse en la seccin de declaraciones de un formulario o mdulo de clase, utilizando la palabra reservada WithEvents de la siguiente manera: Dim WithEvents Libro As Excel.Workbook b) Al efectuar la declaracin anterior, Visual Basic agrega y muestra el nombre de la variable de objeto al cuadro de lista Objeto de la ventana de cdigo. Cuando selecciona la variable de objeto, Visual Basic muestra los procedimientos de evento del objeto en el cuadro de lista Eventos de la ventana de cdigo (ver Figura 8.5).

Figura 8.5.- Ventana de cdigo con eventos de un objeto componente

c) Finalmente, slo resta seleccionar un procedimiento de evento y agregarle el cdigo que se desea ejecutar cuando se produzca el evento. Por ejemplo, suponga que una aplicacin de Visual Basic se basa en los datos presentados en un libro de trabajo de Microsoft Excel y que ya ha declarado una variable de objeto Libro con WithEvents para el libro de trabajo. Es necesario que cuando un usuario intente cerrar el libro de trabajo, la aplicacin muestre un mensaje explicativo, y evite que se cierre el libro de trabajo, tomando en cuenta que los datos del libro son vitales en el normal funcionamiento de la aplicacin. En
143

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

este sentido, el procedimiento de evento idneo del objeto componente es Libro_BeforeClose. El fragmento de cdigo siguiente muestra este procedimiento de evento y las lneas de instruccin que se ejecutarn al intentar cerrar el libro de trabajo. Private Sub Libro_BeforeClose(Cancel As Boolean) Libro.Application.Visible = False ' Oculta la ventana de Microsoft Excel. MsgBox "Este libro de trabajo debe seguir abierto..." ' Muestra el mensaje explicativo. Libro.Application.Visible=True ' Muestra nuevamente la ventana de Microsoft Excel. Cancel = True ' El argumento Cancel a True cancela el cierre. End Sub 8.3.5. Ejemplo completo usando componente de cdigo Suponga que ha creado un formulario con tres cuadros de texto (Text1, Text2 y Text3) y un botn de comando (Command1), y ha agregado al proyecto una referencia a la biblioteca de objetos de Microsoft Excel (Microsoft Excel 11.0 Object Library). Se agregar cdigo al procedimiento de evento Command1_Click del botn de comando que utilice el mtodo Formula de Microsoft Excel para sumar dos nmeros introducidos en Text1 y Text2, y que muestre el resultado en Text3, tal como se muestra: Private Sub Command1_Click() ' Declarar variables de objeto para Microsoft Excel. Dim Aplicacin As Excel.Application Dim Libro As Excel.Workbook Dim Hoja As Excel.Worksheet ' Asignar referencias de objeto a las variables. Set Aplicacin = New Excel.Application Set Libro = xlApp.Workbooks.Add Set Hoja = xlBook.Worksheets.Add ' Asignar los valores de las cajas de texto a celdas. Hoja.Cells(1, 1).Value = Text1.Text Hoja.Cells(2, 1).Value = Text2.Text ' Usar el mtodo Formula para sumar los valores Hoja.Cells(3, 1).Formula = "=L1C1 + L2C1" Text3.Text = Hoja.Cells(3, 1) ' Guardar la hoja de clculo (si lo desea). Hoja.SaveAs "C:\Temp.xls" ' Cerrar el libro de trabajo con el mtodo Close. Libro.Close ' Cerrar Microsoft Excel con el mtodo Quit. Aplicacin.Quit
144

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

' Liberar los objetos. Set Aplicacin = Nothing Set Libro = Nothing Set Hoja = Nothing End Sub 8.4. Controles ActiveX 8.4.1. Cargar controles ActiveX Los controles ActiveX tienen la extensin de archivo .ocx. Se pueden usar los controles ActiveX suministrados con Visual Basic o bien puede conseguir controles adicionales desarrollados por otros programadores en la Web o por otros medios. Los controles ActiveX de Visual Basic son controles de 32 bits. Algunos programadores ofrecen controles ActiveX de 16 bits, que no son compatibles para Visual Basic 6.0. Al igual que los objetos insertables, para usar controles ActiveX es necesario cargarlos previamente al cuadro de herramientas. Para agregar un control al cuadro de herramientas de un proyecto se siguen los siguientes pasos: a) En el men Proyecto, haga clic en Componentes para mostrar el cuadro de dilogo Componentes, como se ve en las figuras 6.5 y 7.5. Tambin se puede ver el cuadro de dilogo Componentes si hace clic con el botn secundario del Mouse (ratn) en el cuadro de herramientas, o presionando Ctrl+T. b) Los elementos que se muestran en este cuadro de dilogo incluyen todos los controles ActiveX registrados. Marque la casilla de verificacin que hay a la izquierda del nombre del control. c) Haga clic en Aceptar para que todos los controles ActiveX que haya seleccionado aparezcan ahora en el cuadro de herramientas. Para agregar controles ActiveX al cuadro de dilogo Componentes, haga clic en el botn Examinar y busque los archivos que tengan la extensin .ocx. Estos archivos suelen estar instalados en el directorio \Windows\System o System32. 8.4.2. Archivos de controles ActiveX En la tabla siguiente se muestran los nombres de los componentes ms comunes que del cuadro dilogo Componentes, sus archivos y los controles ActiveX que contienen.
Nombre del componente Microsoft ADO Data Control 6.0 Microsoft Chart Control 5.5 Microsoft Comm Control 6.0 Microsoft Common Dialog Control 6.0 Microsoft Data Bound Grid Control 5.0 Microsoft Data Bound List Controls 6.0 Microsoft Data Grid Control 6.0 Microsoft Data List Controls 6.0 Microsoft FlexGrid Control 6.0 Microsoft Grid Control Microsoft Hierarchical Flex Grid Control 6.0 Microsoft MaskedEdit Control 6.0 Microsoft Multimedia Control 6.0 Nombre del archivo MSADODC.OCX MSCHART.OCX MSCOMM32.OCX COMDLG32. OCX DBGRID32.OCX DBLIST32.OCX MSDATGRD.OCX MSDATLST.OCX MSFLXGRD.OCX GRID32.OCX MSHFLXGD.OCX MSMASK32.OCX MCI32.OCX
145

Controles ActiveX ADO Data Control Microsoft Chart MSComm CommonDialog DBGrid DBList, DBCombo DataGrid DataList, DataCombo MSFlexGrid Grid MSHFlexGrid MaskedEdit Multimedia MCI

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

Nombre del componente Microsoft PictureClip Control 6.0 Microsoft RichTextBox Control 6.0 Microsoft SysInfo Control 6.0 Microsoft TabbedDialog Control 6.0 Microsoft Windows Common Controls2 6.0 Microsoft Windows Common Controls3 6.0 Microsoft Winsock Control 6.0 Microsoft Windows Common Controls 6.0

Nombre del archivo PICCLP32.OCX RICHTX32.OCX SYSINFO.OCX TABCTL32.OCX MSCOMCT2.OCX COMCT332.OCX MSWINSCK.OCX MSCOMCTL.OCX

Controles ActiveX PictureClip RichTextBox SysInfo Microsoft Tab Control Animation, UpDown, MonthView, DTPicker, FlatScrollbar CoolBar WinSock TabStrip, Toolbar, StatusBar, ProgressBar, TreeView, ListView, ImageList, Slider, ImageCombo
Tabla 8.3.- Archivos de controles ActiveX

En adelante se ver una introduccin de algunos de los controles ActiveX de la tabla anterior, refirindose a los mismos por su nombre de clase. 8.4.3. Control ActiveX Animation El control Animation reproduce secuencias de vdeo AVI sin sonido. Una secuencia AVI est formada por una serie de marcos de mapas de bits, como una pelcula. Un ejemplo es la hoja de papel que "vuela" de una carpeta a otra al copiar archivos en el sistema Windows.

Figura 8.6.- Ejemplo del control ActiveX Animation

Aunque las secuencias AVI pueden tener sonido, cuando lo tienen no pueden usarse con el control Animation y se producir un error si intenta cargar un archivo de ese tipo. Slo puede usar secuencias AVI sin sonido. Para reproducir archivos .avi con sonido, utilice el control Multimedia (MCI).
Nota: Encontrar diversos archivos .avi sin sonido en el directorio \Graphics\ AVI del CD-ROM de Visual Basic.

En tiempo de ejecucin, el control Animation no tiene un marco visible. El control Animation mantiene un subproceso de ejecucin independiente mientras se reproduce la secuencia. Por tanto, la aplicacin no se bloquea y puede continuar la ejecucin dentro de su proceso. Al usar el control, el archivo .avi se abre con el mtodo Open, se reproduce con el mtodo Play y se detiene con el mtodo Stop. Una vez terminada la reproduccin de un vdeo, puede usar el mtodo Close para cerrar el archivo. No es necesario cerrar un archivo para poder abrir otro. En el cdigo siguiente se utilizan dos controles CommandButton, cmdPlay y cmdStop. Como ttulo de cmdPlay,
146

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

establezca "Abrir y reproducir". El ttulo del control CommandButton cmdStop es "Detener". Private Sub cmdPlay_Click() anmAvi.Open "C:\Videos\FILECOPY.AVI" anmAVI.Play End Sub Este cdigo detiene la reproduccin del vdeo: Private Sub cmdStop_Click() anmAVI.Stop End Sub 8.4.4. Control ActiveX CoolBar El control CoolBar (Comctl332.ocx) permite crear barras de herramientas configurables por el usuario similares a las de Microsoft Internet Explorer. El control CoolBar es un control contenedor, capaz de contener otros controles secundarios. Consta de una o ms zonas dimensionables conocidas como bandas. Cada banda puede albergar un nico control secundario, como se muestra en la Figura 8.7.

Figura 8.7.- Ejemplo de control ActiveX CoolBar

El mtodo para agregar controles secundarios a un control CoolBar vara ligeramente del mtodo para agregar controles a otros contenedores. El control se debe asociar primero con un objeto Band; el lmite de controles secundarios por banda es de uno, de tal manera que el control CoolBar contendr tantos objetos como bandas. Para agregar un objeto a un CoolBar: a) Con el control CoolBar seleccionado, seleccione un control del Cuadro de herramientas y dibjelo sobre el control CoolBar. b) Abra la Pgina de propiedades de CoolBar y seleccione la ficha Bandas. c) Use los botones Index para seleccionar el ndice del objeto Band en el que desea que aparezca el control. d) Seleccione el control de la lista Secundario. El control secundario se desplazar y se dimensionar con el objeto Band en tiempo de ejecucin.
Nota: Si agrega simplemente un control sin asociarlo a una banda, aparecer como un control flotante sobre el control CoolBar en tiempo de ejecucin. Para evitarlo, establezca la propiedad Visible del control a False.

147

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

Puede modificar los controles contenidos en un CoolBar en tiempo de ejecucin con la propiedad Child del objeto Band. 8.4.5. Control ActiveX DTPicker El control DateTimePicker muestra informacin de fecha, de hora o ambas a la vez y acta como una interfaz en la que los usuarios pueden modificar la informacin de fecha y de hora. Cuando el control DateTimePicker est desplegado, aparece un calendario.

Figura 8.8.- Ejemplo del control ActiveX DTPicker

El control tiene dos modos de funcionamiento diferentes: a) En el modo Calendario desplegable (predeterminado, ver Figura 8.8) se muestra al usuario un calendario en el que puede selecciona una fecha. b) En el modo Formato de hora, el usuario selecciona un campo en la fecha u hora mostrada (por ejemplo el mes, el da, el ao, hora, minuto, etc.) y establece su valor con la flecha hacia arriba o hacia abajo situada a la derecha del control. Puede usar el control para mostrar la fecha en los varios formatos preestablecidos, entre los cuales estn: fecha corta (14/11/97), fecha larga (Viernes, 14 de noviembre de 1997) y hora (7:00:00 PM). Tambin es posible especificar formatos personalizados mediante el uso de cadenas de formato. 8.4.6. Control ActiveX ImageList Un control ImageList contiene una coleccin de imgenes que pueden usar otros controles comunes de Windows, especficamente los controles ListView, TreeView, TabStrip y ToolBar. El uso del control ImageList como almacn nico de imgenes le ahorrar tiempo de desarrollo, pues le permite escribir cdigo que se refiera a un catlogo de imgenes nico y coherente. En lugar de escribir cdigo que cargue mapas de bits o iconos (con la funcin LoadPicture), puede llenar el control ImageList una nica vez, asignar valores a la propiedad Key si lo desea y escribir cdigo que utilice las propiedades Key o Index para hacer referencia a cada una de las imgenes. El objeto ListImage pertenece a la coleccin ListImages, y tiene las propiedades estndar de las colecciones: Key, Index y Count. Tambin dispone de mtodos estndar, como Add, Remove y Clear. Por ltimo, el control presenta los mtodos Overlay, Draw y ExtractIcon, que permiten crear imgenes compuestas, dibujar imgenes en los objetos que tengan la propiedad hDC y crear
148

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

un icono a partir de un mapa de bits almacenado en el control. Para agregar una imagen (objetos ListImage) en tiempo de diseo, utilice el cuadro de dilogo Pginas de propiedades del control ImageList: a) Haga clic con el botn secundario del Mouse (ratn) en el control ImageList y seleccione Propiedades. b) Haga clic en la ficha Imgenes para mostrar las pginas de propiedades del control ImageList, como se ilustra en la figura siguiente.

Figura 8.9.- Propiedades del control ActiveX ImageList

c) Haga clic en el botn Insertar imagen para mostrar el cuadro de dilogo Seleccionar imagen. d) Utilice el cuadro de dilogo para buscar los archivos de mapa de bits o de icono, y despus haga clic en Abrir. e) Asigne un valor nico a la propiedad Key. Para esto, haga clic en el cuadro Key y escriba una cadena. f) Repita los pasos 3 a 6 hasta que haya llenado el control con las imgenes deseadas.

8.4.7. Control ActiveX TreeView El control TreeView est diseado para mostrar datos de naturaleza jerrquica, como rboles organizativos, las entradas de un ndice, o los archivos y directorios de un disco. Como veremos en forma detallada, un TreeView est formado por nodos u objetos Node (ver Figura 8.10).

149

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

Figura 8.10.-Ejemplo del control ActiveX TreeView

a) Establecer las propiedades del objeto Node Un "rbol" se compone de ramas sucesivas de "nodos" y cada nodo consta normalmente de una imagen (establecida con la propiedad Image) y una etiqueta (establecida con la propiedad Text). Un control ImageList asociado al control TreeView proporciona las imgenes para los nodos. Un nodo puede expandirse o contraerse dependiendo de si tiene o no nodos secundarios (nodos hijos que parten de l). En el nivel superior estn los nodos "raz" (padre), y cada nodo raz puede tener cualquier nmero de nodos secundarios. El nmero total de nodos no est limitado (salvo por las restricciones del sistema). Cada nodo de un rbol es en realidad un objeto Node programable que pertenece a la coleccin Nodes. Como en otras colecciones, cada miembro de la coleccin tiene un valor nico en las propiedades Index y Key, lo que permite el acceso a las propiedades del nodo. Por ejemplo, el cdigo siguiente utiliza el ndice de un nodo determinado ("7") para establecer sus propiedades Image y Text: tvwMirbol.Nodes(7).Image = "cerrado" tvwMirbol.Nodes(7).Text = "IEEE" Sin embargo, si se ha asignado al nodo una clave nica (propiedad Key), por ejemplo "7 ID", el mismo cdigo se podra escribir de esta forma: tvwMirbol.Nodes("7 ID").Image = "cerrado" tvwMirbol.Nodes("7 ID").Text = "IEEE" b) Relaciones entre nodos y referencias a nodos relativos Cada nodo puede ser secundario (hijo) o primario (padre), segn su relacin con otros nodos. El objeto Node cuenta con varias propiedades que devuelven distintos datos sobre los nodos secundarios o primarios. Por ejemplo, el cdigo siguiente utiliza la propiedad Children para devolver el nmero de nodos secundarios (hijos) que tiene un nodo (el nodo 10): MsgBox tvwMirbol.Nodes(10).Children Algunas de las propiedades no devuelven informacin numrica o de dato como lo hace Children, sino que devuelven una referencia a otro objeto Node. Por ejemplo, la propiedad Parent devuelve una referencia al nodo primario
150

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

(padre) de un nodo especfico (hijo). Con esta referencia se puede manipular el nodo primario, como se muestra en el cdigo siguiente para Text e Index del nodo primario de nodo 10: MsgBox tvwMirbol.Nodes(10).Parent.Text MsgBox tvwMirbol.Nodes(10).Parent.Index Puede usar la instruccin Set con una variable de objeto de tipo Node para manipular referencias a otros objetos Node. Por ejemplo, el cdigo siguiente establece una variable de objeto Node con la referencia que devuelve la propiedad Parent. Despus se utiliza la variable de objeto en lugar del objeto: Dim tempNode As Node ' Declara una variable de objeto. Set tempNode = tvwMirbol.Nodes(10).Parent MsgBox tempNode.Text ' Devuelve la propiedad Text. MsgBox tempNode.Index ' Devuelve la propiedad Index. c) Agregar objetos Node a la coleccin Nodes Para agregar un objeto Node al rbol, utilice el mtodo Add (coleccin Nodes). Este mtodo tiene dos argumentos, relative y relationship, que determinan dnde se agregar el nodo. El primer argumento, relative, indica el nombre de un nodo, mientras que el segundo, relationship, especifica la relacin entre el nuevo nodo y el indicado en relative. Por ejemplo, el cdigo siguiente agrega un nodo denominado "nodo 11" como un nodo secundario de otro llamado "nodo 7". La constante intrnseca tvwChild especifica que el nuevo nodo es un nodo secundario (hijo) del indicado en el primer argumento. El tercer argumento asigna la propiedad Key al nuevo nodo. tvwMirbol.Nodes.Add "nodo 7", tvwChild, "nodo 11" Otras relaciones posibles, adems de tvwChild son las siguientes:
Constante tvwLast tvwNext tvwPrevious tvwChild Valor 1 2 3 4 Relacin El nodo se coloca despus de todos los nodos que estn al mismo nivel que el indicado en relative. El nodo se coloca despus del indicado en relative. El nodo se coloca delante del indicado en relative. El nodo pasa a ser un nodo secundario del indicado en relative.
Tabla 8.4.- Constantes del argumento relationship

Por ejemplo, suponga que hay tres nodos y que desea colocar un cuarto nodo entre el segundo y el tercero. El cdigo sera el siguiente: tvwMirbol.Nodes.Add "nodo 2", tvwNext Otros argumentos del mtodo Add son key, text e image. Con estos argumentos puede asignar las propiedades Key, Text e Image al crear el nuevo objeto Node. 8.4.8. Control ActiveX ListView El control ListView muestra datos en forma de objetos ListItem. Cada objeto ListItem puede tener un icono opcional asociado con la etiqueta del objeto. Este control es idneo para representar subconjuntos de datos (como los miembros de una base de datos) u objetos discretos (como plantillas de documentos). Puede
151

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

funcionar junto con un control TreeView, para dar al usuario una visin ampliada de un nodo del control TreeView. El control ListView puede mostrar los datos en cuatro vistas diferentes: a) Iconos: permite arrastrar y colocar cada objeto y reorganizar los objetos.

Figura 8.11.-Ejemplo del control ActiveX ListView Vista Iconos grandes

b) Iconos pequeos: igual que iconos, pero permite que se vean ms objetos ListItem.

Figura 8.12.-Ejemplo del control ActiveX ListView Vista Iconos pequeos

c) Lista: muestra una vista ordenada del objeto ListItems.

Figura 8.13.-Ejemplo del control ActiveX ListView Vista Lista

d) Informe: muestra una vista ordenada, donde los elementos secundarios permiten que aparezca informacin adicional.

152

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

Figura 8.14.-Ejemplo del control ActiveX ListView Vista Reporte

Para cambiar la vista, puede usar la propiedad View. Con la propiedad View puede permitir al usuario cambiar dinmicamente la vista. En el cdigo siguiente se establece la propiedad View a vista de Informe (3), mediante la constante intrnseca lvwReport: ListView1.View = lvwReport Un objeto ListItem consta de una etiqueta (la propiedad Text) y una imagen opcional suministrada por un control ImageList. Sin embargo, el control ListView, a diferencia de otros controles, puede usar dos controles ImageList, que se establecen a travs de las propiedades Icons y SmallIcons. En las vistas de: Lista, Iconos pequeos e Informe, puede usar iconos pequeos suministrados por un control ImageList, para representar cada objeto ListItem. Por el contrario, cuando est en vista de Iconos, el control utiliza un conjunto de imgenes distinto, suministrado por un segundo control ImageList. Para establecer las propiedades Icons y SmallIcons en tiempo de diseo, utilice el cuadro de dilogo Pginas de propiedades.
Nota: El control ImageList determina el tamao de los iconos empleados. Los tamaos disponibles son 16 x 16, 32 x 32, 48 x 48 y Personalizado.

En el cdigo siguiente se declara primero una variable de objeto de tipo ListItem y despus se establece esa variable a un nico objeto ListItem agregado a la coleccin con el mtodo Add. A continuacin se establecen las propiedades SmallIcon e Icon con la referencia de la variable de objeto: Dim itmX as ListItem Set itmX = ListView1.ListItems.Add() itmX.SmallIcon = "LibroPequeo" itmX.Icon = "LibroGrande" Una vez establecida las imgenes de un ListItem con las propiedades SmallIcon e Icon, estas aparecern automticamente al cambiar de vista con la propiedad View. En la vista Reporte, existen los objetos ColumnHeader y ListSubItem. Tanto la presencia como el nmero de objetos ListSubItem dependen de la presencia y el nmero de objetos ColumnHeader. Es decir, no puede crear ningn objeto ListSubItem si no hay presentes objetos ColumnHeader. Adems, el nmero de objetos ColumnHeader determina el nmero de objetos ListSubItem que puede establecer para el objeto ListItem, que sern siempre uno menos que el nmero
153

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

de objetos ColumnHeader. Esto se debe a que el primer objeto ColumnHeader siempre est asociado a la propiedad Text del objeto ListItem. 8.4.9. Control ActiveX ToolBar Un control Toolbar contiene una coleccin de objetos Button con los que se crea una barra de herramientas que puede asociar a una aplicacin. Normalmente, una barra de herramientas contiene botones que corresponden a elementos de algn men de la aplicacin, lo que proporciona una interfaz grfica para que el usuario tenga un acceso rpido a las funciones y comandos utilizados con ms frecuencia (ver Figura 8.15).

Figura 8.15.-Ejemplo del control ActiveX ToolBar

Para crear una barra de herramientas, debe agregar objetos Button a una coleccin Buttons. Cada objeto Button puede tener un texto y una imagen opcionales, indicados por un control ImageList asociado. El texto se establece con la propiedad Caption y la imagen con la propiedad Image de cada objeto Button. En tiempo de diseo, puede agregar objetos Button al control en el cuadro de dilogo Pgina de propiedades de Toolbar. Al hacer doble clic en una barra de herramientas en tiempo de ejecucin se invoca el cuadro de dilogo Personalizar barra de herramientas, que permite al usuario ocultar, mostrar o reorganizar los botones de la barra de herramientas. Tambin puede abrir el cuadro de dilogo Personalizar barra de herramientas si invoca el mtodo Customize. Esto es posible siempre que se establezca la propiedad AllowCustomize en True. Si desea guardar y restaurar el estado de una barra de herramientas o permitir que el usuario final lo haga, utilice los mtodos SaveToolbar y RestoreToolbar. La propiedad Style del objeto Button determina su comportamiento. A continuacin se indican los cinco estilos de botones, con sus usos posibles:
Constante tbrDefault TbrCheck tbrButtonGroup tbrSeparator Valor 0 1 2 3 Uso posible Predeterminado. Puede usar el estilo Default cuando la funcin que representa el botn no depende de otras funciones. Adems, al hacer clic en el botn, vuelve a su posicin normal cuando la funcin ha terminado. Verificacin. Debe usar el estilo Check cuando el botn representa una alternancia de algn tipo. De esta forma, cuando el botn est presionado, continuar as hasta que se presione de nuevo y queda liberado. Grupo de botones. Puede usar este estilo ButtonGroup cuando un grupo de funciones se excluyan mutuamente. Es decir, en un momento dado slo una de las funciones que representa el grupo de botones puede estar activada. Separador. Este estilo Separator no tiene otra funcin que crear un botn de ocho pxeles de ancho. Puede usarlo para separar otros dos botones o para agrupar varios botones que tengan el estilo ButtonGroup.
154

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

Constante tbrPlaceholder

Valor 4

Uso posible Marcador de posicin. Este estilo Placeholder funciona como un botn "ficticio". Puede usarlo para crear un espacio en el control Toolbar donde desee que aparezca otro control (por ejemplo, un control ComboBox o ListBox).
Tabla 8.5.- Estilos del objeto Button de ToolBar

El evento ButtonClick ocurre siempre que se hace clic en un botn (excepto en aqullos con el estilo marcador de posicin o separador). Puede identificar el botn en el que se ha hecho clic por sus propiedades Index o Key. Con cualquiera de estas dos propiedades, puede usar la instruccin Select Case para programar la funcin del botn, como ilustra el cdigo del ejemplo siguiente: Private Sub tlbRTF_Click(ByVal Button As Button) Select Case Button.Key Case "AbrirArchivo" OpenFile Case "Guardar" SaveFile Case Else ' Otros casos. End Select End Sub 8.4.10. Control ActiveX TabStrip Un control TabStrip acta como los separadores de un cuaderno o las etiquetas de un grupo de carpetas de archivador. Con el control TabStrip puede definir mltiples pginas en la misma rea de una ventana o un cuadro de dilogo de una aplicacin. El control consta de uno o ms objetos Tab de una coleccin Tabs. En tiempo de diseo y en tiempo de ejecucin puede modificar la apariencia de los objetos Tab si establece sus propiedades y adems, en tiempo de ejecucin, si invoca mtodos para agregar y quitar objetos Tab o Ficha como se muestra en la Figura 8.16.

Figura 8.16.-Ejemplo del control ActiveX TabStrip

Para identificar la funcin de una ficha, puede asignar una imagen del control ImageList al objeto Tab. Para ello, primero debe asociar un control ImageList al control TabStrip, lo que puede hacer en tiempo de diseo o en tiempo de ejecucin. Para crear objetos Tab en tiempo de diseo haga clic con el botn secundario del Mouse en el control TabStrip y, despus, haga clic en Propiedades para abrir el cuadro de dilogo Pginas de propiedades.

155

Visual Basic 6.0

Unidad 8.- Tecnologa OLE

8.4.11. Conclusiones sobre ActiveX Gracias a la tecnologa ActiveX se ha logrado desarrollar componentes software, cuya caracterstica principal es la interoperabilidad para su reutilizacin, lo que ha facilitado enormemente las tareas de programacin de alto nivel. Estos fragmentos de cdigo se han establecidos el nombre de Componentes ActiveX, dentro de los cuales se encuentran las aplicaciones habilitadas para ActiveX, los componentes de cdigo, los controles ActiveX y los documentos ActiveX. Este ltimo tipo de componente no se trata en esta gua, ya que involucra la creacin de aplicaciones para Internet, lo que requiere a su vez la creacin de componentes ActiveX, y esto corresponde a un curso de programacin avanzada de objetos con Visual Basic. En todo caso, para usar los objetos de documentos ActiveX ya creados, se sigue el procedimiento descrito en el punto 8.4.1, como si fueran controles ActiveX.

156

Visual Basic 6.0

Unidad 9.- Funciones API

Unidad 9
Funciones API
Tu destino no es slo saber, sino obrar de acuerdo a tus conocimientos .- Fichte

9.1. Teora de funciones API 9.1.1. Funciones API Las API son funciones externas a Visual Basic que se encuentran almacenadas y compiladas en archivos de extensin DLL y EXE. Las siglas API corresponden a Application Programming Interface o en espaol, Interfaz para la Programacin de Aplicaciones. Estas funciones API estn disponibles en diversos archivos, incluyendo los archivos DLL o EXE creados por el usuario con lenguajes de nivel intermedio como C++. Aunque existen incontables funciones API de distintos proveedores, en esta gua, nos dedicaremos al estudio de algunas de las funciones del sistema operativo Windows exclusivamente. 9.1.2. Las API de Windows Como se explic anteriormente, las funciones API del sistema operativo Windows estn disponibles para efectuar tareas que Visual Basic no contempla dentro de sus funciones predefinidas o intrnsecas. Estas funciones del sistema operativo se encuentran almacenadas en archivos indispensables para Windows, conocidos como bibliotecas o libreras de vnculos dinmicos. Algunas de estas bibliotecas se muestran en la tabla siguiente.
Biblioteca de vnculo dinmico Advapi32.dll Comdlg32.dll Gdi32.dll Kernel32.dll Lz32.dll Mpr.dll Netapi32.dll Shell32.dll User32.dll Winmm.dll Winspool.drv Descripcin Servicios, incluidas llamadas de seguridad y del Registro. Biblioteca de la API de dilogos comunes. Biblioteca de la API para dispositivos grficos. Soporte comn de la API base de 32 bits de Windows. Rutinas de compresin de 32 bits. Enrutadores de mltiples proveedores. Biblioteca de la API para redes de 32 bits. Biblioteca de la API para Shell de 32 bits. Rutinas para interfaces de usuario. Multimedia de Windows. Contiene las llamadas de la API a la cola de impresin.
Tabla 9.1.- Archivos contenedores de funciones API

9.1.3. Declarar funciones API Para usar una funcin API en Visual Basic tal como se usa normalmente una funcin del sistema Basic, se deben efectuar tres pasos previos:
157

Visual Basic 6.0

Unidad 9.- Funciones API

a) Declarar la funcin mediante la sentencia Declare en un mdulo estndar previamente creado. Declare Function NOM Lib LIB (Par1, Par2) As Tipo b) Declarar las constantes pblicas en el mdulo estndar. Este paso es opcional y depende si la funcin utiliza alguna constante. Public Const Constante1 = Valor1 Public Const Constante2 = Valor2 c) Declarar las estructuras en forma pblica en el mdulo estndar. Este paso es opcional y depende si la funcin requiere de alguna estructura. Public Type ESTRUCTURA Campo1 As Tipo Campo2 As Tipo ... End Type La razn de utilizar un mdulo estndar para efectuar las declaraciones, es que de esta manera la funcin API implementada quedara disponible en forma pblica para todos los mdulos del proyecto. 9.1.4. Utilizar funciones API Una vez efectuadas las declaraciones correspondientes para hacer accesible una funcin API, esta podr usarse como cualquier otra funcin a lo largo de su programa. En el ejemplo siguiente, se ha creado un mdulo estndar en el cual se escribe el cdigo necesario para declarar la funcin API de Windows ExitWindowsEx. Esta funcin permite apagar, reiniciar y cerrar la sesin del sistema Windows. ExitWindowsEx reside en el archivo USER32 que se mostr en la tabla 9.1, carece de estructuras y posee cuatro constantes, las cuales determinan el procedimiento a ejecutar por la funcin. Como se observa en el fragmento de cdigo, la funcin ExitWindowsEx posee dos parmetros, uFlags que indica en tipo de procedimiento, y dwReserved que se coloca a cero por tratarse de un parmetro reservado. Public Public Public Public Public Const EWX_FORCE = 4 Const EWX_LOGOFF = 0 Const EWX_REBOOT = 2 Const EWX_SHUTDOWN = 1 Declare Function ExitWindowsEx Lib "USER32" (ByVal_ uFlags As Long, ByVal dwReserved As Long) As Long

Luego, en cualquier parte del cdigo del programa, se puede llamar a la funcin. En este caso, para el ejemplo, se utiliza el procedimiento de evento Click de un botn de comando para reiniciar el equipo (se usa la constante EWX_REBOOT): Private Sub cmdBotn_Click() Dim Ret As Long Ret = ExitWindowsEx (EWX_REBOOT, 0) End Sub

158

Visual Basic 6.0

Unidad 9.- Funciones API

Tambin se puede apagar por completo el equipo, pero esta vez se deber usar la constante EWX_SHUTDOWN: Private Sub cmdBotn_Click() Dim Ret As Long Ret = ExitWindowsEx (EWX_SHUTDOWN, 0) End Sub 9.1.5. Visor de texto API En el paquete de Visual Basic est incluida una utilidad para escribir rpidamente, de una manera sencilla y evitando errores humanos, las declaraciones, constantes y estructuras de las funciones API de Windows. Esta utilidad se conoce como el visor de texto API y su interfaz se muestra en la figura siguiente.

Figura 9.1.- Visor de texto API

La utilidad principal del visor de texto API consiste en que le evita al programador la tediosa tarea de tener que escribir las declaraciones necesarias para hacer accesible una funcin API. El programador selecciona la funcin, las constantes y estructuras, las copia y luego las pega en mdulos del proyecto. Los elementos de la interfaz del visor de texto API se describen a continuacin: a) En Tipo de API se selecciona el tipo de elemento que se buscar en el Cuadro de bsqueda, slo escribiendo las primeras letras del nombre de la funcin, es decir, puede ser la declaracin, las constantes o las estructuras. b) En elementos disponibles aparecern las declaraciones, constantes o estructuras disponibles segn se halla escogido en Tipo de API.

159

Visual Basic 6.0

Unidad 9.- Funciones API

c) En la seccin Elementos seleccionados, aparecern las declaraciones de la funcin, constantes o estructuras agregadas con el botn Agregar. Los elementos se pueden agregar pblicos o privados. d) Mientras que el botn Quitar permite eliminar un elemento de la seccin Elementos seleccionados, el botn Borrar elimina todos los elementos. e) Finalmente, se debe presionar el botn Copiar para colocar el contenido de la seccin Elementos seleccionados en el portapapeles del sistema, esto con el objeto de pegar las declaraciones en el mdulo estndar creado para tal fin. 9.2. Tcnicas para usar funciones API 9.2.1. Resolver conflictos de nombre de API Ocasionalmente, los procedimientos de DLL tienen un nombre que no es un identificador vlido, ya sea por un carcter invlido (por ejemplo, un guin) o porque coincida con una palabra clave de Visual Basic (por ejemplo, GetObject). En este caso, se utiliza la palabra clave Alias para especificar el nombre del procedimiento no vlido. 9.2.2. Enviar cadenas a funciones API Visual Basic emplea un tipo de datos String conocido como BSTR, que es un tipo de datos definido por Automatizacin, y est formado por un encabezado, que contiene informacin acerca de la longitud de la cadena. Este tipo de datos se pasa como un puntero, por lo que el procedimiento de DLL es capaz de modificar la cadena. (Un puntero es una variable que contiene la ubicacin en memoria de otra variable, en lugar de los datos reales.) Los datos BSTR son Unicode, lo que significa que cada carcter ocupa dos bytes. Por otra parte, los procedimientos de la mayora de los archivos DLL reconocen los tipos LPSTR, que son punteros de cadenas de C terminadas con un carcter nulo. Los tipos LPSTR no tienen encabezado. Si un procedimiento de DLL espera un LPSTR (un puntero a una cadena terminada con un carcter nulo) como argumento, se pasa el tipo de datos de Visual Basic BSTR por valor. Puesto que los punteros del tipo BSTR son punteros al primer byte de datos de la cadena terminada con un carcter nulo, parecer un tipo LPSTR para el procedimiento de DLL. Por ejemplo, la funcin sndPlaySound acepta una cadena que asigna nombre a un archivo de sonido digitalizado (.wav) y reproduce ese archivo. Private Declare Function sndPlaySound Lib "winmm.dll" _ Alias "sndPlaySoundA" (ByVal lpszSoundName As String, _ ByVal uFlags As Long) As Long Puesto que el argumento de cadena para este procedimiento se declara mediante ByVal, Visual Basic pasa un tipo BSTR que apunta al primer byte de datos: Dim SoundFile As String, ReturnLength As Long SoundFile = Dir("c:\Windows\System\" & "*.wav") Result = sndPlaySound(SoundFile, 1) 9.2.3. Recibir cadenas de funciones API La funcin GetWindowsDirectory verifica la instalacin del sistema operativo y devuelve en una cadena la ruta completa del directorio donde se almacena Windows. No requiere de constantes ni de estructuras; sin embargo, el hecho de
160

Visual Basic 6.0

Unidad 9.- Funciones API

devolver una cadena, implica un tratamiento especial a la misma, y la necesidad de implementar una funcin auxiliar, tal como se estudi en el objetivo 4.4. Este trato especial se debe a que las funciones API estn desarrolladas en lenguaje C, donde las cadenas poseen un carcter Nulo que indica fin de cadena; y en Visual Basic este carcter no existe. Por lo tanto, el caracter nulo de la cadena devuelta debe ser truncado o eliminado. El proceso se inicia declarando variables tipo cadena con longitud fija, y rellenando cada posicin con espacios vacos, para luego utilizar la funcin API. A la cadena devuelta se le extirpa el carcter nulo y los subsiguientes espacios vacos sobrantes. A continuacin tenemos la declaracin de la funcin API GetWindowsDirectory: Public Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long Ahora una funcin personalizada se encarga de ejecutar todo el proceso, incluyendo la llamada de la funcin API: Public Function DirWindows() As String Dim ret As Long Dim Cadena As String * 200 Cadena = Space(200) ret = GetWindowsDirectory(Cadena, 200) If ret <> 0 Then Cadena = Left(Cadena, InStr(Cadena, vbNullChar) - 1) DirWindows = Trim(Cadena) Else DirWindows = "No existe directorio Windows" End If End Function En adelante, para obtener el directorio de Windows, bastar con utilizar la funcin DirWindows de la siguiente manera: Text1.Text = DirWindows() 9.2.4. Utilizar procedimientos generales auxiliares Para determinar el estado de ocupacin y espacio libre de un disco, se puede utilizar la funcin API GetDiskFreeSpaceEx, la cual se declara a continuacin: Public Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long Como se observa, el nombre de la funcin resulta bastante extenso, adems de la cantidad de parmetros. En esta circunstancia es oportuno utilizar un procedimiento general que facilite el uso de esta funcin cada vez que se requiera. El procedimiento general Espacio cumple con esta funcin:
161

Visual Basic 6.0

Unidad 9.- Funciones API

Sub Espacio(Ruta As String, Cap As String, Libre As String) Dim ret As Long Dim P1 As Currency 'Bytes libres Dim P2 As Currency 'Capacidad del disco Dim P3 As Currency 'Espacio libre total ret = GetDiskFreeSpaceEx(Ruta, P1, P2, P3) Libre = Format(P1 * 1000) Cap = Format(P2 * 1000) End Sub La prxima vez que se deseen determinar las condiciones de capacidad del disco, basta con utilizar el procedimiento general Espacio: Dim Tamao As String Dim Libre As String Espacio "C:\", Tamao, Libre lblCapacidadDeDisco.Caption = Tamao lblEspacioLibreDeDisco.Caption = Libre 9.2.5. Utilizar funciones API sin parmetros Existe una funcin API que devuelve el tiempo en milisegundos desde que se encendi el PC, denominada GetTickCount. Esta funcin no posee parmetros, ni constantes, ni estructuras, y es muy til para generar retardos de tiempo para programas de juegos u otras aplicaciones. La declaracin es la siguiente: Public Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long A diferencia del punto anterior (9.2.4), en estos casos se debe evitar el uso de funciones o procedimientos auxiliares como este: Function Tiempo() Tiempo = GetTickCount() End Sub Lo anterior no ofrece alguna ventaja significativa, y lo que realmente si ocasiona es ms tiempo de procesamiento. Se puede pensar en un procedimiento que encapsule un conjunto de pasos para logra un objetivo en particular donde la funcin API intervenga. Tal es el caso del procedimiento siguiente para generar un retardo de tiempo: Sub Retardo(Tiempo As Long) Dim Inicio As Long Inicio = GetTickCount() Do While Not(GetTickCount >= Inicio + Tiempo) DoEvents Loop End Sub Luego, cuando sea necesario detener la ejecucin de un programa (por alguna razn operativa) durante 10 segundos por ejemplo, bastar incluir la siguiente lnea de cdigo en la parte del programa donde se desea el retardo: Retardo (10000)
162

Visual Basic 6.0

Unidad 9.- Funciones API

Consideracin final
En esta gua slo se han mostrado algunos ejemplos de utilidades de las funciones API. En realidad existe una enorme cantidad de funciones API y controles ActiveX, tanto en el sistema operativo Windows, como en otros; siendo Internet la principal fuente de ellos. Este es el inicio para el desarrollo de aplicaciones ms robustas y profesionales. El programador mas destacado es aquel que aprovecha, no slo las herramientas intrnsecas de Visual Basic, sino las provistas a travs de la API y los componentes ActiveX. Esta es la lnea divisoria que separa a los novatos, de los programadores avanzados. An queda algo de camino que recorrer: crear nuestros propios objetos, disear aplicaciones para redes incluyendo Internet con DHTML, agregar ayuda a las aplicaciones, controlar puertos u otro hardware del PC para desarrollos SCADA o similares, etc.; pero estamos armados con los fundamentos necesarios para alcanzar, muy pronto, el nivel de expertos. Suerte programadores!

163