Curso: “Desarrollo de software en Windows con Visual Basic 6.0” Duración del curso: 25 horas Nivel: Básico-Intermedio Requisito: Conocer cualquier lenguaje de programación Mejor si conoce: Basic, SQL básico Teoría: 60% Práctica: 40% Autor: Antonio Ortíz Ramírez, www.aortiz.net, ant@aortiz.net Objetivo general: Capacitar al asistente en el desarrollo de sistemas en plataforma Windows, proporcionando conocimientos sólidos de los recursos, metodologías y tecnologías del ambiente. Además, el asistente aprenderá el lenguaje de programación Visual Basic 6.0, obteniendo conocimientos a un nivel básico-intermedio que le permitan desarrollar sistemas en Windows. Alcance del curso: Se cubrirán los aspectos teóricos de la programación Windows y la filosofía de programación Visual Basic. Se aprenderá la programación Visual Basic, incluyendo los temas: tipos de datos, estructuras de control, controles, acceso universal a datos con OLE-DB (ADO), uso del API de Windows (Win32 API). Se aprenderán las bases del lenguaje SQL. 2 de 47 TEMARIO CAPITULO I INTRODUCCIÓN INICIANDO CON VISUAL BASIC CAPITULO II CAJA DE HERRAMIENTAS CAPITULO III TIPOS DE DATOS CAPITULO IV PRINCIPALES ESTRUCTURAS DE CONTROL Y SENTENCIAS DE VBA CAPITULO V PRINCIPALES FUNCIONES DE VBA CAPITULO VI PRINCIPALES OBJETOS DE VISUAL BASIC CAPITULO VII ACCESO A DATOS CON ADO CAPITULO VIII CAPITULO VII: EL API DE WINDOWS CAPITULO IX DISTRIBUCION 2001, Antonio Ortíz Ramírez www.aortiz.net 3 de 47 CAPITULO I: INTRODUCCIÓN Qué es Visual Basic? - La parte “Visual se refiere al método utilizado para la Interfase Gráfica del Usuario (GUI). En lugar de escribir grandes cantidades de código para describir la apariencia y posición de los elementos de la interfase, simplemente agrega objetos preconstruidos y los coloca en la pantalla. - La parte “Basic”, se refiere al lenguaje BASIC (Beginners All-Purpose Symbolic Instruction Code), un lenguaje utilizado por más programadores que cualquier otro lenguaje en la historia de la computación. Visual Basic ha evolucionado del lenguaje Basic original y ahora contiene cientos de sentencias, funciones y palabras reservadas, muchas de las cuales se relacionan directamente con el GUI de Windows. Los principiantes pueden crear útiles aplicaciones aprendiendo unas cuantas palabras reservadas, además, el alcance del lenguaje permite a los profesionales hacer cualquier cosa que pueda ser hecha utilizando cualquier otro lenguaje de programación Windows. El lenguaje de programación Visual Basic no es único de Visual Basic. El sistema de programación Visual Basic, edición Aplicaciones (Applications Edition) se incluye en Microsoft Excel, Microsoft Access, y muchas otras aplicaciones de Windows utilizan el mismo lenguaje. El Visual Basic Scripting Edition (VBScript) es un lenguaje script usado ampliamente y es un subconjunto del lenguaje Visual Basic. El esfuerzo hecho en aprender Visual Basic será de utilidad en estas otras áreas. Sea que se trate de crear una pequeña utilidad para sí mismo o para su equipo de trabajo, un gran sistema corporativo, o una aplicación distribuida por el globo vía Internet, Visual Basic tiene las herramientas que necesita. Las características de acceso a datos permiten crear bases de datos y aplicaciones frontend para muchas bases de datos populares como SQL Server y otras bases de datos de nivel corporativo. La tecnología ActiveX permite utilizar la funcionalidad de otras aplicaciones, como es el procesador de palabras de Microsoft Word, la hoja de cálculo de Microsoft Excel, y otras aplicaciones Windows. 2001, Antonio Ortíz Ramírez www.aortiz.net 4 de 47 Las capacidades para Internet hacen fácil acceder a documentos y aplicaciones a través de Internet o una Intranet desde su Aplicación, o crear aplicaciones servidor de Internet. La aplicación final es un verdadero archivo .exe que usa una máquina virtual Visual Basic que puede distribuir libremente. Lo nuevo en Visual Basic 6.0 ADO (ActiveX Data Objects). Esta nueva tecnología de acceso a datos contiene un modelo de objeto más simple, mejor integración con otras tecnologías Microsoft y no Microsoft, una interfaz común para acceso local y remoto a datos, y conjunto de registros (recordsets) jerárquicos. Es posible usar “drag and drop” para crear reportes rápidamente a partir de cualquier recordset, incluyendo recordsets jerárquicos. Podrá utilizar el administrador visual de datos para mostrar todas las bases de datos que están conectadas y sus tablas, vistas, “stored procedures”, etc. Existen un conjunto de rutinas que permiten utilizar el sistema de archivos y crear archivos de texto y directorios. Escriba aplicaciones Internet del lado Servidor que usan código Visual Basic para responder a peticiones de usuarios desde un navegador. El control CoolBar, es un control contenedor que puede ser usado para crear barras de herramientas configurables por el usuario parecidas a las de Internet Explorer. Las rutinas ahora pueden regresar arreglos, lo cual indica que las clases pueden tener arreglos como propiedad. También es posible asignar el contenido completo de un arreglo a otro, siempre que el arreglo de la parte izquierda de la asignación sea un arreglo dinámico. Cree componentes ActiveX que usan un ambiente aparte para ejecutar rutinas asíncronas en hilos separados. 2001, Antonio Ortíz Ramírez www.aortiz.net 5 de 47 REQUERIMIENTOS Y ESPECIFICACIONES DE VISUAL BASIC Pentium® 90MHz o superior VGA 640x480 o resolución superior soportada por Microsoft Windows. Microsoft Windows NT 4.0 o posterior, o Microsoft Windows 95 o posterior. 24 MB de RAM para Windows 95/98, 32 MB parar Windows NT. Microsoft Internet Explorer version 4.01 o posterior (version 4.01 Service Pack 1 o posterior para desarrollo de aplicaciones DHTML, y 4.x para usuarios finales de estas aplicaciones). Requerimientos de espacio en disco: Standard Edition: instalación típica 48 MB, completa 80 MB. Professional Edition: instalación típica 48 MB, completa 80 MB. Enterprise Edition: instalación típica 128 MB, completa 147 MB. Componentes adicionales (si se requieren): MSDN (para documentación): 67 MB, Internet Explorer 4.x: aproximadamente 66 MB. CD-ROM LIMITACIONES DE PROYECTO Un proyecto puede contener hasta 32,000 identificadores (cualquier palabra no reservada), que incluye, pero no limitado a, formularios, controles, módulos, variables, constantes, procedimientos, funciones, y objetos. Los nombres de variables en Visual Basic no pueden ser más largos de 255 caracteres, y los nombres de formularios, controles, módulos, y clases no pueden ser más largos de 40 caracteres. Visual Basic no impone un límite sobre el número de objetos distintos en un proyecto. LIMITACIONES DE CONTROLES Cada control no gráfico (todos los controles excepto shape, line, image, y etiqueta) utiliza una ventana. Cada ventana usa recursos del sistema, limitando el número total de ventanas que pueden existir al mismo tiempo. El límite exacto depende de los recursos disponibles del sistema y del tipo de controles utilizados. 2001, Antonio Ortíz Ramírez www.aortiz.net 6 de 47 Para reducir el consumo de recursos del sistema, use los controles shape, line, label, e image en lugar de picture box para crear o desplegar gráficos. NUMERO TOTAL DE CONTROLES El número máximo de controles permitidos en un formulario depende del tipo de controles usados y los recursos del sistema disponibles. Aunque, hay un límite fijo de 254 nombres de controles por formulario. Un arreglo de controles cuenta como un sólo control, ya que todos los controles en el arreglo comparten el mismo nombre de control. El límite de elementos en un arreglo de controles es de 0 a 32767 en todas las versiones. LIMITE PARA CONTROLES ESPECIFICOS Propiedad Aplica a Límite List y ListCount List box y Combo box El número máximo de elementos es de 32K; el límite para el tamaño de cada elemento es de 1K Text Text box 64K Caption Label 1024 bytes Command, Check 255 caracteres. Cualquier título sobre estos límites es box, Frame, y Option truncado. Los títulos en propiedades de controles personalizados están limitados a 32K Menú control 235 caracteres Tag Todos los controles Limitado sólo por la memoria disponible Name Todos los controles Limitado a 40 caracteres NOTA: en Visual Basic, los nombres de propiedades de control están limitados a 30 caracteres LIMITACIONES DE CODIGO La cantidad de código en una forma, clase, o módulo está limitado a 65534 líneas. Una línea de código puede contener hasta 1023 bytes. Hasta 256 espacios en blanco pueden preceder el texto 2001, Antonio Ortíz Ramírez www.aortiz.net 7 de 47 en una línea, y no más de 24 caracteres de continuación de línea ( _ ) pueden ser incluidos en una línea lógica. PROCEDIMIENTOS, TIPOS Y VARIABLES No hay límite sobre el número de procedimientos por módulo. Cada procedimiento puede contener hasta 64K de código. Si un procedimiento o módulo excede este límite, Visual Basic genera un error al tiempo de compilación. Visual Basic usa tablas para guardar los nombres de identificadores (variables, procedimientos, constantes, etc) en el código. Cada tabla está limitada a 64K. TABLA DE DECLARACION DE DLL’s Cada formulario y módulo de código usa una tabla que contiene una estructura describiendo un punto de entrada a DLL’s. Cada estructura usa aproximadamente 40 bytes, con una restricción total de 64K, resultando alrededor de 1500 declaraciones permitidas por módulo. 2001, Antonio Ortíz Ramírez www.aortiz.net 8 de 47 CONCEPTOS Sistema: Conjunto de métodos, recursos y dispositivos para realizar un fin específico. Clase: Define las características (propiedades) y acciones de un tipo de objeto. A las clases también se les llama “Moldes”. Objeto: Entidad con características y acciones definidas de cierto tipo o clase. Contenedor: Objeto que existe para contener otros objetos y además puede realizar alguna acción. Propiedad: Característica con nombre. Ejemplo de propiedades son: ancho, alto, color, etc. Función: Conjunto de instrucciones agrupadas en un procedimiento y que regresa un valor. Método: Acción que puede realizar un objeto. Por ejemplo: el método Refresh o Move. Un evento sólo se ejecuta por una llamada mediante código. Evento: Acción que puede realizar un objeto. Los eventos normalmente se ejecutan como respuesta a una acción del usuario como presionar un botón. Los eventos también pueden dispararse por el sistema (como el Timer) o por una llamada en el código. Thread / Hilo: Un “thread” es básicamente un camino de ejecución a través de un programa. También es una pequeña unidad de ejecución que el Win32 maneja. Un thread consiste de un Stack, el estado de los registros del CPU, y una entrada en la lista de ejecución del Sistema. Cada thread comparte todos los recursos del proceso. Los hilos de baja prioridad pueden estar esperando mientras hilos de más alta prioridad completan su trabajo. En equipos con múltiples procesadores, el programador de tareas puede mover hilos a diferentes procesadores para “balancear” la carga de CPU’s. Ejecución Asíncrona: Algunas funciones pueden ser ejecutadas de manera asíncrona, esto es, la aplicación llama la función, y el manejador, después de un mínimo procesamiento, regresa el control a la aplicación. Entonces la aplicación puede llamar otras funciones mientras la primera función continúa ejecutándose. 2001, Antonio Ortíz Ramírez www.aortiz.net 9 de 47 API: (Application Programming Interface). Son las funciones, mensajes, estructuras de datos, tipos de datos, y sentencias que puede utilizar para crear aplicaciones. El API de Windows consiste de un conjunto de Librerías de Ligado Dinámico (DLL’s) conteniendo los procedimientos relacionados al sistema. Para llamar estos procedimientos desde Visual Basic, primero debe declararlos utilizando la sentencia Declare. Entonces podrá llamarlos como cualquier otro procedimiento. OLE: Object Linking and Embedded, un ambiente unificado de servicios basados en objetos con la capacidad de personalizar estos servicios y arbitrariamente extender la arquitectura a través de servicios personalizados, con el propósito de permitir total integración entre componentes. Cursor: Un objeto de la base de datos utilizado por las aplicaciones para manipular datos por renglones de manera similar a usar registros en un archivo secuencial. Stored Procedure: Una colleción precompilada de sentencias Transact-SQL almacenadas bajo un nombre y procesadas como unidad. Los Stored Procedures también sirven para administrar SQL Server y mostrar información sobre las base de datos y usuarios. Los Stored Procedure proporcionados por SQL Server son llamados “system stored procedured”. Recordset: Objeto ADO usado para contener un resultado. También muestra un cursor, dependiendo de las propiedades del recordset asignado por una aplicación. Back End: Término aplicado al servidor de base de datos cuando está procesando, almacenando datos, y obteniendo datos. 2001, Antonio Ortíz Ramírez www.aortiz.net 10 de 47 El IDE de Visual Basic Cuando inicia Visual Basic, aparece el Entorno Integrado de Desarrollo (IDE), como se muestra a continuación 2001, Antonio Ortíz Ramírez www.aortiz.net 11 de 47 EL ENTORNO INTEGRADO DE DESARROLLO (IDE) DE VISUAL BASIC CONSISTE DE LOS SIGUIENTES ELEMENTOS: Barra de Menús / Menu Bar Muestra los comandos que utilizará para trabajar con Visual Basic. Existe menús estándar como File / Archivo, Edit / Edición, y Help / Ayuda, también existen menús que proveen acceso a funciones específicas para programación como son: Project / Proyecto, Format / Formato, o Debug / Depuración. Menús Contextuales / Context Menus Contienen atajos para acciones utilizadas con frecuencia. Para abrir un menú contextual, haga clic con el botón derecho del mouse sobre el objeto que esté usando. La lista de atajos disponible en el menú contextual depende de la parte del IDE donde haga clic con el botón derecho del mouse. Barras de Herramientas / Toolbar Permiten acceso rápido a comandos usados comúnmente en el ambiente de desarrollo. Por defecto, la barra de herramientas Estándar es mostrada cuando inicia Visual Basic. Barras adicionales para edición, diseño de formularios, y depuración pueden ser mostradas u ocultadas de los comandos de las barras de herramientas a través del menú View / Ver. Caja de Herramientas / Toolbox Proveen un conjunto de herramientas que puede utilizar al tiempo de diseño para colocar controles sobre una forma. Es posible personalizar el diseño de la caja de herramientas por defecto, agregando o quitando controles. Ventana del Explorador de Proyecto / Project Explorer Window 2001, Antonio Ortíz Ramírez www.aortiz.net 12 de 47 Lista los formularios y módulos en el proyecto actual. Un proyecto es la colección de archivos que se utilizan para construir una aplicación. Visor de Objetos / Object Browser Muestra los objetos disponibles para usar en el proyecto y permite una manera rápida de navegar a través del código. Podrá usar el Visor de Objetos para explorar los objetos en Visual Basic y otras aplicaciones, ver los métodos y propiedades disponibles para estos objetos, y pegar procedimientos de código en su aplicación. Diseñador de Formulario / Form Designer Funciona como una ventana que puede personalizar para diseñar la interfase de su aplicación. Agregue controles, gráficas, e imágenes a una forma para crear la apariencia que desee. Cada forma en su aplicación tiene su propia ventana para Diseño de Formulario. Ventana de Edición de Código / Code Editor Window Funciona como un editor para escribir el código de la aplicación. Una ventana para edición de código por separado es creada por cada forma o módulo de código en su aplicación. Ventana Posición del Formulario / Form Layout Window La ventana para posición del formulario permite posicionar los formularios en su aplicación utilizando una pequeña representación gráfica en la pantalla. Ventanas Inmediato, Local e Inspección / Inmediate, Locals, and Watch Windows Estas ventanas son provistas para uso en depuración de su aplicación. Sólo están disponibles mientras se ejecuta su aplicación con el IDE. 2001, Antonio Ortíz Ramírez www.aortiz.net 13 de 47 INICIANDO CON VISUAL BASIC Existen tres pasos principales para crear una aplicación en Visual Basic: 1) Crear la interfaz, 2) Asignar propiedades, y 3) Escribir el código Crear la interfaz Los “Formularios” son la base para la creación de la interfase de una aplicación. Puede utilizar formularios para agregar ventanas y cajas de diálogo a su aplicación. También puede usarlos como contenedores para elementos que no son parte visible de la interfase de la aplicación. Por ejemplo, puede tener una formulario en su aplicación que sirve como contenedor para gráficas que piensa mostrar en otros formularios. El primer paso para construir una aplicación Visual Basic es crear los formularios que serán la base de la interfase de la aplicación. Enseguida coloque los objetos que formarán la interfase en los formularios que cree. Asignar Propiedades El siguiente paso es asignar propiedades para los objetos que ha creado, la ventana Propiedades nos provee es una manera fácil de asignar propiedades a todos los objetos en el formulario actual. La ventana Propiedades se muestra a través del menú View-“Properties Window”. Escribir Código La ventana “Edición de Código” es donde se escribe el código para su aplicación. El código consiste en sentencias del lenguaje, constantes, y declaraciones. Utilizando la venta de Edición de Código, podrá ver y editar rápidamente cualquier código en la aplicación. 2001, Antonio Ortíz Ramírez www.aortiz.net 14 de 47 Para abrir la ventana de Código: Haga Doble-clic en el formulario o control para el cual desea escribir código Desde la ventana “Project Explorer” o Explorador del Proyecto, seleccione el nombre del Formulario o Módulo y presione el botón “View Code” o Ver Código. El código en una aplicación de Visual Basic está dividida en pequeños bloques llamados Procedimientos, un procedimiento de evento, contiene el código que es ejecutado cuando ocurre un evento (como cuando el usuario hace clic en un botón). Un procedimiento de evento para un control combina el nombre del control actual (especificado en la propiedad “Name”), una subraya ( _ ), y el nombre del evento. Por ejemplo, si desea que un botón de comandos llamado Command1 ejecute un procedimiento de evento cuando es presionado, use el procedimiento Command1_Click. Ejercicio No. 1: Cree una aplicación llamada “Hola Mundo”, la cual contendrá un formulario con sólo una caja de texto y un botón. Al presionar el botón la caja mostrará el texto “Hola Mundo”. Cree un nuevo Proyecto Cree un Formulario con nombre FmaPpal Coloque un Botón de Comandos con nombre BtnHola Coloque una Caja de Texto de nombre TxtHola Haga doble clic en el objeto “BtnHola” y en la ventana de código asegúrese que se encuentre en el evento Click, aquí escriba el código: TxtHola.Text = “Hola Mundo” Presione F5 para ejecutar la aplicación 2001, Antonio Ortíz Ramírez www.aortiz.net 15 de 47 Propiedades, Métodos y Eventos Los formularios y controles en Visual Basic son objetos que tienen propiedades, métodos y eventos. Las propiedades se conocen como los atributos de un objeto, los métodos como sus acciones, y lo eventos como sus respuestas. Por ejemplo, el globo de helio de un niño tiene sus propiedades, métodos y eventos. Las propiedades del globo incluyen atributos visibles como el alto, diámetro y color. Otras propiedades describen el estado (como inflado o desinflado), o atributos que no son visibles como su edad. Por definición todos los globos tienen estas propiedades pero los valores de estas propiedades pueden ser diferentes de un globo a otro. Un globo también tiene métodos o acciones que puede realizar. Como el método inflar (la acción de llenado con helio), un método desinflar (expeler su contenido). Los globos también tienen respuestas predefinidas a ciertos eventos externos. Por ejemplo, un globo responderá al evento de ser picado desinflándose por sí solo, o al evento de ser liberado por flotar en el aire. 2001, Antonio Ortíz Ramírez www.aortiz.net 16 de 47 CAPITULO II: CAJA DE HERRAMIENTAS DE VISUAL BASIC La caja de herramientas, contiene los controles que se utilizan para crear una aplicación en Visual Basic, estos son los principales controles en la barra de herramientas estándar: Etiqueta / Label: Una etiqueta muestra texto que el usuario no puede cambiar directamente. Podrá utilizar las etiquetas para identificar controles, como cajas de texto y barras de corrimiento, que no tienen una propiedad título. el texto mostrado en la etiqueta es controlado por la propiedad Caption, que puede ser asignada en tiempo de diseño en la ventana Propiedades o en tiempo de ejecución por asignar un valor en el código. Por defecto, la propiedad Caption es la única parte visible de la etiqueta. La propiedad Autosize, determina si la etiqueta cambiará de tamaño de manera automática para mostrar todo el contenido de la propiedad Caption. Esto es importante si se cambia el valor de esta propiedad en tiempo de ejecución. Cajas de Texto / TextBox: Las cajas de texto son controles que pueden ser usados para obtener una entrada del usuario o para desplegar texto. Las cajas de texto no pueden ser utilizadas para mostrar texto que no desea que el usuario cambie, a menos que asigne la propiedad Locked a verdadero. El texto mostrado en la caja de texto es controlado por la propiedad Text. Esta puede ser asignada de tres maneras diferentes: al tiempo de diseño en la ventana Propiedades, en tiempo de ejecución por asignar un valor en el código, o por la entrada del usuario en tiempo de ejecución. 2001, Antonio Ortíz Ramírez www.aortiz.net 17 de 47 Casilla de Verificación / CheckBox: Indica cuando una condición particular es verdadera o falsa. Las casillas de verificación se utilizan en una aplicación para capturar valores Verdadero/Falso o Sí/No del usuario. Las casillas de verificación trabajan de manera independiente de otra, por lo tanto, un usuario puede seleccionar cualquier número de casillas al mismo tiempo. Botones de Opción / Options Buttons: Presentan un conjunto de dos o más opciones al usuario. Al contrario de los check boxes, los botones de opción trabajan como parte de un grupo; al seleccionar un botón, inmediatamente se limpian todos las demás opciones del grupo. Cajas de Lista y Cajas Combinadas / List Boxes y Combo Boxes: Las cajas de lista y cajas combinadas presentan una lista de opciones al usuario. Por defecto, las opciones son mostradas verticalmente en sólo una columna, aunque también puede establecer múltiples columnas. Si el número de elementos excede los que pueden ser mostrados en la caja combinada o caja de lista, aparecerán barras de corrimiento de manera automática sobre el control. List Box Combo Box 2001, Antonio Ortíz Ramírez www.aortiz.net 18 de 47 Barras de Corrimiento / Scroll Bars: Como estos controles indican la posición actual en una escala, las barras de corrimiento pueden ser utilizadas para controlar la entrada en un programa, por ejemplo, para controlar el volumen del sonido o ajustar los colores de una foto. Los controles de barra horizontal (HScrollBar) y vertical (VScrollBar) operan independientemente de otros controles y tienen sus propios eventos, propiedades, y métodos. Los controles de barras de corrimiento no son los mismos que aparecen en las cajas de texto, cajas de listas, cajas combinadas, o formularios MDI. La guía de interfase de Windows ahora sugiere utilizar controles de desplazamiento (Slider Controls) como entrada en lugar de barras de corrimiento. Ejemplos de estos controles de desplazamiento pueden ser vistos en el panel de control de Windows 95/98. Picture Box: El principal uso del control Picture Box es mostrar una foto al usuario. La foto actual que se muestra es determinada por la propiedad Picture. La propiedad Picture contiene el nombre del archivo (y opcionalmente el path) de la archivo de imagen a ser mostrado. Para mostrar o reemplazar una foto en tiempo de ejecución, puede utilizar la función LoadPicture para asignar la propiedad Picture. Ejemplo: MiPct = LoadPicture(“Picasso.Bmp”) El control Picture Box también puede ser usado como un contenedor para otros controles. Al igual que el control frame, puede colocar otros controles sobre el control Picture Box. Los controles contenidos son movidos con el control Picture Box y sus propiedades Top y Left serán relativos al picture box en lugar del formulario. Timer: Ejecuta el evento timer al intervalo de tiempo especificado. Shape: Permite colocar un rectángulo, cuadrado, elipse o círculo en una forma, frame o picture box. 2001, Antonio Ortíz Ramírez www.aortiz.net 19 de 47 USANDO EL VALOR DE UN CONTROL Todos los controles tienen una propiedad que es utilizada para guardar o tomar valores al referirse al control, sin utilizar el nombre de la propiedad. Esto es llamado el valor del control y usualmente es el más importante o la más utilizada de las propiedades del control. La siguiente tabla lista las propiedad que es considerada el valor de cada control CONTROL VALOR Check box Value Combo box Text Command button Value Common dialog Action Data Caption DataCombo Text DataGrid Text Directory list box Path Drive list box Drive File list box FileName FlexGrid Text Frame Caption Horizontal scroll bar Value Image Picture Label Caption Line Visible Cuando desea referirse a la propiedad de un control que es el valor del control, puede hacerlo sin especificar el nombre de la propiedad en el código. Por ejemplo, esta línea asigna el valor de la propiedad Text de un control text box: Text1 = “Este texto es asignado a la propiedad Text of Text1” En este ejemplo, la propiedad Caption de Label1 es asignada al valor de la propiedad Filename de File1 cuando el usuario hace clic sobre un archivo en el cuadro file list. Private Sub File1_Click () Label1 = File1 End Sub 2001, Antonio Ortíz Ramírez www.aortiz.net 20 de 47 EL CONTROL ADO El control ADO (ADO Data Control), usa Microsoft ActiveX Data Objects (ADO) para crear conexiones entre controles conectados a datos (data-bound controls) y proveedores de datos (data providers). Los controles con conexión a datos son todos los controles que cuentan con la propiedad DataSource. Los proveedores de datos pueden ser cualquier fuente escrita para la especificación OLE DB. Aunque puede usar los ActiveX Data Objects (ADO) directamente en su aplicación, el control de datos ADO tiene la ventaja de ser un control gráfico (con botones de avanzar y regresar) y una interfase fácil de usar que permite crear aplicaciones de base de datos con un mínimo de código. En versiones previas de Visual Basic se existían los controles “Data Control” y “Remote Data Control” (RDC) para acceso a datos. Ambos controles se siguen incluyendo por compatibilidad. Sin embargo, debido a la flexibilidad de ADO, se recomienda que las nuevas aplicaciones de base de datos sean creadas usando el control ADO. 2001, Antonio Ortíz Ramírez www.aortiz.net 21 de 47 OBTENIENDO EL ENFOQUE: El enfoque o focus es la capacidad de recibir entradas del usuario a través del mouse o teclado. Cuando un objeto tiene el enfoque, puede recibir entradas del usuario. En la interfase de Microsoft Windows, varias aplicaciones pueden estar ejecutándose al mismo tiempo, pero sólo la aplicación con el enfoque tendrá una barra de título activa y podrá recibir entradas del usuario. En un formulario de Visual Basic con varias cajas de texto, sólo la caja de texto con el enfoque podrá mostrar el texto entrado por el teclado. Los eventos GotFocus y LostFocus ocurren cuando un objeto recibe o pierde el enfoque. Los formularios y algunos controles soportan estos eventos. ESTABLECIENDO EL ORDEN DEL TAB: El “tab order”, es el orden en que el usuario se mueve de un control a otro presionando la tecla TAB. Cada formulario tienen su propio “tab order”. Normalmente el orden del tab es el mismo orden con el que fueron creados los controles. Al presionar la tecla Tab, el enfoque se mueve de un control a otro. Usualmente, presionando la tecla TAB en tiempo de ejecución selecciona cada control en el orden del tab. Puede quitar un control del orden del tab estableciendo su propiedad TabStop a False (0). Cuadros de diálogo: En aplicaciones basadas en Windows, los cuadros de diálogos son usadas para preguntar al usuario por datos necesarios por la aplicación para continuar o para desplegar información. Los cuadros de diálogo son un tipo especializado de objetos formulario que pueden ser creados de tres maneras: 1. Diálogos predefinidos pueden ser creados usando las funciones MsgBox o InputBox. 2. Diálogos personalizados utilizando un formulario estándar o personalizando un diálogo existente 3. Diálogos estándar, como Print y File Open, pueden ser creados usando el control common dialog 2001, Antonio Ortíz Ramírez www.aortiz.net 22 de 47 CAPITULO III: TIPOS DE DATOS Tipo de dato Memoria requerida Rango Byte 1 byte 0 a 255 Boolean 2 bytes True ó False Integer 2 bytes -32,768 a 32,767 Long 4 bytes -2,147,483,648 a 2,147,483,647 4 bytes -3.402823E38 a -1.401298E-45 para valores (long integer) Single (single-precision negativos; 1.401298E-45 a 3.402823E38 para floating-point) valores positivos Double 8 bytes -1.79769313486231E308 a (double-precision -4.94065645841247E-324 para valores floating-point) negativos; 4.94065645841247E-324 a 1.79769313486232E308 para valores positivos Currency 8 bytes -922,337,203,685,477.5808 a (scaled integer) Decimal 922,337,203,685,477.5807 14 bytes +/-79,228,162,514,264,337,593,543,950,335 sin punto decimal; +/-7.9228162514264337593543950335 con 28 lugares a la derecha del punto decimal; el número más pequeño superior al cero es: +/-0.0000000000000000000000000001 Date 8 bytes Enero 1, 100 to Diciembre 31, 9999 Object 4 bytes Cualquier referencia a un objeto String 10 bytes + string length 0 hasta aproximadamente 2 billion (longitud variable) String Length of string 1 hasta aproximadamente 65,400 2001, Antonio Ortíz Ramírez www.aortiz.net 23 de 47 (longitud fija) Variant 16 bytes Cualquier valor numérico hasta el rango de un (con números) doble Variant 22 bytes + longitud de El mismo rango que para String de longitud (con caracteres) la cadena variable User-defined Número requerido por el rango de cada elemento es el mismo que (usando Type) sus elementos para su tipo de dato. Notas: - Los arreglos de cualquier tipo de dato requieren 20 bytes de memoria más 4 bytes por cada dimensión más el número de bytes ocupados por el dato. La memoria ocupada por los datos puede ser calculada por multiplicar el número de elementos de datos por el tamaño de cada elemento. Por ejemplo, los datos en un arreglo unidimensional de 4 enteros de 2 bytes cada uno ocupan 8 bytes. Los 8 bytes requeridos por los datos más los 24 bytes adicionales resulta en 32 bytes el total de memoria requerida para almacenar este arreglo. - Un “Variant” conteniendo un arreglo requiere 12 bytes más que el arreglo por sí solo. 2001, Antonio Ortíz Ramírez www.aortiz.net 24 de 47 CAPITULO IV: PRINCIPALES ESTRUCTURAS DE CONTROL Y SENTENCIAS DE VBA Dim: Declara variables y reserva espacio para almacenarlas. Sintaxis: Dim [WithEvents] varname[([subscripts])] [As [New] type] [, [WithEvents] varname[([subscripts])] [As [New] type]] . . . Do - Loop: Repite un bloque de sentencias mientras la condición es verdadera o hasta que la condición sea verdadera. Sintaxis: Do [{While | Until} condition] [statements] [Exit Do] [statements] Loop también puede ser usada la siguiente sintaxis: Do [statements] [Exit Do] [statements] Loop [{While | Until} condition] End: Termina un procedimiento o bloque. Sintaxis: End End Function End If End Property End Select End Sub End Type End With 2001, Antonio Ortíz Ramírez www.aortiz.net 25 de 47 Exit: Sale de un bloque Do..Loop, For..Next, Function, Sub, o código Property. Sintaxis: Exit Do Exit For Exit Function Exit Property Exit Sub For Each: Repite un grupo de sentencias por cada elemento en un arreglo o colección. Sintaxis: For Each element In group [statements] [Exit For] [statements] Next [element] For..Next: Repite un grupo de sentencias un número especificado de veces. Sintaxis: For counter = start To end [Step step] [statements] [Exit For] [statements] Next [counter] Function: Declara el nombre, argumentos, y código que forma parte del cuerpo de una función. Sintaxis: [Public | Private | Friend] [Static] Function name [(arglist)] [As type] [statements] [name = expression] [Exit Function] [statements] [name = expression] End Function 2001, Antonio Ortíz Ramírez www.aortiz.net 26 de 47 If..Then..Else: Condiciona la ejecución de un grupo de sentencias, dependiendo del valor de una expresión. Sintaxis: If condición Then [sentencias] Else [sentencias] End If On Error: Activa una rutina manejador de errores y especifica la ubicación de la rutina sin un procedimiento. También puede ser usada para desactivar una rutina manejador de errores. Sintaxis: On Error GoTo line On Error Resume Next On Error GoTo 0 On Error Goto line, activa el manejador de errores que inicia en la línea especificada en el argumento line. El argumento line puede ser cualquier número de línea o etiqueta de línea. La línea especificada debe estar en el mismo procedimiento que la sentencia On Error, de lo contrario ocurrirá un error al compilar. On Error Resume Next, especifica que al ocurrir un error en tiempo de ejecución el control vaya a la sentencia que sigue a la sentencia que provocó el error. On Error Goto 0, desactiva cualquier manejador de error. Select Case: Ejecuta uno de varios grupos de sentencias, dependiendo del valor de una expresión. Sintaxis: 2001, Antonio Ortíz Ramírez www.aortiz.net 27 de 47 Select Case testexpression [Case expressionlist-n [statements-n]] ... [Case Else [elsestatements]] End Select SendKeys: Envía uno o más teclazos a la ventana activa como si fueran escritos por el teclado. Sintaxis: SendKeys string[, wait] Para especificar un caracter, use el símbolo por sí mismo. Por ejemplo, para representar la letra A, use “A” para string. El signo suma (+), potencia (^), porcentaje (%), tilde (~), y paréntesis () tienen significado especial para Senkeys. Para especificar uno de estos caracteres, enciérrelos con llaves {}. Por ejemplo, para especificar el signo suma, use {+}. Para especificar combinación de teclas con Shift, Ctrl, y Alt, preceda el código de la tecla con uno de los siguientes códigos SHIFT + CTRL ^ ALT % Para especificar que cualquier combinación de Shift, Ctrl, y Alt deben estar presionadas mientras otras teclas son presionadas, encierre los códigos para estas teclas entre paréntesis. Por ejemplo, para especificar que presione Shift mientras E y C son presionados, use “+(EC)”. Para especificar Shift presionado mientras E es presionado, seguido de C sin Shift, use “+EC”. Set, asigna una referencia a un objetos a una variable o propiedad. Sintaxis: Set objectvar = {[New] objectexpression | Nothing} Sub, Declara el nombre, argumentos, y código que forma parte del cuerpo de un procedimento. Sintaxis: 2001, Antonio Ortíz Ramírez www.aortiz.net 28 de 47 [Private | Public | Friend] [Static] Sub name [(arglist)] [statements] [Exit Sub] [statements] End Sub Type, usado en el nivel módulo para definir un tipo de dato definido por el usuario conteniendo uno o más elementos. Sintaxis: [Private | Public] Type varname elementname [([subscripts])] As type [elementname [([subscripts])] As type] ... End Type While..Wend, Ejecuta un bloque de sentencias mientras una condición es verdadera. Sintaxis: While condition [statements] Wend 2001, Antonio Ortíz Ramírez www.aortiz.net 29 de 47 CAPITULO V: PRINCIPALES FUNCIONES DE VBA Asc, Regresa un entero representando el código del caracter que corresponde a la primera letra en la cadena. Sintaxis: Asc(string) Chr, Regresa una cadena conteniendo el caracter asociado con el código especificado. Sintaxis: Chr(charcode) Date, Regresa un Variant (Date) conteniendo la fecha actual del sistema. Utilice Date para actualizar la fecha del sistema. Sintaxis: Date DateDiff, Regresa un Variant (long) especificando el intervalo de tiempo entre dos fechas específicas. Sintaxis: DateDiff(intervalo, fecha1, fecha2) El intervalo es una cadena que puede tener estos valores Valor Intervalo yyyy Años m Mes d Días h Horas n Minutos s Segundos DoEvents, Pasa la ejecución al sistema operativo para que pueda procesar otros eventos. Sintaxis: DoEvents() Error, Regresa el mensaje de error que corresponde al último error o al número de error especificado. Sintaxis: Error( [no. error] ) 2001, Antonio Ortíz Ramírez www.aortiz.net 30 de 47 Format, Regresa un Variant (string) conteniendo una expresión formateada de acuerdo a las instrucciones contenidas en la expresión de formato. Sintaxis: Format(expresión, formato) Iif, Regresa una de dos partes, dependiendo de la evaluación de una expresión. Sintaxis: Iif(expresión, valor cuando es verdadera, valor cuando es falso) InputBox, Muestra un cuadro de diálogo, espera la entrada de texto del usuario o que haga clic en un botón, y regresa una cadena con el contenido de la caja de texto. Sintaxis: InputBox(mensaje[, título] [, default]) InStr, Regresa un variant (long) especificando la posición de la primera ocurrencia de una cadena en otra. Sintaxis. InStr([inicio,] cadena1, cadena2) IsNull, Regresa un valor boleano que indica si una expresión contiene datos no válidos (Null). Sintaxis: IsNull(expresión) IsNumeric, Regresa un valor boleano que indica si una expresión puede ser evaluada como un número. Sintaxis: IsNumeric(expresión) LCase, Regresa una cadena que ha sido convertida a minúsculas. Sintaxis: LCase(cadena) Left, Regresa un Variant (string) conteniendo un número específico de caracteres de la parte izquierda de una cadena. Sintaxis: Left(cadena, longitud) Len, Regresa un Long conteniendo el número de caracteres de una cadena o el número de bytes requeridos para almacenar una variable. Len(cadena | nombredevariable) Mid, Regresa un Variant (string) conteniendo un número específico de caracteres de una cadena. Sintaxis: 2001, Antonio Ortíz Ramírez www.aortiz.net 31 de 47 Mid(cadena, inicio[,longitud]) MsgBox, Muestra un mensaje en un cuadro de diálogo, espera que el usuario presione un botón, y regresa un Integer, indicando el botón que presionó el usuario. Sintaxis: MsgBox(mensaje[,botones] [,título]) Now, Regresa un Variant (date) especificando la fecha y hora actual del sistema. Sintaxis: Now Right, Regresa un Variant (string) conteniendo un número específico de caracteres del lado derecho de una cadena. Sintaxis: Right(cadena, longitud) Str, Regresa un Variant (string) que representa un número. Sintaxis: Str(número) Time, Regresa un Variant (date) indicando la hora actual del sistema. Sintaxis: Time UCase, Regresa un Variant (string) conteniendo la cadena especificada, convertida en mayúsculas. Sintaxis: UCase(string) Val, Regresa los números contenidos en una cadena como un valor numérico del tipo apropiado. Sintaxis: Val(cadena) 2001, Antonio Ortíz Ramírez www.aortiz.net 32 de 47 CAPITULO VI: PRINCIPALES OBJETOS DE VISUAL BASIC App, El objeto App es un objeto global. Este obtiene o especifica la información sobre la aplicación como el título, versión, ruta y nombre del archivo ejecutable y archivos de ayuda, y si existe o no una instancia previa de la aplicación en ejecución. Principales propiedades del objeto App: Path, ExeName, PrevInstance, Title. Ejemplo: If(App.PrevInstance) Then End Clipboard, Provee acceso al portapapeles del sistema. Propiedades y métodos: Clear, GetData, GetText, SetData, SetText. Ejemplo: Clipboard.SetText “Hola” Err, Contiene información sobre el último error en tiempo de ejecución. Propiedades y métodos: Clear, Description, Number, Source. Ejemplo: If( Err <> 0 ) Then Exit sub Printer, el objeto Printer permite la comunicación con una impresora del sistema (inicialmente la impresora predeterminada). Propiedades y métodos: Copies, CurrentX, CurrentY, DeviceName, DriverName, EndDoc, KillDoc, Line, NewPage, Orientation, Page, Port. Screen, Contiene información sobre la pantalla y controla el puntero del mouse fuera de los formularios de su aplicación en tiempo de ejecución. El objeto Screen es el escritorio completo de Windows. Propiedades: ActiveControl, ActiveForm, FontCount, Fonts, Height, Width. Me, El objeto Me es una referencia al formulario actual. Muy útil si desea crear un código independiente al nombre del formulario. 2001, Antonio Ortíz Ramírez www.aortiz.net 33 de 47 CAPITULO VII: ACCESO A DATOS CON ADO OLE DB es la estrategia de programación Microsoft a nivel sistema para interfase de datos. OLE DB es una especificación abierta diseñada para construir sobre ODBC, esto es posible al proveer un estándar abierto para acceder a todos los tipos de datos. ODBC fue creado para accesar bases de datos relacionales (de manera primaria a SQL) en una ambiente multiplataforma. OLE DB está diseñada para proveer acceso a todos los tipos de datos en ambiente OLE Component Object Model (COM). OLE DB incluye la funcionalidad SQL definida en ODBC pero también define interfaces para tener acceso a otros datos diferentes al tipo soportado por SQL. Los componentes OLE DB consisten en “Data Providers” (que contienen y exponen los datos), “Data Consumers” (que usan los datos), y “Service Components” (que procesan y transportan los datos, por ejemplo, procesadores de querys e ingeniería de cursores). 2001, Antonio Ortíz Ramírez www.aortiz.net 34 de 47 Microsoft® ActiveX® Data Objects (ADO) es la estrategia de programación Microsoft a nivel aplicación para interfase a datos e información. ADO provee acceso a datos consistente, alto rendimiento y soporta una amplia variedad de necesidades de desarrollo, incluyendo la creación de clientes de bases de datos o front-end, usando aplicaciones, herramientas, lenguajes, o navegadores de Internet. ADO está diseñado para ser la única interfase a datos necesaria para sistemas cliente-servidor y desarrollos basados en Web. ADO provee una interfase fácil de usar a nivel aplicación para OLE DB, que provee acceso a diferentes formatos de datos. Como ADO fue diseñado para combinar las mejores características y, eventualmente reemplazar RDO y DAO, usa notación similar con una semántica simplificada para hacer de él el siguiente paso natural para los desarrolladores de hoy. El modelo ADO contiene siete objetos: Connection 2001, Antonio Ortíz Ramírez www.aortiz.net 35 de 47 Command Parameter Recordset Field Property Error y cuatro tipos de colecciones: Fields Properties Parameters Errors El Modelo ADO 2001, Antonio Ortíz Ramírez www.aortiz.net 36 de 47 Otra vista del modelo ADO Microsoft® Data Access Components (MDAC) es un conjunto de tecnologías redistribuibles que implementan la estrategia Universal de Acceso a Datos. MDAC consiste de las últimas versiones de ActiveX Data Objects (ADO), componentes OLE DB, y Open Database Conectivity (ODBC), que ahora ha sido liberado como un conjunto integrado. Los desarrolladores creando soluciones cliente-servidor y basados en Web seleccionan los componentes que necesitan y llaman a estos desde su herramienta de selección, aplicaciones, lenguajes, o navegadores de Internet para crear soluciones completas de base de datos. Práctica: Escribir el siguiente programa que accede a datos a través de ADO. Colocar el código en el evento load del formulario principal. Cree una base de datos .MDB con la tabla TbaAutor, la cual contendrá el campo Autor. Además cree una fuente de datos Microsoft Access llamada Biblio que haga referencia a la base de datos. Forma #1: Private Sub Form_Load() Dim objData As ADODB.Recordset Set objData = CreateObject("ADODB.RecordSet") 2001, Antonio Ortíz Ramírez www.aortiz.net 37 de 47 objData.Open "select * from TbaAutor", "DSN=Biblio" While Not objData.EOF Debug.Print objData!Autor objData.MoveNext Wend End Sub Forma #2 Private Sub Form_Load() Dim cnx As New Connection Dim Rs As New ADODB.Recordset cnx.Open "DSN=Biblio" Rs.Open "select * from TbaAutor", cnx, adOpenForwardOnly While Not Rs.EOF Debug.Print Rs!Autor Rs.MoveNext Wend Rs.Close End Sub EL OBJETO CONNECTION El objeto connection permite establecer una conexión con fuentes de datos. En otra palabras, la representa una conexión física a una fuente de datos. El objeto connection provee mecanismos para inicializar y establecer la conexión. Una vez que el objeto conexión fue creado puede usar sus métodos y propiedades para manipular la fuente de datos (la base de datos) que fue conectada. También puede utilizar el objeto connection para ejecutar filtros y usar transacciones Métodos del objeto connection 2001, Antonio Ortíz Ramírez www.aortiz.net 38 de 47 Método Descripción Open Abre una nueva conexión a una fuente de datos Close Cierra una conexión y todos sus objetos dependientes Execute Ejecuta un query (una sentencia SQL) BeginTrans Inicia una transacción CommitTrans Procede con los cambios hechos durante la transacción RollBackTrans Cancela cualquier cambio hecho durante una transacción Propiedades del objeto connection: Propiedad Descripción ConnectionString Contiene la información necesaria para establecer una conexión ConnectionTimeOut Determina el tiempo a esperar para establecer una conexión CommandTimeOut Determina el tiempo a esperar mientras ejecuta un comando State Indica si una conexión está abierta Provider Indica el nombre del proveedor de datos Version Indica la versión ADO CursorLocation Establece/Regresa la ubicación del “cursor engine” Nosotros programamos para la interface ADO. Pero recuerde que seleccionamos OLE DB Provider cuando construimos la propiedad “ConnectionString”. Esto es, el proveedor OLE DB sabe cómo tomar comandos ADO y trasladarlos en lenguaje que la fuente de datos específica puede entender. Como cada día más y más fabricantes crean proveedores OLE DB para sus fuentes de datos, ADO se posiciona en el mundo. Ejemplo de conexión, recordset y transacciones Dim Cn As New ADODB.Connection Dim rs As New ADODB.Recordset ' Abre la conexión Cn.Open "pubs", "sa" 2001, Antonio Ortíz Ramírez www.aortiz.net 39 de 47 ' Abre la tabla “titles” rs.Open "SELECT * FROM titles", Cn, adOpenDynamic, adLockPessimistic Cn.BeginTrans ' realiza cambios Cn.CommitTrans ' O da marcha atrás ' cn.RollbackTrans Cn.Close 2001, Antonio Ortíz Ramírez www.aortiz.net 40 de 47 EL OBJETO RECORDSET Un objeto Recordset representa los registros en una tabla o los registros que resultan de ejecutar un comando. En cualquier momento dado, el objeto Recordset direcciona a un registro único al que se refiere como el registro actual. Utilice objetos Recordset para manipular datos de un proveedor. Todos los objetos Recordset son construídos usando registros (renglones) y campos (columnas). Dependiendo de la funcionalidad soportada por el proveedor, algunos métodos o propiedades del Recordset pueden no estar disponible. Existen cuatro tipos de cursores definidos en ADO: Cursor dinámico (dynamic cursor), permite agregar, cambiar, y borrar en la vista; permite todos los tipos de desplazamientos a través del Recordset que no son basados en bookmarks; y permite bookmarks si el proveedor los soporta. Cursor keyset, idéntico a un cursor dinámico, excepto que no podrá ver los registros que otros usuarios agregan, y evita acceder a registros que otros usuarios borraron. Los cambios a datos por otros usuarios serán visibles. También soporta bookmarks y todos los tipos de desplazamientos a través del recordset. Cursor estático (static cursor), provee una copia estática de un conjunto de registros que podrá utilizar para localizar datos o generar reportes; también permite bookmarks y todos los tipos de movimientos a través del recordset. Las adiciones, cambios, o eliminaciones de otros usuarios no serán visibles. Este es el único tipo de cursor que puede abrir un objeto recordset (ADOR) del lado del cliente 2001, Antonio Ortíz Ramírez www.aortiz.net 41 de 47 Forward-only cursor, funciona idéntico a un cursor estático excepto que sólo permite desplazamiento hacia delante a través de los registros. Este mejora el rendimiento en situaciones donde sólo necesita recorrer de una manera a través del recordset. Asigne la propiedad CursorType antes de abrir el recordset para elegir el tipo de cursor, o pase el argumento CursorType del método Open. Algunos proveedores no soportan todos los tipos de cursores. Verifique la documentación del proveedor. Si no especifica el tipo de cursor, ADO abre un cursor forward-only por defecto. Al usar algunos proveedores (como Microsoft ODBC Provider para OLE DB con Microsoft SQL Server), puede crear objetos recordset sin definir un objeto connection con anterioridad, esto se hace pasando una cadena de conexión con el método Open. ADO crea un objeto Connection, pero no asigna este objeto a una variable objeto. Si no usa esta variable objeto cuando abre sus objetos Recordset, ADO crea un nuevo objeto Connection por cada Recordset, aunque pase la misma cadena de conexión. Puede crear tantos objetos Recordset como necesite. Cuando abre un Recordset, el registro actual es posicionado en el primer registro (si existe) y las propiedades BOF y EOF son asignadas a False. Si no hay registros, las propiedades BOF y EOF se establecen como True. 2001, Antonio Ortíz Ramírez www.aortiz.net 42 de 47 EL OBJETO COMMAND El objeto Command define información detallada sobre los datos que se obtienen de una conexión. Los objetos Command pueden estar basados en cualquier objeto de la base de datos (como una tabla, vista, stored procedure o similares) o en un filtro escrito en Structured Query Language (SQL). También puede crear relaciones entre objetos Command para obtener un conjunto de datos relacionados en forma de jerarquía. Para ser un objeto Command válido, debe asociarlo con un objeto Connection. Si un objeto Command regresa datos, es un “recordset returning”, y el resultado puede ser accesado usando un objeto Recordset disponible desde el objeto DataEnviroment. Si un objeto Command no regresa datos (por ejemplo, stored procedures o texto SQL que realiza actualizaciones), es un “non-recordset returning”. 2001, Antonio Ortíz Ramírez www.aortiz.net 43 de 47 CAPITULO VIII: EL API DE WINDOWS EL API ó Application Programming Interface, es un “Conjunto de rutinas que una aplicación usa para solicitar servicios de bajo nivel realizados por otro componente, como el sistema operativo de la computadora o un servicio ejecutando en una computadora de la red. Windows Application Programming Interface (API) Las funciones, mensajes, estructuras de datos, tipos de datos, y sentencias que se utilizan para crear aplicaciones que ejecutan bajo Microsoft Windows. Las partes del API que use deben contener los elementos necesarios para llamar funciones API desde Windows. Estos incluyen declaración de procedimientos (para las funciones de Windows), definiciones de tipos definidos por el usuario (para estructuras de datos pasadas a estas funciones), y declaraciones de constantes (para valores a pasar y a regresar de estas funciones). API Win32 El término Win32 es usado para describir un API que es común a todas las plataformas Windows 32 bits. Estas plataformas incluyen: Windows 95, 98 y Me Windows NT Windows CE Los beneficios de un API común son muchos: facilidad de portar aplicaciones, requiere menor aprendizaje cuando se emigra de una plataforma a otra, y una vasta librería de soporte de programación existente, ejemplos, y recursos de otros fabricantes. 2001, Antonio Ortíz Ramírez www.aortiz.net 44 de 47 Declarando funciones externas Para llamar procedimientos externos desde VBA, se debe proveer información a VBA sobre el procedimiento que se desea llamar. VBA requiere saber el nombre de archivo de la librería donde se encuentra la subrutina o función a llamar, el nombre del procedimiento a llamar, los parámetros que desea enviar, y, si el procedimiento es una función, el tipo de dato del valor que regresa. Syntaxis 1 [Public|Private] Declare Sub name Lib "libname" [Alias "aliasname" ] [([argumentlist])] Syntaxis 2 [Public|Private] Declare Function name Lib "libname" [Alias "aliasname"] [([argumentlist])] [As type] Ejemplos de llamadas al API Win32 Ejemplo #1: Const SND_SYNC = &H0 ' play synchronously (default) Const SND_ASYNC = &H1 ' play asynchronously Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long Function PlayWav(Archivo as string) As Long PlayWav = sndPlaySound(Archivo, SND_ASYNC) End Function Ejemplo #2: Public Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long Function NombrePC() As String Dim Buff As String * 255 Dim N As Long N = 255 GetComputerName Buff, N NombrePC = Left(Buff, N) End Function 2001, Antonio Ortíz Ramírez www.aortiz.net 45 de 47 CAPITULO IX: DISTRIBUCION Archivos que tiene permitido distribuir Puede distribuir libremente cualquier aplicación o componente creado con Visual Basic. Además del archivo ejecutable (.exe), su aplicación puede requerir otros archivos, como DLLs, controles ActiveX (.ocx), o bitmaps (.bmp). Puede distribuir de forma legal aplicaciones de ejemplo y cualquier otro archivo que fue copiado a la subcarpeta \Icons de la carpeta \Visual Studio\Common\Graphics cuando instaló Visual Basic en su equipo. Nota: La carpeta \Graphics sólo es instalada si elige instalación personalizada (custom) cuando instala Visual Basic, y elige instalar gráficos (Graphics). Si ha comprado la edición Profesional o Enterprise de Visual Basic, también podrá distribuir cualquier archivo copiado a las carpetas \Visual Studio\Common\Graphics y \Program Files\Common Files\ODBC durante la instalación. Nota: También podrá distribuir otros controles ActiveX, archivos .exe, y DLLs que haya comprado. Consulte la licencia del fabricante para cada uno de estos archivos que desea distribuir para determinar si tiene derechos para distribuir el archivo con su aplicación. Pasos a seguir en el proceso de empaquetado (The Package and Deployment Wizard) 1) Determine el tipo de paquete que desea crear. Puede crear un paquete estandar para programas basados en Windows que serán distribuidos en disquete, CD, o en red, o puede crear un paquete de Internet para programas que serán distribuidos en la Web. También puede elegir crear sólo el archivo de dependencias. 2) Determine los archivos que necesita distribuir. El asistente determinará los archivos del proyecto y de dependencias para la aplicación de manera automática, por ejemplo, el archivo .vbp y su contenido. Los archivos de dependencias son archivos en tiempo de ejecución o componentes que la aplicación necesita para funcionar. La información de dependencia es 2001, Antonio Ortíz Ramírez www.aortiz.net 46 de 47 almacenada en el archivo vb6dep.ini, o en varios archivos .dep correspondiendo a los componentes en el proyecto. 3) Determine dónde instalar los archivos en el equipo del usuario. Los archivos del programa e instalación normalmente son instalados en la carpeta “Archivos de Programas” o “Program Files”, dependiendo de la versión de Windows en español o inglés respectivamente, mientras que los archivos del sistema y dependencias son instalados en la carpeta \Windows\System o \Winnt\System32. Verifique si desea agregar archivos que no fueron incluidos por el asistente, como pueden ser archivos de base de datos (.mdb), de imágenes, de sonido u otros. 4) Cree su paquete. El asistente crea el paquete y el programa de instalación (setup1.exe) por sí mismo, referenciando todos los archivos necesarios. El resultado final de este paso es uno o más archivos .cab y cualquier archivo necesario de instalación. 5) Cree su medio de distribución. Copie todos los archivos necesarios a la ubicación desde donde los usuarios accederán al programa de instalación. 2001, Antonio Ortíz Ramírez www.aortiz.net 47 de 47 TEMAS AVANZADOS Sin lugar a duda, Basic a evolucionado mucho, ahora es una herramienta robusta y completa donde se desarrollan grandes sistemas de diversa índole. Este curso ha sido un buen paso en el aprendizaje de la programación Windows pero aún falta mucho por aprender. A continuación se describen algunos temas que se recomiendan como seguimiento a este curso: Cristal Reports Sistemas Cliente-Servidor SQL Server, Oracle u otro Servidor Desarrollo en Internet Intranets Desarrollo de herramientas ActiveX 2001, Antonio Ortíz Ramírez www.aortiz.net