Está en la página 1de 70

Desarrollo de Sistemas con Visual Basic 6.

0
Introduccin Este curso provee al estudiante las habilidades tcnicas requeridas para desarrollar sistemas con Visual Basic 6.0. Al terminar el Curso Al final del curso, el estudiante tendr las habilidades para describir los diferentes elementos que integran un buen desarrollo de sistemas; describir los conceptos de la programacin en Visual Basic; acceso a bases de datos usando Activex Data Object (ADO); crear ventanas de altas/bajas/cambios usando diferentes motores de bases de datos con una sola conexin; implementar sistemas en modalidad SDI, MDI y mezcla; hacer grficas hacia Excel usando OLE Automation; elaborar reportes con Data Report y Crystal Report; manejar cdigo de barras (generacin y lectura); manejar imgenes en base de datos; manejar Recordset con Crystal Report;; as como manejar la concurrencia de Visual Basic con SQL Server. Contenido del Curso Mdulo 1: Introduccin a Visual Basic Controles Objetos Propiedades Mens Archivos de Visual Basic Mdulo 2: Programacin Eventos Vs Procedimientos Funciones Vs Procedimientos Alcance del Cdigo Uso del Object Browser Tipos de Dato Alcance de las variables Mdulo 3: Validacin de Entrada de Datos Uso de Propiedades para Restringir Entrada de Datos Usar el Evento KeyPress para modificar lo Tecleado Uso del KeyUp y KeyDown para atrapar ASCII no vlidos Atrapar Cdigos de Tecla a Nivel Forma

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

Mdulo 4: Acceso a Base de Datos Uso de Activex Data Object ADO Mtodo Open Connection Mtodo OpenResultSet Mtodo Execute Mdulo 5: Controles que se Llenan con Informacin de la Base de Datos ComboBox ListView Mdulo 6: Errores Verificacin de Errores Atrapar Errores Mdulo 7:Generacin de Reportes Data Report Crystal Report Mdulo 8: Cdigo de Barras Cmo generar el cdigo de carras Interleaved 2 de 5 (cadena numrica) Cmo leer el cdigo de barras Interleaved 2 de 5 (cadena numrica) Mdulo 9: Manejo de Imgenes Almacenamiento de imgenes con ADO 2.5 Recuperacin de imgenes con ADO 2.5 Mdulo 10: Automatizacin OLE con Excel Modulo 11: Presentacin a los Sistemas Active Skin Microsoft Agent

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

Mdulo 1: Introduccin a Visual Basic


Colocando Controles Sobre una Forma

El Toolbox despliega los posibles controles. Haga click en un control y dibjelo sobre la forma. Usted puede adicionar controles al Toolbox. Se sigue el estndar de nombrado de controles.

La caja de herramientas contiene los controles de Visual Basic. Si la caja de herramientas est cerrada, usted puede abrirla seleccionando Toolbox de la opcin View en el men o en el ToolBar en el icono que tiene un martillo y una llave. Adicionar un control a la caja de herramientas 1. Desde la opcin Project del men, seleccione Components. Visual Basic despliega una lista de controles disponibles. Seleccione Microsoft Windows Common Control 6.0, al agregar este control se adicionan al Tollbox el ListView, ImageList, Toolbar etc. estos controles son de mucha utilidad para el desarrollo.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

Los Controles y las Formas son Objetos


Los controles del Toolbox son clases Una clase es una plantilla para un objeto. Usted puede crear un objeto cuando dibuja un control en la forma

Los objetos tienen propiedades y mtodos Propiedades Caractersticas de un objeto (color Color, tamao Size,titulo Caption) Form1.Caption = Forma de Entrada de Datos Mtodos Lo que hace un objeto. Son los procedimientos con los que acta el objeto. Form1.Show

Un objeto es una combinacin de cdigo y datos que es tratado como una unidad. Un objeto puede ser una parte de una aplicacin, un control o una forma. Una aplicacin completa puede ser un objeto. Cada objeto en Visual Basic es definido por una Clase. La clase define el tipo de objeto. Los controles en el Toolbox representan clases. Cuando se coloca un control sobre una forma usted puede crear un objeto de la clase controles. Todos los objetos tienen Propiedades y Mtodos: Las propiedades son valores que se le pueden dar a un objeto con la finalidad de determinar su apariencia y comportamiento. Los mtodos son procedimientos que provee un objeto. Por ejemplo, la forma provee el mtodo Show que causa que la forma se despliegue en el monitor.

El beneficio de trabajar con objetos es que los objetos proveen de cdigo que no tenemos que escribir. Usted simplemente activa las propiedades e invoca a los mtodos de los objetos, y el objeto ejecuta varias funciones.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

Activando Propiedades

Activando propiedades a tiempo de diseo. Desplegadas en la ventana de Propiedades F4. Accionando el click-derecho del mouse sobre un objeto y seleccionando la opcin Properties. Activando propiedades a tiempo de ejecucin: Text1.text = Abraham Obteniendo el valor de una propiedad a tiempo de ejecucin: Dim sNombre as String SNombre = Text1.Text

Activando propiedades a tiempo de diseo Use la ventana de propiedades para modificar las propiedades de un control. Haga click con el mouse y marque varios controles de una forma al mismo tiempo. Las propiedades desplegadas en la ventana de propiedades son las que son comunes a todos los controles seleccionados. Cualquier cambio que usted haga aplicar a todos los controles seleccionados. Activando propiedades a tiempo de ejecucin Usted puede usar el siguiente cdigo para activar propiedades a tiempo de ejecucin: Text2.Font.Bold = True Activa el texto en Negritas Text2.Text = Hola Mundo Activa el valor del Texto Si se omite el nombre de la propiedad, usted puede activar el valor al control. Cada control tiene una propiedad por default. la propiedad por default para el TextBox es Text, para el Label es la propiedad Caption: Text2 = Activa la propiedad Text del textBox Label1 = Activa la propiedad Caption de la Etiqueta
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com 5

Usando el Toolbar
Ejecuta F5

Abrir Proyecto Adicionar Forma Cortar

Pega Deshacer

Propiedades F4 Parar Buscador Objetos F2

Adicionar Proyecto

Salvar Proyecto Editor Men Copiar

Buscar Repetir

Pos. Ventana Romper Explorador Caja Herramientas Proyecto

El Toolbar provee rpido acceso a los comandos ms frecuentemente usados en el ambiente de programacin. Haga click sobre un botn del toolbar y este ejecutar la accin representada para ste.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

Formas MDI Un formulario MDI (interfaz de mltiples documentos) es una ventana que acta como fondo de una aplicacin y es el contenedor de formas que tienen su propiedad MDIChild establecida en True. Para crear un objeto MDIForm, elija Agregar formulario (forma) MDI en el men Proyecto. Una aplicacin slo puede tener un objeto MDIForm, pero varias formas secundarias MDI. Si una forma secundaria MDI tiene mens, la barra de mens de la forma secundaria reemplazar automticamente a la barra de mens del objeto MDIForm cuando la forma secundaria MDI est activa. Una forma secundaria MDI minimizado se mostrar como un icono en el MDIForm. Un objeto MDIForm no puede ser modal. Los formularios secundarios MDI se disean de forma independiente del MDIForm, pero siempre estn contenidos en el MDIForm en tiempo de ejecucin.

Ventana Hija Una forma hija es una forma comn y corriente con la propiedad MDIChild = true.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

Adicionando un Men Para adicionar un men a la forma, haga click en el icono Editor de Men en el Toolbar a tiempo de Diseo.

Opciones del cuadro de dilogo Caption. Le permite escribir el nombre del comando o del men que desea que aparezca en la barra de mens o en un men. Si desea crear una barra separadora en el men, escriba un nico guin (-) en el cuadro Caption. Para dar al usuario acceso a travs del teclado a un elemento del men, escriba el signo & delante de una letra. En tiempo de ejecucin, esta letra aparecer subrayada (el signo & no ser visible) y el usuario tendr acceso al men o al comando si presiona las teclas ALT y la correspondiente a la letra subrayada. Si necesita que aparezca en el men el signo &, deber escribir dos signos & consecutivos. Name. Le permite escribir un nombre de control para el elemento del men. El nombre de control es un identificador que slo se utiliza para tener acceso al elemento del men en el cdigo, no aparece en ningn men. Por ejemplo: MnuCatalogos MnuCDivisiones MnuCEspecialidades MnuCSalir MnuContratistas
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com 8

Index. Le permite asignar un valor numrico que determina la posicin del control en una matriz de controles. Esta posicin no tiene ninguna relacin con la ubicacin del control en la pantalla. Shortcut. comando. Le permite seleccionar una tecla de mtodo abreviado para cada

HelpContextID. contexto.

Le permite asignar un valor numrico nico para el Id. de

Checked. Le permite hacer que aparezca inicialmente una marca de verificacin a la izquierda de un elemento del men. Se utiliza normalmente para indicar si una opcin de alternar est activada o no. Enabled. Le permite seleccionar si el elemento del men debe responder a eventos. Desactive esta opcin si desea que el elemento del men no est disponible y aparezca atenuado. Visible Le permite hacer que un elemento aparezca en el men. WindowList. Determina si el control del men contiene una lista de formularios secundarios MDI abiertos en una aplicacin MDI.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

Usando Control 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. Para hacer uso de este control deber agregar el control Microsoft Windows Common Controls-3 6.0 en la opcin del men Proyecto y Componentes. A continuacin se indica la secuencia de pasos para crear una barra de herramientas con el CoolBar: 1. Seleccione el control CoolBar de la caja de herramientas y arrstrelo sobre la parte superior de la ventana (en forma de rectngulo). La ventana queda como a continuacin se muestra:

como se observa el CoolBar se crea con tres paneles, para este ejercicio usaremos solo dos. 2. Enseguida saque las propiedades del CoolBar haciendo click derecho sobre este y en la carpeta de Bandas quite una banda, de manera que solo queden dos. 3. A continuacin agregaremos dos ToolBar, uno sobre cada Banda y modificaremos las propiedades de las bandas (haciendo click derecho sobre el CoolBar) para asignarlos en la lista de Child sobre la carpeta de Bandas, como a continuacin se muestra:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

10

cada panel deber tener asignado su propio Toolbar. 4. Agregue ahora los botones con sus respectivas imgenes a cada Toolbar haciendo uso del control ImageList. 5. En la propiedad MinWidth podr colocar el ancho mnimo que le permitir al panel, cuando el CoolBar haga un Scroll. 6. En las propiedades del CoolBar, en la carpeta de General podr asignarle una imagen al fondo del CoolBar a travs de la propiedad Picture.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

11

Archivos ms usados en un Proyecto


Archivos de Formas (.Frm y .Frx) Contenedor para controles y cdigo Archivos de Clases (.Cls) Contenedor de cdigo. Plantilla para crear un objeto a tiempo de ejecucin. Mdulos Estndar (.Bas) Contenedor de cdigo. Archivo de Recursos (.Res) Contiene Bitmaps, Iconos, Mensajes.

Los archivos que se usan durante el desarrollo de aplicaciones de Visual Basic se llaman Project. El Proyecto est creado con los siguientes tipos de archivos: Archivos de Formas Cada archivo de formas incluye una descripcin de los objetos de la forma y el cdigo relacionado. Si una forma contiene grficos, la informacin de stos la salva en un archivo del mismo nombre de la forma pero con extensin .FRX. Mdulos Estndar Un mdulo estndar en Visual Basic contiene solo cdigo. Cualquier forma puede hacer uso del cdigo contenido en el mdulo BAS. La caracterstica de este cdigo es que se comparte por toda la aplicacin. Generalmente son funciones y procedimientos de propsito general. Mdulos de Clases Un mdulo de clases es una plantilla, a travs de la cual se pueden crear objetos a tiempo de ejecucin. Archivo de Recursos Cada proyecto puede contener solo un archivo de recursos. Este archivo contiene Bitmaps, Iconos, Mensajes, y otros datos usados en la aplicacin. Este archivo de recursos hace que los proyectos sean ms ligeros. Adicionalmente el archivo de recursos se puede usar para crear sistemas que presenten los mensajes en varios idiomas.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

12

Mdulo 2: Programacin
Eventos vs Procedimientos

Evento Se ejecutan de manera automtica cuando ocurre una accin. Haciendo doble Click en el control abre la ventana de cdigo. Para cada control muestran los eventos disponibles en un combo que se encuentra arriba a la derecha, en la ventana de cdigo.

Procedimientos Generales Se requiere que se invoquen para poder ser ejecutados. Pueden ser funciones o procedimientos Sub.

Eventos Cada control tiene un conjunto de eventos que se pueden usar. Visual Basic automticamente invoca a los procedimientos de eventos en respuesta al teclado, mouse, o accin del sistema. Procedimientos Generales Un procedimiento general no es ejecutado si no es invocado. Usted puede crear un nuevo procedimiento tecleando el encabezado SUB, seguido del nombre del procedimiento, sobre una lnea en blanco en la ventana de cdigo. Cuando usted invoca un procedimiento, Visual Basic busca el procedimiento en la forma actual. Si el nombre del procedimiento no es encontrado, Visual Basic busca el procedimiento en todos los mdulos. Parmetros Byref (Parmetros por Referencia) el valor de este parmetro puede ser modificado en el procedimiento. ByVal (Parmetros por Valor) el parmetro no sufre cambios cuando regresa. Optional (Parmetros Opcionales) indica que el parmetro es opcional, es decir, que se puede omitir, debe ser el ltimo de la lista de parmetros.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

13

Funciones vs Procedimientos

Procedimientos Sub

Este no retorna ningn valor. Private Sub ActNombre (Nombre As String) Invocacin ActNombre Mi Nombre

Procedimientos Function

Este retorna un valor Private Function CalcVentas(s as String) As Integer Invocacin I = CalcVentas(s:=Windows 98)

Procedimientos Sub Los procedimientos Sub no retornan ningn valor. Usted invoca un procedimiento Sub especificando el nombre del procedimiento y enseguida la lista de parmetros. Procedimientos Function Los procedimientos Function regresan un valor. El siguiente procedimiento recibe un nmero y regresa el nmero al cuadrado. Function Cuadrado(I As Integer) as Integer Cuadrado = I * I End Function Si requiere el valor que regresa la funcin deber incluir los parmetros entre parntesis. J = Cuadrado(5) Si usted omite el parntesis, el valor que regresa la funcin es ignorado. Cuadrado 5

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

14

Alcance del Cdigo

Procedimientos de una Forma (Generales o Eventos)

Private = Pueden ser invocado solo por la Forma (Locales). Public = El procedimiento es un mtodo de la forma. Pueden ser llamados desde cualquier parte de la aplicacin (Globales). FrmPrueba.GetDate

Procedimientos en un Mdulo Estandar

Private = Pueden ser usados solo en el mdulo Public = Pueden ser llamados desde cualquier parte de la aplicacin.

Los procedimientos pueden ser declarados como Private o Public Procedimientos Private pueden ser solo llamados por cualquier procedimiento que se encuentre en el mismo lugar, sea forma, mdulo o clase. Los procedimientos Public para una forma vienen siendo sus mtodos. El procedimiento puede ser invocado desde cualquier parte de la aplicacin, especificando el nombre de la Forma y el nombre del procedimiento. Los procedimientos Public en un mdulo estn disponibles en toda la aplicacin y pueden ser invocados especificando solo el nombre del procedimiento. El siguiente ejemplo declara un procedimiento Public Public Sub miProcedimiento() ... End Sub Si su procedimiento est declarado dentro de una forma, usted lo deber invocar as: FrmPrueba.miProcedimiento

Si usted declara el procedimiento en un mdulo estndar, usted debe invocar el procedimiento as: miProcedimiento Como se observa ya no requiere el nombre del objeto que lo contiene.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

15

Uso del Explorador de Objetos (Object Browser), para ver Procedimientos

El Object Browser (acceso directo con F2) es una ventana en la que se pueden ver todos los procedimientos que se encuentran en su aplicacin, de igual manera se pueden ver todos los objetos que proveen otras aplicaciones.

Tipos de Datos
Tipos de Datos en Visual Basic I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com Use el tipo de dato apropiado para cada situacin 16

Variant es el tipo de dato por default.

Tipos de Datos en Visual Basic El tipo de dato de una variable determina el tipo de informacin que la variable puede almacenar y un rango de posibles valores. Si usted no provee el tipo de dato cuando declara una variable, la variable automticamente obtiene el tipo Variant. El tipo de dato Variant puede almacenar valores nulos, numricos, fecha/tiempo, cadena de caracteres. Sin embargo, los tipos de dato Variant requieren ms memoria que los otros tipos de dato. Si usted desea crear aplicaciones rpidas no use variables de tipo Variant. Tipo de Datos: Variables de tipo entero (Integer), entero largo (long). Las variables tipo Integer se almacenan como nmeros de 16 bits (2 bytes) con valores que van de -32.768 a 32.767 Las variables tipo Long (entero largo) se almacenan como nmeros con signo de 32 bits (4 bytes) con un valor comprendido entre 2,147,483,648 a 2,147,483,647.

Variables de tipo precisin simple (single), precisin doble (double)


I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com 17

Las variables tipo Single (coma flotante y precisin simple) se almacenan como nmeros de punto flotante de 32 bits (4 bytes) con valores que van de 3.402823E38 a 1.401298E-45 para valores negativos y de 1.401298E-45 a 3.402823E38 para valores positivos. Las variables tipo Double (coma flotante y precisin doble) se almacenan como nmeros de punto flotante de 64 bits (8 bytes) con valores de 1.79769313486232E308 a 4.94065645841247E-324 para valores negativos y de 4.94065645841247E-324 a 1.79769313486232E308 para valores positivos. Variables Alfanumricas (String) Este tipo de variables pueden almacenar tanto nmeros como letras. Variables tipo Boolean Las variables tipo Boolean se almacenan como nmeros de 16 bits (2 bytes), pero slo pueden ser True o False. Cuando se convierten a tipo Boolean otros tipos numricos, 0 se convierte en False, y el resto de los valores se convierten en True. Cuando los valores tipo Boolean se convierten a otros tipos de datos numricos, False se convierta en 0 y True se convierte en -1.

Alcance de las Variables


Variables declaradas dentro de un Procedimiento I.S.C. Alejandro Guzmn Zazueta Son locales al procedimiento; no pueden ser pblicas. a_zazuetag@hotmail.com Dim iPrueba as Integer Variables declaradas en la seccin de General Declarations de la forma 18

El alcance de las variables se refiere a las reas del programa en las cuales es visible la variable. Hay cuatro niveles diferentes de alcance, correspondientes a los cuatro lugares diferentes donde usted puede declarar variables: nivel procedimiento, variables estticas dentro de los procedimientos, nivel forma y nivel mdulo estndar. El primer lugar para declarar variables, con el enunciado Dim, es en el nivel de procedimiento. En Visual Basic existen dos clases de procedimientos: los procedimientos Sub y los procedimientos Function (aprender de ellos ms adelante). Las variables declaradas en los procedimientos son locales para ese procedimiento. Siendo accesibles solamente por los procedimientos en los que estn declaradas, las variables locales tienen la visibilidad ms baja y el alcance ms estrecho. Una cosa importante por recordar sobre las variables es que no sobreviven al procedimiento en el cual estn definidas. Cuando un procedimiento termina, todas sus variables locales se remueven de la memoria, lo cual es bueno desde el punto de vista de conservacin de recursos. Sin embargo, esto significa que las variables locales de un procedimiento son reinicializadas cada vez que se llama el procedimiento. En otras palabras, usted no debe esperar que una variable local conserve su valor entre llamadas al procedimiento.

Mdulo 3: Validacin de Entrada de Datos


I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com 19

Usando Propiedades para Restringir Entrada de Datos

.Maxlength = 10 .Locked = True .PasswordChar

.Default = True .Cancel = True

Propiedad MaxLength La propiedad MaxLength determina la mxima longitud de texto permitido en un TextBox. El sistema emite una seal bip cuando el usuario trata de teclear ms de la longitud permitida. Propiedad PasswordChar La propiedad PasswordChar determina el caracter que va a ser desplegado cuando el usuario teclee un texto en el TextBox. Cualquier caracter puede ser usado, la mayora de las aplicaciones basadas en Windows usan el asterisco (*). Esta propiedad no afecta la propiedad Text; la propiedad Text contiene exactamente lo que el usuario tecle. Propiedad Locked La propiedad Locked determina si el usuario puede modificar los datos dentro de un TextBox. Si la propiedad Locked es verdadera, el usuario solo podr ver los datos dentro del TextBox. Propiedad Default Si la propiedad Default de un CommandButton es verdadera, el evento Click para este botn es ejecutado cuando el usuario presiona la tecla de Enter. Solo un CommandButton en la forma puede tener activada esta propiedad. Propiedad Cancel Si la propiedad Cancel de un CommandButton es verdadera, el evento Click para este botn es ejecutado cuando el usuario presiona la tecla de ESC. Solo un CommandButton en la forma puede tener activada esta propiedad. Usando el Evento KeyPress para modificar lo Tecleado
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com 20

Private Sub Text1_KeyPress(KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) End Sub

El evento KeyPress ocurre cuando el usuario teclea un caracter ASCII. El KeyAscii = 8 si el usuario presiona la tecla de BackSpace.

El evento KeyPress se dispara siempre que el usuario teclee un caracter ASCII estndar. Esto no incluye caracteres especiales, teclas de funcin, flechas o tecla Del. Para responder a estas teclas se usan los eventos KeyDown y KeyUp. Respondiendo al evento KeyPress usted puede restringir los caracteres o transformar estos cuando se teclean. El siguiente ejemplo restringe a que un TextBox solo reciba nmeros.
Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer) If KeyAscii = 13 Then Salta de una caja de textos a otra, siendo arreglo se TextBox If Index = 1 Then Text1(0).SetFocus Else Text1(Index + 1).SetFocus End If Else 'Valida si es un Entero en la caja de texto Text1(0) If Index = 0 Then Numero KeyAscii, Text1(Index), Entero 'Valida si es un real en la caja de texto Text1(1) If Index = 1 Then Numero KeyAscii, Text1(Index), Real End If End Sub

Como se observa el ejemplo anterior hace uso de un procedimiento de nombre Numero para validar los nmeros reales o enteros, a continuacin se muestra el cdigo:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

21

' Procedimiento que valida si un numero es real o entero Public Sub Numero(KeyAsc As Integer, texto As Object, Tipo As TipoNumero) Dim car As String * 1 car = Chr(KeyAsc) If Tipo = Entero Then If (car >= "0" And car <= "9") Or KeyAsc = vbKeyBack Or car = "-" Then If car = "-" And Len(texto) >= 1 And Mid(texto, 1, 1) = "-" Then KeyAsc = 0 Beep End If Else KeyAsc = 0 Beep End If End If If Tipo = Real Then If (car >= "0" And car <= "9") Or car = "." Or car = "-" Or KeyAsc = vbKeyBack Then If car = "." Then If InStr(1, texto, ".") > 0 Then KeyAsc = 0 Beep End If End If If car = "-" And Len(texto) >= 1 And Mid(texto, 1, 1) = "-" Then KeyAsc = 0 Beep End If Else KeyAsc = 0 Beep End If End If End Sub

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

22

Usando KeyUp y KeyDown para atrapar ASCII no vlidos

Los eventos KeyUp y KeyDown son disparados cuando hay actividad en el teclado. Cada KeyUp o KeyDown proveen un cdigo nico para cada tecla del teclado. El siguiente ejemplo usa el evento KeyDown para checar la tecla F1. Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyF1 Then MsgBox "Usted presion F1 del TextBox" End If End Sub

Para ver una lista de todas las constantes de Visual Basic, abra el Object Browser y seleccione de la lista de libreras VBRUN, entonces seleccione Globals de la lista Classes/modules.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

23

Atrapando Cdigos de Tecla a Nivel Forma

Si la forma tiene la propiedad KeyPreview en verdadero La forma recibe los eventos de cdigos de tecla antes que los controles.

Propiedad KeyPreview La forma tiene la propiedad KeyPreview la cual determina si la forma recibe los eventos del teclado antes que los controles. Si la propiedad KeyPreview es verdadera, la forma recibe el evento del teclado antes que los controles de sta. Si la propiedad KeyPreview de la forma es falsa, la forma no recibe los eventos del teclado. El siguiente ejemplo despliega un mensaje cuando el usuario presiona la funcin F2.

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyF1 Then MsgBox "Usted presiona F1 de la Forma" End If End Sub Cuando la propiedad KeyPreview de la forma se activa en True, la forma reconoce los eventos del teclado antes que los controles de sta, pero los eventos actan tambin en los controles.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

24

Habilitando el Botn de Aceptar

Activar la propiedad de la forma KeyPreview en True Use For ... Each para recorrer todos los controles de la forma.

Su programa podra proveer condiciones visuales sobre los comandos que estn disponibles. Por ejemplo, si usted requiere que el usuario llene todos los campos antes de seleccionar el botn de aceptar, usted solo debera habilitar el botn de aceptar hasta que el usuario haya tecleado informacin en todos los campos.

El siguiente ejemplo muestra un ciclo sobre la coleccin de Controles para validar cada control. La coleccin de controles es una coleccin predefinida por Visual Basic y contiene todos los controles que se encuentran en la forma.

Private Sub Form_KeyUp(KeyCode as Integer, Shift as Integer) Dim ControlAct as Control For Each ControlAct in Controls If TypeOf ControlAct is TextBox Then If ControlAct = Then Command1.Enabled = False Exit Sub End If End If Next Command1.Enabled = true End Sub

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

25

Usando el control DateTimePicker Para que este control aparezca en la caja de herramientas deber agregarlo en los componentes del proyecto Microsoft Windows Common Controls2 6.0 Utilice el control DateTimePicker para proporcionar un campo de fecha con formato que facilite la seleccin de la fecha. Adems, los usuarios pueden seleccionar una fecha a partir de una interfaz de calendario desplegable similar a la de un control MonthView.
En el modo Calendario desplegable (predeterminado) se muestra al usuario un calendario desplegable en el que puede seleccionar una fecha.

El evento Chage puede usarse para validar cuando el usuario haya efectuado un cambio a la fecha, en coordinacin con la propiedad Value para acceder al valor.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

26

Microsoft Tabbed

Para disponer de este control en el entorno Visual Basic, agrguelo en la opcin del men Proyecto Componentes y seleccione el control Microsoft Tabbed Dialog Control 6.0 El control Microsoft Tabbed Dialog proporciona un mtodo sencillo para presentar varios cuadros de dilogo o pantallas de informacin en un nico formulario utilizando la misma interfaz que aparece en numerosas aplicaciones comerciales para Microsoft Windows. El control Tabbed Dialog ofrece un grupo de fichas, cada una de las cuales acta como un contenedor para otros controles. Slo hay una ficha activa al mismo tiempo, que muestra los controles que contiene y oculta los de las fichas restantes. Definir el nmero de fichas y filas del cuadro de dilogo

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

27

Para definir el nmero de fichas y filas del cuadro de dilogo, establezca las propiedades Tab y TabsPerRow. Por ejemplo, si desea crear un cuadro de dilogo que contenga doce fichas, establezca en 12 la opcin Nmero de fichas y en 4 la opcin TabsPerRow. De este modo crear un cuadro de dilogo con tres filas de cuatro fichas cada una. De forma predeterminada, el nmero de fichas es 3. Cuando se ha establecido el nmero de fichas y de filas, cada ficha se indexa para poder seleccionarlas individualmente. Por ejemplo, puede seleccionar fichas individuales en la opcin Ficha actual para cambiar la propiedad TabCaption. La indexacin de las fichas comienza por cero (0). A travs de la propiedad Tab del SSTab puede saber en que Tab se encuentra por ejemplo: Private Sub SSTab1_Click(PreviousTab As Integer) MsgBox SSTab1.Tab End Sub

Activar y desactivar fichas en tiempo de ejecucin Segn la funcionalidad de la aplicacin o de un cuadro de dilogo especfico que ha creado, puede que desee desactivar algunas fichas en situaciones determinadas. Para ello puede usar la propiedad TabEnabled, que permite activar y desactivar fichas individuales. Cuando una ficha est desactivada, el texto que contiene aparece atenuado y el usuario no puede seleccionarla. Por ejemplo: SSTab1.TabEnabled(2) = False La propiedad TabEnabled especifica el nmero de ficha y, despus, la desactiva estableciendo su valor en False. Nota Puede usar la propiedad Enabled para activar o desactivar todo el control Tabbed Dialog.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

28

Usando el Control Animation Para que este control aparezca en la caja de herramientas deber agregarlo en los componentes del proyecto Microsoft Windows Common Controls2 6.0 El control Animation le permite crear botones que presenten animaciones, como archivos .avi. El control slo puede reproducir archivos AVI que no tengan sonido. Adems, el control Animation slo puede reproducir archivos .avi sin comprimir Si intenta cargar un archivo .avi que incluya sonido o con un formato no compatible con el control, se producir el error 35752. Un ejemplo de este control es la barra de progreso de copia de archivos de Windows 95, que utiliza un control Animation. Las hojas de papel "vuelan" de una carpeta a otra mientras se ejecuta la operacin de copia. A continuacin se muestra los pasos para crear una animacin con un AVI: 1. En una ventana coloque el control Animation como se muestra a continuacin:

2. Enseguida coloque el siguiente cdigo en la ventana


En el evento Load se carga el AVI al control y se Manda Ejecutaror Private Sub Form_Load() Animation1.Open (App.Path & "\Key.Avi") Animation1.AutoPlay = True End Sub

3. A continuacin se muestra como queda la ventana:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

29

Mdulo 4: Acceso a Base de Datos


Usando Objetos de Datos ActiveX (ADO)
Objetos de Datos ActiveX (ADO) Objetos de Datos Remotos (RDO) Objetos de Acceso a Datos (DAO)

Por qu hay tres interfases de acceso a datos en Visual Basic Ado, Rdo y Dao?
La tecnologa de acceso a datos evoluciona constantemente y cada una de estas tres interfaces corresponde a un estado de la evolucin. La tecnologa ms reciente es ADO, con un modelo de objetos ms sencillo (y an ms flexible) que RDO o DAO. Para sus nuevos proyectos debe usar ADO como la interfaz de acceso a datos.

Porqu usar ADO?


La interfaz ADO se ha diseado como una interfaz de nivel de aplicacin fcil de usar para el ms nuevo y eficaz paradigma de acceso a datos de Microsoft, OLE DB. OLE DB proporciona un acceso de alto rendimiento a cualquier origen de datos, incluidos bases de datos relacionales y no relacionales, correo electrnico y sistemas de archivos, texto y grficos, objetos de negocios personalizados y mucho ms. La implementacin de ADO genera una cantidad mnima de transferencias a travs de la red en escenarios clave de Internet y utiliza un nmero mnimo de capas entre el servidor y el origen de datos para proporcionar una interfaz compacta de alto rendimiento. Una metfora habitual es hacer referencia a ADO como la interfaz de automatizacin de OLE. Adems ADO utiliza convenciones y funciones similares a las de DAO y RDO, con una semntica simplificada que facilita su aprendizaje. ODBC (Open DataBase Connectivity Conectividad Abierta de Base de Datos) Protocolo estndar que permite que las aplicaciones se conecten con diferentes servidores o archivos de base de datos. Los controladores ODBC utilizados por el administrador de ODBC permiten acceso a SQL Server y otros orgenes de datos, incluyendo Access 7, Archivos DBF etc., estos los distribuyen los fabricantes.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

30

Mtodo Open (Connection) ADO Establece una conexin a una Base de Datos a travs de ODBC. Sintaxis conexin.Open ConnectionString, UserID, Password Parmetros ConnectionString UserID Password Opcional. Es un string conteniendo informacin de la conexin. Opcional. Es un string conteniedo el nombre del usuario con el que desea establecer la conexin. Opcional. Es un string conteniendo el password que se usar para establecer la conexin.

El siguiente ejemplo muestra una conexin a un ODBC de nombre Inventa:


Public Cn As ADODB.Connection Public Function Conectado(sUsuario As String, sPassword As String) as Boolean On Error GoTo senal Set Cn = New ADODB.Connection Cn.ConnectionString = "DRIVER=SQL Server;SERVER=(local);UID= & sUsuario & ;PWD= & sPassword & ;DATABASE=pubs Cn.Open Conectado = True Exit Function senal: Conectado = False MsgBox Err.Description Err.Clear End Function

Cuando haya concluido las operaciones con la conexin, use el mtodo Close para liberar los recursos asociados con el sistema. Para este ejemplo Cn.Close

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

31

Mtodo Execute (Connection) ADO Ejecuta un query especfico (sentencia de SQL), procedimiento almacenado o un texto especfico a la base de datos. Sintaxis Cuando el comando no regresa ningn registro usar: conexin.Execute CommandText, RecordsAffected, Options

Cuando el comando regresa (consulta): Set recordset Options) =

registros o renglones de la base de datos

conexin.Execute

(CommandText,

RecordsAffected,

Regresa Valores Los renglones los regresan en un RecordSet. Parmetros CommandText Es un string conteniendo la sentencia SQL, nombre de una tabla, procedimiento almacenado o un texto que se desea ejecutar. Parmetro opcional. Es una variable de tipo Long (entero largo) en la cual regresa el nmero de registros afectados por la operacin. Parmetro opcional. Opcin que indica cmo se deber evaluar el CommandText. A continuacin se muestra la tabla de posibles valores: Indica que el CommandText lo deber evaluar textualmente. Indica que el CommandText lo evale como el nombre de una tabla. Indica que el CommandText lo evale como un procedimiento almacenado. Indica que el CommandText contiene un comando no conocido.

RecordsAffected

Options

adCmdText AdCmdTable AdCmdStoredProc AdCmdUnknown

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

32

Ejemplo: Cuando el comando regresa registros o renglones de la base de datos (consulta) Dim Rs As ADODB.Recordset Set Rs = New ADODB.Recordset Set Rs = Cn.Execute("select * from Familias Where cveFamilia > 1", , adCmdText) Do Until rs.EOF() MsgBox Rs(0) & " " & Rs(1) & " " & Rs!NombreFamilia Rs.MoveNext Loop Rs.Close Set Rs = Nothing Ejemplo: Cuando el comando regresa no registros Dim iNum As Long Cn.Execute "Insert into Familias (ClaveEmpresa,CveFamilia,NombreFamilia) Values (1,7,'kjgkgkjgkjg')", iNum, adCmdText MsgBox iNum

A continuacin se detalla la sintaxis de las sentencias de SQL para insertar, modificar y borrar informacin: Sintaxis INSERT (Insertar registro(s) en una tabla de la Base de Datos)
INSERT INTO NombreTabla [(campo1[, campo2[, ...]])] VALUES (valor1[, valor2[, ...])

Sintaxis UPDATE (Modifica registro(s) de una tabla de la Base de Datos )


UPDATE NombreTabla SET Campo1=nuevovalor[,Campo2=nuevoValor],[] WHERE Condicin

Sintaxis DELETE (Borra registro(s) de una tabla de la Base de Datos)


DELETE FROM NombreTabla WHERE Condicin

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

33

Mtodo Open de un RecordSet de ADO Sintaxis


recordset.Open Source, ActiveConnection, CursorType, LockType, Options

Parmetros Source: Nombre de variable de objeto Command vlido, una sentencia Select de SQL, un nombre de tabla, una llamada a un procedimiento almacenado o el nombre de archivo de un Recordset. ActiveConnection: Nombre de variable de objeto Connection vlido o un String que contiene parmetros ConnectionString. CursorType: Opcional. Un valor que determina el tipo de cursor que el proveedor debe usar al abrir el Recordset. Puede ser una de las siguientes constantes:
Constante adOpenForwardOnly

Descripcin
Cursor de tipo Forward-only. Predeterminado. Idntico a un cursor esttico, excepto 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.

adOpenKeyset

Cursor de conjunto de claves. Igual que un cursor dinmico, excepto que no se pueden ver los registros que agregan otros usuarios, aunque los registros que otros usuarios eliminan son inaccesibles desde su conjunto de registros. Los cambios que otros usuarios hacen en los datos permanecen visibles. Cursor dinmico. Las incorporaciones, cambios y eliminaciones que hacen otros usuarios permanecen visibles, y se admiten todo tipo de movimientos entre registros, a excepcin de los marcadores si el proveedor no los admite. Cursor esttico. 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.

adOpenDynamic

adOpenStatic

LockType: Determina el tipo de bloqueo (concurrencia) que debe usar el proveedor al abrir el Recordset. Puede ser una de las siguientes constantes: Constante Descripcin

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

34

adLockReadOnly adLockPessimistic

Predeterminado. Slo lecturano puede modificar los datos. 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 durante el proceso de modificacin. 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.

adLockOptimistic

adLockBatchOptimistic

El valor de adLockPessimistic no es compatible si la propiedad CursorLocation est establecida a adUseClient. Si se establece un valor no compatible, no se producir un error; en su lugar, se usar el LockType compatible ms prximo

Localizacin del Cursor (CursorLocation) Establece o devuelve la posicin de un motor de cursores usando alguna de las siguientes constantes: Constante adUseClient
Descripcin

Usa cursores del lado del cliente suministrados por una biblioteca de cursores locales. Los motores de cursores locales admitirn a menudo muchas caractersticas que los cursores proporcionados por controladores no admitirn; por tanto, el uso de esta configuracin puede proporcionar una ventaja con respecto a caractersticas que sern habilitadas. Predeterminado. Usa cursores suministrados por el controlador o por el proveedor de datos. Estos cursores son, en ocasiones, muy flexibles y conceden un margen de sensibilidad adicional a los cambios realizados por otros usuarios en el origen de datos.

adUseServer

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

35

Options: Cuenta con las mismas propiedades del Options del cn.Execute

Ejemplo: Rutina para cargar el resultado de un Select en un RecordSet


'Carga un registro en un RecordSet, en modo de bloqueo pesimista PUBLIC Sub CargaRecordSet(ByVal SQuery As String, Rs as RecordSet) On Error GoTo AtrapaErr Set Rs = New ADODB.Recordset Rs.CursorLocation = adUseServer Rs.Open SQuery, cn, adOpenDynamic, adLockPessimistic Exit Sub AtrapaErr: MsgBox "El Registro est bloqueado por otro Usuario, intenta ms tarde", vbOKOnly + vbInformation, "Error de Acceso a Base de Datos" Err.Clear End Sub

Ejemplo: para modificar un RecordSet


Rs!tiposeguridadpk = iTipSeg 'Carga la llave al buffer del Rs Rs!desctiposeguridad = Text1(0) ' Carga la descripcin del tipo de seguridad al Buffer del Rs Rs.Update Actualiza el buffer a la base de datos

Ejemplo: Para agregar un registro a la Base de Datos a travs de un RecordSet.


Rs.AddNew 'Agrega un registro en blanco a la base de datos Rs!tiposeguridadpk = iTipSeg 'Carga la llave al buffer del Rs Rs!desctiposeguridad = Text1(0) ' Carga la descripcin del tipo de seguridad al Buffer del Rs Rs.Update Actualiza el buffer a la base de datos

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

36

Mdulo 5: Controles que se Llenan con Informacin de la Base de Datos


ComboBox
Mtodo Combo1.AddItem Elemento Adiciona un elemento al ComboBox Propiedad Combo1.NewIndex Devuelve el ndice del ltimo elemento agregado a un control ComboBox. Propiedad Combo1.ItemData(ndice) = llave Devuelve o establece un nmero llave especfico para cada elemento de un control ComboBox. Mtodo Combo1.Clear Borra el contenido de los controles ComboBox. Propiedad Combo1.ListIndex Devuelve o establece el ndice del elemento seleccionado actualmente en el control. Private Sub Combo1_Click() Llave = Combo1.ItemData(Combo1.ListIndex) End Sub Este cdigo pertenece al evento click del ComboBox y regresa la llave del elemento que se adicion.

Es un control que permite a los usuarios presentar catlogos y hacer una seleccin sobre ellos.

Elemento

Llave

Elemento Es el texto que aparece dentro del ComboBox. Es la informacin que se puede ver.

Llave Generalmente es la llave primaria del catlogo desplegado. Esta no se visualiza en el combo.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

37

A continuacin se presenta un ejemplo de un llenado de un combo con su llave primaria en un ItemData:


Public Sub llenacombo(ByRef combo As ComboBox, Sentencia As String) Dim indice As Integer Dim Rs As ADODB.Recordset Set Rs = New ADODB.Recordset Set Rs = Cn.Execute(Sentencia, , adCmdText) combo.Clear If Not Rs.EOF Then While Not Rs.EOF combo.AddItem Rs(1) indice = combo.NewIndex combo.ItemData(indice) = Rs(0) Rs.MoveNext Wend combo.ListIndex = 0 End If Rs.Close Set Rs = Nothing End Sub

El llamado de este procedimiento puede estar en cualquier parte de la aplicacin porque es pblico. A continuacin se presenta un ejemplo del llenado del combo1 con la tabla de familias: llenacombo Combo1, "select CveFamilia,NombreFamilia from Familias"

Cuando se requiere posicionar el ComboBox en un elemento determinado usando la llave que se tiene en el ItemData use en siguiente Procedimiento:
' Mueve el combo a la llave que se le indique (esta se encuentra en el ItemData) Public Sub BuscaEnCbo(ByRef cbo As ComboBox, ByVal llave As Long) cbo.ListIndex = 0 Do While cbo.ListIndex < cbo.ListCount And cbo.ItemData(cbo.ListIndex) <> llave cbo.ListIndex = cbo.ListIndex + 1 Loop End Sub

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

38

ListView
Para poder tener acceso al control del ListView primero adicione el control Microsoft Windows Common Control X.n en la Opcin de Componentes del men de Project. Evento ColumnClick ' Evento ColumnClick, se dispara cuando el usuario hace click ' en los encabezados del ListView con el fin de que se ordene por ' por esa columna. Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ColumnHeader) If ListView1.SortOrder = lvwAscending Then ListView1.SortOrder = lvwDescending Else ListView1.SortOrder = lvwAscending End If ListView1.SortKey = ColumnHeader.Index - 1 End Sub Este evento unido con la propiedad Sorted en true hacen que los registros del ListView se puedan ordenar haciendo click en las columna de ste. Private Sub ListView1_ItemClick(ByVal Item As ListItem) Text1(1).Text = Item Text1(0).Text = ListView1.SelectedItem.SubItems(1) .

El control ListView muestra elementos en una de cuatro vistas diferentes. Puede organizar los elementos en columnas con o sin encabezados, as como mostrar iconos y texto juntos. Configurando el ListView 1. Saque las propiedades del ListView con el click derecho y en la ceja de General en el concepto de View seleccione 3- lvwReport.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

39

2. Este control se combina con ImageList. El ImageList almacena los iconos que se desplegarn en el ListView. Para relacionar el ListView con el imageList pase a la siguiente ceja que es Lista de Imgenes y djela como se muestra en la siguiente figura:

3. Ahora muvase a la ceja de Orden y habilite el parmetro de Sorted. 2. Enseguida procederemos a insertar los encabezados de las columnas del ListView por lo que ubquese en la siguiente ceja y proceda a insertar las columnas como lo muestra la figura: Las columnas que no quiera que se muestren en el ListView en el ancho (width) asignarles cero.

Para este ejemplo a la Clave de la Familia se le asign cero en su ancho para ocultarla.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

40

A continuacin se muestra como se ve el ListView

El ListView se puede presentar de 4 maneras diferentes: Iconos grandes (estndar) Iconos pequeos Lista Informe

Modificando la propiedad View puede obtener las diferentes presentaciones: ListView1.View = lvwSmallIcon ListView1.View = lvwList ListView1.View = lvwReport ListView1.View = lvwIcon Cada una de estas provoca un efecto visual diferente del ListView.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

41

A continuacin se muestra un procedimiento genrico para llenar un Listview con informacin, asignndole el primer icono de ImageList:
' Procedimiento que llena un ListView Public Sub llenaListView(ByRef list_View As ListView, SQuery As String, Optional llave As String, Optional iNumIcono As Integer) Dim itmX As ListItem Dim Rs1 As ADODB.Recordset Dim iContador As Integer Set Rs1 = New ADODB.Recordset Set Rs1 = cn.Execute(SQuery) list_View.ListItems.Clear If iNumIcono = 0 Then iNumIcono = 1 Do Until Rs1.EOF() iContador = 0 Set itmX = list_View.ListItems.Add(, , RTrim(Rs1(iContador)), 1, iNumIcono) For iContador = 1 To (Rs1.Fields.Count - 1) If Rs1(iContador) = "01/01/1900" Then itmX.SubItems(iContador) = "" Else itmX.SubItems(iContador) = nulos(Rs1, iContador) End If Next iContador Rs1.MoveNext Loop Set Rs1 = Nothing End Sub ' Funcion Nulos para validar que alguna columna del Listview, no contenga valores Null Public Function nulos(ResultSet As Recordset, iIndice As Integer, Optional esNumero As Boolean) As String If IsNull(ResultSet(iIndice)) Then If esNumero Then nulos = 0 Else nulos = "" End If Else nulos = Trim(ResultSet(iIndice)) End If End Function

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

42

Mdulo 6: Errores
Verificando un Error
Err es un objeto con propiedades y mtodos. Propiedades Number Description Source

Mtodos Raise Clear

Err es un Objeto Err es un objeto que contiene informacin sobre el error que ha ocurrido. Este tiene propiedades y mtodos que usted puede verificar cuando un error ocurre, limpiar el valor de un error, o generar un error. Propiedades La propiedad Number es un entero que indica el ltimo error ocurrido. Cheque el valor de Err.Number para determinar qu error ocurri. La propiedad Description contiene un string con la descripcin del error. La propiedad Source contiene el nombre del objeto de tipo aplicacin que gener el error. Mtodo El mtodo Clear limpia un error. El mtodo Raise genera un error.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

43

Habilitando el Atrapar Errores


El atrapado de errores slo es vlido por procedimiento. On Error GoTo Etiqueta On Error GoTo ChecaError Ignorando el error continua el proceso. On Error Resume Next

Resume. Regresa a la instruccin que gener el error. Resume Next. Regresa a la siguiente lnea donde se gener el error.

Resume inicioFuera. Regresa a una lnea determinada o etiqueta. Si no existe la instruccin Resume, el procedimiento termina.

La instruccin On Error habilita el atrapar errores y especifica dnde debe seguir la ejecucin cuando un error ocurre. La instruccin On Error Resume Next causa que un error sea ignorado. Si el error ocurre a tiempo de ejecucin, el proceso continua con la siguiente lnea.

Ejemplo: Private Sub Command1_Click() On Error GoTo atrapaError MsgBox "Antes del error" Err.Raise 2500, , "Ejemplo de Error" Genera un error MsgBox "Siguiente linea despues del error" Exit Sub atrapaError: MsgBox Err.Number & " " & Err.Description Resume Next End Sub

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

44

Mdulo 7:Generacin de Reportes


Reportes (Data Report) Para la elaboracin de reportes se hace a travs del Data-Report. A continuacin se muestran los pasos para su elaboracin: 1. Establecer una conexin a la base de datos. Del men elija Proyecto y seleccione Mas Diseadores Activex y enseguida Enviroment, se presentar una ventana como la siguiente:

2. Enseguida seleccione Connection1 y saque sus propiedades con el click derecho del mouse. Enseguida aparece la siguiente ventana:

En la ceja de Conexin y en el parmetro de Usar el nombre del Origen de Datos, seleccionar el nombre del ODBC para la base de datos, en caso de ser

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

45

una base de datos que valide algn usuario puede especificar el usuario y password y enseguida presionar el botn de aceptar.

3. Enseguida seleccione Connection1 y con el click derecho del mouse seleccione agregar comando. Enseguida aparece la siguiente ventana:

Ahora teniendo seleccionado el Command1 saque las propiedades con el click derecho del mouse apareciendo la siguiente ventana:

En esta en parmetro Objeto de base de datos seleccione Tabla y en el Nombre del objeto, el nombre de la tabla con la que desea hacer el reporte. En caso de que el reporte se tenga que obtener de varias tablas seleccione Instruccin SQL y teclee el query en el recuadro de la parte inferior. Una vez efectuado esto presione el botn de aceptar.

4. Haciendo Click en el ms del Command1 se presentar la siguiente ventana:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

46

como se observa en el Command1 se despliegan los campos de la tabla o query que seleccion.

4. Ahora inserte la estructura del reporte para los datos de la tabla, para lo cual entre a la opcin del men Proyecto y elija Agregar Data Report. Deber tener tanto la estructura de la conexin como la estructura del reporte abiertos al mismo tiempo como se muestra en la siguiente imagen:

Ahora arrastre los campos de la tabla en la conexin a la estructura del reporte en la seccin de Detalle. A continuacin se muestra cmo podra quedar la ventana:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

47

5. enseguida en las propiedades del DataReport1 coloque las siguientes propiedades: DataMember DataSource Command1 DataEnvironment1

6. Ahora deber asignar el reporte a un botn en su evento click como se muestra a continuacin:

Private Sub Command1_Click() DataReport1.Show End Sub

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

48

Cargar un Reporte del Crystal Report con un ResultSet Crystal Report 8 En un reporte de Crystal Report se puede filtrar un conjunto de registro, a travs de la propiedad Selection Formula del control en Visual Basic, pero este tipo de filtro es ineficiente porque primero cargar todo el universo de registros en el reporte y hasta despus aplicar el filtro para mostrar nicamente los registros seleccionados. Cuando el volumen de informacin es mucha el tiempo para mostrar la informacin del reporte se elevar sustancialmente, siendo infactible el uso de este mtodo. Para solucionar este problema existe el mtodo de pasarle al reporte un Recorset el cual ya tenga seleccionada la informacin a reportear, incrementando sustancialmente la velocidad del cargado. Para pasar un RecordSet a un reporte, este deber estar creado en base a un archivo de definicin de datos, a continuacin de detalla como crear un reporte usando un archivo de definicin. Un archivo de definicin de datos es un archivo de texto separado por tabs que contiene informacin sobre nombre de campo, tipo de dato, y datos de muestra. Los nombres de campo usados en el archivo de definicin de datos se deben equiparar a los nombres de campo que aparecern en el reporte a tiempo de ejecucin. La informacin del tipo de campo indica el tipo de datos en cada campo (string, numrica, fecha, etc.) y, si es un campo de string, la longitud mxima permitida por el string. Finalmente, los ejemplos de datos por cada campo que el Crystal Report mostrara en el reporte en tiempo de diseo. El siguiente ejemplo muestra los campos en un archivo de definicin de datos: Order ID Customer Name Order Date Order Amount Long String 50 Date Currency 1 Sample string value Jan 5, 2000 $1.00

Estn soportados los siguientes tipos de datos: Tipo de Datos Descripcin BLOB Campo que contiene imgenes bitmap. bitmap images. Boolean True/False valor booleano. Byte 8-bit valor entero. Currency 64-bit valor de punto flotante, puede incluir el tipo currency. Date Cualquier valor date/time. Ejemplo: Jan 5, 1999 07/11/97 5:06:07 07/11/97 23:30:01

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

49

Long, int32 Memo Number Short, int16 String

32-bit valor entero largo. Cualquier string con mas de 254 caracteres. 64-bit valor de punto flotante. 16-bit valor entero Cualquier string con 254 caracteres como mximo.

La herramienta para crear un archivo de definicin de datos est disponible al seleccionar un origen de datos en la caja de dilogo del Cristal Report cuando inicia el diseo de un reporte basado el driver Active Data. Enseguida se muestran los pasos para crear una definicin: 1. Al seleccionar la base de datos para un reporte nuevo aparece la ventana Data Explorer, enseguida abra la carpeta de More Data Sources, de igual manera la carpeta de Active Data y enseguida la de Active Data (Field Definitions Only), la ventana aparece como a continuacin se muestra:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

50

2. Al seleccionar la carpeta de Active Data (Field Definitions Only) aparece la siguiente ventana para seleccionar el origen de datos:

3. Presione el botn de New para crear un nuevo archivo de definicin de datos.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

51

4. Use esta ventana para crear los campos para su archivo de definicin de datos. En esta teclee el nombre de los campos, tipo de dato, y datos de ejemplo para que aparezcan cuando este en modo de diseo y seleccione impresin preliminar. Si selecciona el tipo de datos String deber introducir la longitud de ste. 5. Haga click en el botn de Add para agregar un nuevo campo en su archivo de definicin de datos. 6. Contine agregando todos los campos que sean necesarios presionando el botn de Add. 7. Usted puede borrar un campo, seleccionndolo de la lista y presionando el botn de Delete (borrar).

8. Presione el botn de cerrar de la esquina superior derecha cuando usted termine. Un mensaje aparecer preguntando si desea salvar el archivo. 9. Presione que s y salve el archivo en la ruta donde vaya a colocar el reporte. 10. Cuando termina la nueva definicin de datos aparece en la ventana del paso 1. 11. Contine creando su reporte.

Nota: Una vez terminado el reporte asegrese de que la bandera de Save Data with Report est desactivada en la opcin del men File.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

52

Ahora proceda a seguir los siguientes pasos para mandar ejecutar el reporte desde Visual Basic a travs de ADO: 1. Asegrese de tener las siguientes referencias: Crystal Report Engine 8 Object Library y Microsoft Activex Data Object 2.x.
2. Declare las variables para la Base de Datos y el Recordset en su aplicacin.

Estas pueden estar en la seccin de declaraciones dentro de la forma o en un modulo. A continuacin se muestra un cdigo similar:
Dim cn As ADODB.Connection Variable para la conexin a la Base de Datos Dim Rs As ADODB.Recordset Variable para el Recordset Dim crpApplication As CRPEAuto.Application Variable para crear una aplicacin de Cristal con Automation Server Dim crpReport As CRPEAuto.Report Variable para abrir el reporte Dim crpDatabase As CRPEAuto.Database Variable para la Base de Datos Dim crpTables As CRPEAuto.DatabaseTables Variable para tablas de la base de datos Dim crpTable As CRPEAuto.DatabaseTable Variable para una tabla

3. Hacer la conexin a la base de datos en el evento load de la forma y en

evento unload cerrar y destruir la conexin:


Private Sub Form_Load() Set cn = New ADODB.Connection cn.ConnectionString = ("DBQ=" & App.Path & "\Ejemplo.mdb;DefaultDir=" & App.Path & ";Driver={Driver do Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;FILEDSN=C:\Documents and Settings\OmarB\Mis documentos\Ejemplo.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransacti ons=0;Threads=3;UID=admin;UserCommitSync=Yes;") cn.Open End Sub Private Sub Form_Unload(Cancel As Integer) cn.Close Set cn = Nothing End Sub

4. A continuacin coloca el siguiente cdigo en un botn para mandar cargar el

Recordset y mandar ejecutar el reporte:


Private Sub Command1_Click() Carga el Recorset con la informacin resultante del query Set Rs = cn.Execute("Select A.NombreEmpresa,A.DomicilioEmpresa,B.NombreUsuario,B.Domicilio " & _ "from Empresa A, DatosUsuario B") Crea la aplicacin del crystal Set crpApplication = CreateObject("crystal.crpe.application") Abre el reporte Set crpReport = crpApplication.OpenReport(App.Path & "\ReportEjemplo.Rpt") ' Asigna la base de datos del reporte Set crpDatabase = crpReport.Database Asigna la lista de tablas del reporte Set crpTables = crpDatabase.Tables La propiedad Item dentro de la coleccin de tablas de la Base de Datos le debe especificar cual tabla dentro de la base de datos se remplazar con el recordset. Despus el archivo de definicin de datos actuar como la base de datos con una sola tabla, solo se deber pasar 1 en la propiedad item Set crpTable = crpTables.Item(1) Una vez que se tiene el objeto tabla de base de datos para el objeto Report, usted puede pasar el Origen de Datos al

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

53

reporte usando el mtodo SetPrivateData. Este mtodo requiere de dos parmetros. El primero es un valor indicando que el origen de datos que desea pasar es de tipo Actives Data Source. Este valor debe ser 3. El segundo parmetro es el campo del origen de datos (RecordSet). Call crpTable.SetPrivateData(3, Rs) 'Se dan los parmetros de la presentancin previa del reporte crpReport.Preview " Ttulo del Reporte", 0, 0, 800, 600, 524288 Or 16777216 Or 268435456 'Seleccin de impresora crpReport.SelectPrinter "", "", "" End Sub

5. Enseguida pruebe mandar a la impresora su reporte.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

54

Mdulo 8: Cdigo de Barras

Poner un simple cdigo de barras es una serie de rayas verticales negras y blancas, que pueden ser ledos por un lector de cdigo de barras. Las lneas verticales negras y blancas contienen la clave de un producto, con la cual podremos acceder a la informacin de este en la base de datos, como su precio, peso, y tamao. Una vez que es ledo este se convierte en letras y nmeros. Preferible que tener un cajero que tenga que teclear un nmero de 20 dgitos para cada producto. Por las necesidades particulares y demandas de varias industrias existen diferentes tipos de cdigo de barras que pueden ser usados. Por ejemplo, el cdigo UPC es usado para Cds, productos, y revistas (pero no est limitado para estos), mientras que el cdigo 39 es usado en tiendas de renta de videos, identificacin de tarjetas y para etiquetas. El cdigo 128 es usado frecuentemente para el embarque industrial. En este documento nos concentraremos en el cdigo de barras Interleaved 2 de 5. Cmo Generar el Cdigo de Barras Interleaved 2 de 5 (cadena numrica) Este cdigo se usa principalmente dentro de industrias y en almacenes industriales. Para hacer uso de este tipo de cdigo de barras usaremos el tipo de letra i2of5txt.ttf, el cual deber instalar en el panel de control. El cdigo Interleaved 2 de 5 es un mtodo compacto de codificar una secuencia de caracteres numricos; solamente dgitos del 0 al 9 puede ser codificados, pero dentro de una cadena muy larga. Todos los cdigos Interleaved 2 de 5 tiene un nmero fijo de caracteres numricos. Por consiguiente un cdigo de barras con un nmero impar de dgitos debe ser rellenado con un cero al inicio. El cdigo de barras usa un carcter de Inicio al principio y un carcter de paro al final, para delimitar los dgitos codificados. Cada letra con el Font est representado con 2 dgitos del 00 al 99. Divide la cadena de nmeros en pares de dgitos y convierte estos en cdigo de barras usando la siguiente formula: A + ABS(A<=49)*48 + ABS(A>=50)*142 Donde A representa el par de dgitos a codificar. Los pares de nmeros que vayan del 00 al 49 son convertidos a caracteres nmeros en el rango de 48 (0x30) a 97 (0x61) mientras que los siguientes del 50 al 99 son convertidos en el rango de 192 (0xC0) al 241 (0xF1). El carcter de inicio es 40 (0x28) y el de paro es 41 (0x29).
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com 55

El siguiente cdigo muestra la frmula que se tiene que insertar en Crystal Reports, con sintaxis de visual (en la esquina superior derecha del Cristal Report 8), este incluye la generacin de un dgito verificador:
Dim StartCode, StopCode, DataToPrint, DataToEncode As String Dim I, CurrentChar as number El numero a codificar esta fijo pero se puede colocar el nombre de un campo de la base de datos DataToEncode = "2002141520" 'DataToEncode = Anio & TipoPago & Referencia DataToPrint = "" StartCode = Chr(40) StopCode = Chr(41) For I = 1 To Len(DataToEncode) Step 2 'Get the value of each number pair CurrentChar = Val((Mid(DataToEncode, I, 2))) 'Get the ASCII value of CurrentChar according to chart DataToPrint = DataToPrint & Chr((CurrentChar + Abs(Iif((CurrentChar <= 49),1,0)) * 48 + Abs(Iif((CurrentChar >= 50),1,0)) * 142)) Next I 'Get Printable String Formula = StartCode + DataToPrint + StopCode

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

56

Cmo Leer el Cdigo de Barras Interleaved 2 de 5 (cadena numrica) Para leer el cdigo de barras deber contar con un lector, ya sea con entrada para teclado o serial. En el caso de que sea entrada por teclado, no se requiere agregar cdigo alguno para leer el cdigo, tan solo basta ubicar el cursor en la caja de textos en la que desea aparezca el nmero y pasar el cdigo por el lector. Para el caso de que sea serial, a continuacin se muestra un ejemplo:
Private Sub Text2_GotFocus() ' Bfer para almacenar la cadena de entrada Dim Instring As String ' Usar COM2. MSComm1.CommPort = 2 ' MSComm1.Settings = "9600,O,7,1" 'Velocidad de 9600, con Paridad, 7 Bits de Datos y uno de paro MSComm1.Settings = "9600,N,8,1" 'Velocidad de 9600, Sin Paridad, 8 Bits de Datos y uno de paro ' Indicar al control que lea todo el bfer al usar Input. MSComm1.PortOpen = True Do DoEvents Buffer$ = Buffer$ & MSComm1.Input Loop Until Len(Buffer$) > 12 ' Leer los datos de respuesta de aceptacin en el puerto serie. ' Cerrar el puerto serie. MsgBox Buffer$ 'Manda el nmero de cdigo a la ventana. MSComm1.PortOpen = False End Sub Private Sub Text2_LostFocus() Label3.Caption = "" ' Limpia el Label3 al perder el foco End Sub

Para este ejemplo deber agregar el control Microsoft Comm Control 6.0 en el men Proyecto Componentes.

En caso de contar con un lector de cdigo de barras por teclado, solo coloque el cursor en una caja de textos y el lector pondr el numero ledo.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

57

Mdulo 9: Manejo de Imgenes


Cmo acceder y modificar datos de tipo Image en Sql Server Usando ADO Stream Object. Requerimientos: ActiveX Data Objects (ADO), version 2.5 Microsoft Visual Basic Enterprise Editions for Windows, version 6.0 Microsoft OLE DB Provider for SQL Server, version 7.0 Microsoft SQL Server version 7.0 El Stream Object introducido en Actives Data Object 2.5 puede ser usado para simplificar el acceso y modificacin de datos binarios largos (BLOB) en SQL Server, a continuacin se muestra un cdigo de ejemplo:

Command1

Picture

Command2

Picture

CommonDialog1

A continuacin se muestra el cdigo de la venana:


Option Explicit Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim mstream As ADODB.Stream ' La imagen del primer registro de la base de datos lo manda salvar ' a un archivo Private Sub Command1_Click() On Error GoTo Command1_Error ' Llena el recorset con el resultado de la consulta I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com 58

Set rs = New ADODB.Recordset rs.Open "Select * from pub_info", cn, adOpenKeyset, adLockOptimistic ' Crea el objeto de tipo ADODB.Stream para cargar en l la imagen del ' primer registro Set mstream = New ADODB.Stream mstream.Type = adTypeBinary mstream.Open mstream.Write rs.Fields("logo").Value ' Hace uso del control commondialog para abrir una ventana de ' salvar como y as poder seleccionar el nombre con que queremos ' salvar la imagen y su ubicacin With CommonDialog1 .FileName = "" .Filter = "Image (*.gif)|*.gif" .ShowSave If Len(.FileName) <> 0 Then ' Salva la imagen con el nombre de archivo especificado mstream.SaveToFile .FileName, adSaveCreateOverWrite ' Carga la imagen al Picture2 Picture1.Picture = LoadPicture(.FileName) End If End With rs.Close Set rs = Nothing MsgBox "Salvando la imagen de la base de datos al archivo: " & CommonDialog1.FileName Exit Sub Command1_Error: MsgBox Str(Err) & " - " & Error, vbExclamation End Sub ' Modifica la imagen del primer registro de la tabla pub_info, con ' una imagen gif seleccionada. Private Sub Command2_Click() On Error GoTo Command2_Error ' Llena el recorset con el resultado de la consulta Set rs = New ADODB.Recordset rs.Open "Select * from pub_info", cn, adOpenKeyset, adLockOptimistic ' Crea el objeto de tipo ADODB.Stream para cargar en l la imagen del ' primer registro Set mstream = New ADODB.Stream mstream.Type = adTypeBinary mstream.Open ' Hace uso del control commondialog para poder seleccionar la imagen ' que desea almacenar en la base de datos (ventana de abrir) With CommonDialog1 .FileName = "" .Filter = "Image (*.gif)|*.gif" .ShowOpen If Len(.FileName) <> 0 Then ' carga en el stream la imagen del archivo I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com 59

mstream.LoadFromFile .FileName ' asigna el stream al recordset rs.Fields("logo").Value = mstream.Read ' asigna la imagen al picture1 Picture2.Picture = LoadPicture(.FileName) ' actualiza el recorset para guardar la nueva imagen rs.Update End If End With rs.Close Set rs = Nothing MsgBox "Salvando la imagen: " & CommonDialog1.FileName & ", en la base de datos" Exit Sub Command2_Error: MsgBox Str(Err) & " - " & Error, vbExclamation End Sub 'Hace la conexin a la base de datos Pubs (Base de Datos Ejemplo que se ' instala con el SQL Server) Private Sub Form_Load() Set cn = New ADODB.Connection cn.Open "Driver=SQL Server; Server=(local);Database=Pubs;Uid=sa;Pwd=;" End Sub

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

60

Mdulo 10: Automatizacin OLE con Excel


La automatizacin OLE habilita que una aplicacin exponga sus objetos y mtodos a otra aplicacin. En el presente manual expondremos la automatizacin OLE con Excel. Microsoft Excel expone arriba de 100 objetos de Automatizacin OLE que usted puede programar usando Visual Basic. Cada uno de estos objetos encapsulan algunos aspectos de Excel, como hacer una grfica, dibujar etc. La aplicacin, la grfica y la hoja son objetos que pueden ser creados directamente con la funcin CreateObject. El resto de los objetos existen solamente como parte de un nivel superior del objeto y no son creados directamente. A continuacin se muestran los pasos para crear una grfica en excel. 1. Agregue en las referencias del proyecto Microsoft Excel x.0 Object Library 2. Cree una tabla en Access con la siguiente estructura

a partir de los datos que se almacenen en esta tabla se generar una grfica de Pie en Excel.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

61

3. Cree una ventana como a continuacin se muestra:

Command2

Command1

4. A continuacin se nuestra el cdigo que habr de colocar en esta forma:


Option Explicit Public Cn As ADODB.Connection Dim i As Integer Dim Rs As Recordset Dim B(100) As String * 15 Dim A(100) As String * 30 Dim F(100) As Double Dim xlChart As Chart Dim xl As Excel.Application Dim iElementos As Integer ' Variable para la conexin de la Base de Datos ' Sub ndice de los arreglos ' RecordSet para almacenar el resultado de la consulta ' Declaracin de arreglo para las pos. de las columnas ' Declaracin de arreglo para los Nombres Alumnos ' Declaracin de arreglo para los promedios ' Declaracin para la Grfica ' Declaracin para generar la aplicacin de Excel ' Es el contador para el nmero de elementos que se utilizarn en la grfica

'Este procedimiento es para mandar los parmetros ya en el diseo de la grfica Private Sub Command2_Click() Dim strVar As String Screen.MousePointer = vbHourglass ' Convierte el curso a reloj de arena RecuperaDatos ' Rutina para cargar los datos de la base de datos Set xl = CreateObject("Excel.Application") ' Crea la aplicacin de Excel xl.Visible = True xl.Workbooks.Add ' Adiciona un Workbook a la hoja de excel xl.Range("A2").Value = "Promedios" For i = 1 To iElementos ' Pasa los datos de los arreglos a la hoja de Excel strVar = Trim(B(i)) strVar = strVar & "1" xl.Range(strVar).Value = A(i) strVar = Trim(B(i)) strVar = strVar & "2" xl.Range(strVar).Value = F(i) Next i strVar = "A1:" & Trim(strVar) xl.Range(strVar).Select ' Selecciona los datos de la hoja ' 'Instrucciones para los Bordes en los datos With xl.Selection.Borders(xlLeft) .Weight = xlThin .ColorIndex = xlAutomatic End With With xl.Selection.Borders(xlRight) .Weight = xlThin

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

62

.ColorIndex = xlAutomatic End With With xl.Selection.Borders(xlTop) .Weight = xlThin .ColorIndex = xlAutomatic End With With xl.Selection.Borders(xlBottom) .Weight = xlThin .ColorIndex = xlAutomatic End With xl.Selection.BorderAround Weight:=xlThin, ColorIndex:=xlAutomatic xl.Columns("A:M").EntireColumn.AutoFit ' Ancho automtico de la columna A a la M xl.Range(strVar).Select Set xlChart = xl.Charts.Add() xlChart.HasLegend = False xlChart.Type = xl3DPie xlChart.HasLegend = True

' Determinacin del tipo de grfica ' Para colocar una leyenda dentro de la grfica

xlChart.ChartWizard , Gallery:=xl3DPie, Format:=4, PlotBy:=xlRows, CategoryLabels:=1, SeriesLabels:=1, HasLegend:=1 xlChart.HasTitle = True xlChart.ChartTitle.Text = "Grfica Promedios" ' Titulo de la grafica ' Procedimiento para que rote la grafica solo en caso de que esta sea de tres dimensiones For i = 30 To 180 Step 5 xlChart.Rotation = i Next Screen.MousePointer = vbDefault End Sub ' Este procedimiento es para tomar los datos de la base de datos y colocarlos en arreglos, ' as como para determinar el nmero de columnas que se usarn. Public Sub RecuperaDatos() Dim Sentencia As String ' obtenemos los datos de la tabla que generarn la grfica Set Rs = Cn.Execute("Select cveAlumno,NombreAlumno,PromedioAlumno From Alumno") i=1 Do Until Rs.EOF() ' Determina el nmero de columnas que usar Select Case Rs!cveAlumno Case 1 B(i) = "B" Case 2 B(i) = "C" Case 3 B(i) = "D" Case 4 B(i) = "E" Case 5 B(i) = "F" Case 6 B(i) = "G" Case 7 B(i) = "H" Case 8 B(i) = "I" Case 9 B(i) = "J" Case 10 B(i) = "K" Case 11 B(i) = "L" Case 12 B(i) = "M" End Select ' Carga los datos en arreglos A(i) = Rs!nombrealumno F(i) = Rs!PromedioAlumno Rs.MoveNext

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

63

i=i+1 Loop Rs.Close Set Rs = Nothing iElementos = i - 1 End Sub 'Cerrar la ventana Private Sub Command1_Click() Unload Me End Sub ' Evento Load se establece la conexin a la Base de Datos Private Sub Form_Load() Set Cn = New ADODB.Connection Cn.ConnectionString = "DBQ=" & App.Path & "\Calificacion.mdb;DefaultDir=" & App.Path & ";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;ImplicitCommitSync=Yes;MaxBufferSize=512;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3; UID=admin;UserCommitSync=Yes;" ' Abre la conexin a la Base de Datos Cn.Open End Sub ' Descarga la ventana y destruye las variables de Excel Private Sub Form_Unload(Cancel As Integer) Set xlChart = Nothing Set xl = Nothing End Sub

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

64

Mdulo 11: Implementacin del Agente y el DynamiCube


El agente de Microsoft Versin 2.0, es una tecnologa que mantiene las maneras ms naturales para que las personas se puedan comunicar con sus computadoras. Esta interfaz permite a diseadores incorporar imgenes animadas e interactivos en sus aplicaciones. El Agente de Microsoft proporciona cuatro caracteres estndares: Merli, Genie, Robby y Peedy. Los agentes adicionales han sido creados por otros marcas que pueden estar disponibles en el Internet (http://www.microsoft.com/msagent/). Es tambin posible crear su propio Agente. Estos son cuatro de los agentes que se encuentran disponibles:

Para instalar el agente hay que descargar el archivo de Internet sobre tu computadora segn el agente que elijas (el cotorro es Ped.exe), una vez instalado el agente el archivo queda almacenado en la siguiente ruta: C:\WINDOWS\Msagent\CHARS\Peedy.acs

Para el reconocimiento de voz es necesario bajar los archivos ejecutables que se encuentra en la direccin antes mencionada: Lhttsspe.exe Spchapi.exe despus de esto ejecuta el archivo para activar los controladores, para el reconocimiento.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

65

Para activar el agente en Visual Basic es necesario activar la siguiente librera, en MENU->Proyecto->Componentes->Microsoft Agent 2.0, en la Caja de herramientas debe aparecer un icono como el siguiente: . El icono del agente se puede pegar en una forma nueva o en alguna forma que ya este diseada ( puede ser la MDI, para aplicaciones de bienvenida al sistema)

Una vez pegado el icono sobre la forma, en las propiedades del agente(F4), en la propiedad Nombre se da el que dese (en el siguiente cdigo de ejemplo se dio el nombre Agente), con el nombre que se d se deber trabajar el cdigo. seguido de esto se introduce el siguiente cdigo: En el evento Load de la forma Private Sub Form_Load() Cdigo par abrir el agente, dando la ruta Agente.Characters.Load ("genio"), "C:\windows\msagent\chars\genie.acs" Agente.Characters("genio").Show Cdigo para dar instrucciones de palabras (lo que el agente dir) Agente.Characters("genio").Speak "Hola mundo" Cdigo para dar animacin del agente Agente.Characters("genio").play greet End Sub Al momento de la ejecucin deber aparecer como sigue:

existen mas animaciones para el agente, estas son algunas otras: Agente.Characters("Genio").Play "blink" Agente.Characters("Genio").Play "alert" Agente.Characters("Genio").Play "Acknowledge" Agente.Characters("Genio").Play "decline" Agente.Characters("Genio").Play "GestureDown" Agente.Characters("Genio").Play "explain"

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

66

PROPIEDAD MOVE TO Est propiedad sirve para, desplazar el agente sobre la pantalla, por medio de coordenadas, establecidas sobre el cdigo, como sigue: Agente.Characters("Genio").MoveTo 500, 300 Este cdigo va en Form_Load. (Seguido del cdigo anterior), las coordenadas (500, 300), son a criterio del programador.

AGREGAR OPCIONES AL MENU POP-UP, AL DAR CLICK DERECHO SOBRE EL AGENTE. Para agregar un una opcin al menu pop-up teclee la siguiente lnea en el Form_Load. Agente.Characters("Genio").Commands.Add "cmd1", "&Boton1" subrutina que se activa cuando se hace click en el menu Pop-Up Private Sub Agente_Command(ByVal UserInput As Object) If UserInput.Name = "cmd1" Then Agente.Characters("genio").Speak "hizo click en el boton 1" End If End Sub

PROPIEDAD BOOKMARK Para cuando se quiere arrojar el agente junto con un mensaje. esta subrutina se activa cuando un marcador Bookmark en el texto de hablar es encontrado. Private Sub Agente_Bookmark(ByVal BookmarkID As Long) If BookmarkID = 100 Then MsgBox "deseas salvar este archivo" End If End Sub En el Form_Load se pone la siguiente instruccin Agente.Characters("genio")..speak Deseas salvar \mrk=100\ este archivo El marcador mrk = 100 es el tope en donde se realiza el cdigo de la funcin Bookmark del agente en el BookmarkID =100.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

67

Microsoft Agent Character Editor. Si no quieres usar alguno de los cuatro characters anteriores, puedes usar el editor de agentes para crear tus propias imgenes de animacin y ensamblarlas, temporizarlas, bifurcarlas y compilarlas en un archivo tipo Agent Character. Como en la animacin tradicional en un Character esta echa de imgenes separadas, cada una alterada ligeramente, y cuando se activan secuencialmente da la ilusin de movimiento.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

68

DynamiCube
DynamiCube es un mtodo para presentar cantidades muy grandes de informacin que se encuentra almacenada en bases de datos relacionales en una forma de sumatoria y tabulada. De esta manera, el usuario tiene la capacidad de realizar decisiones de una manera ms precisa. Los datos numricos a introducir pueden provenir de diferentes lugares, ser tabulada, organizada campos de totales y ser presentada al usuario en forma de un cubo multidimensional. El usuario final puede modificar la manera en que se visualizan los datos, aadir campos, as como modificar los parmetros de clculo y agregar funciones que se adapten a sus necesidades de anlisis. Caractersticas de DynamiCube Navegacin grfica y a altas velocidades de datos multidimensionales Trabaja con las ediciones Profesional y Empresarial de Visual Basic, as como con Visual C++, Delphi, Power Builder, Optima ++, el Explorador de Internet de Microsoft, y Microsoft Acces. Soporta datos

Utilizando DynamiCube En Visual Basic, los controles personalizados se incluyen en la base de un proyecto. Una vez que un control personalizado es incluido en un proyecto, y este salvado, no es necesario incluirlo de nuevo cada vez que el proyecto se reabra; el control aparecer siempre en la caja de herramientas. Para incluir el control DynamiCube en su proyecto: 1. Abra Visual Basic e inicie un nuevo proyecto. 2. Seleccione, del Men Proyecto, la opcin Componentes, y en el cuadro de dilogo que aparecer, marque la opcin DynamiCube Versin 2.0. 3. Presione el botn Aplicar y luego presione Aceptar. 4. Una vez realizados estos pasos, el siguiente control deber aparecer en su caja de herramientas:

Una vez que el control est en su caja de herramientas, arrstrelo hasta la forma en donde quiere ponerlo y dele el tamao adecuado, est se vera as

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

69

Abra la hoja de propiedades del control (de clic derecho sobre el control y seleccione Propiedades o doble clic en propiedades en la el men de propiedades) En la pestaa de General especifique el Tipo de Conexin como ODBC y en seguida teclee la cadena de conexin en el origen de datos. Ahora coloque el query en la propiedad RecordSource. La pestaa de General deber verse as:

Abra la pestaa de layout. De clic en el botn 'Retrieve Fields' para actualizar la lista de los campos requeridos. Arrastre y suelte los campos de la lista a las filas, columnas campos y rea de datos. De clic en OK para actualizar la vista del DynamiCube corra su proyecto

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

70

También podría gustarte