Sei sulla pagina 1di 98

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

INTRODUCCIN En la actualidad la tecnologa desempea un papel cada vez ms importante en nuestra vida, lo que nos obliga a estar a la vanguardia de los cambios que da a da se van dando. El desarrollo tecnolgico ha trado como consecuencia una dependencia de la sociedad por los sistemas electrnicos, ya que estos se encuentran inmersos en todos los mbitos socioculturales. El ingeniero en electrnica desarrolla competencias que le permiten resolver la problemtica relacionada con esta tecnologa. La unidad de aprendizaje de programacin desarrolla la competencia de identificar, desarrollar y modificar programas de tipo computacional. El presente material fue elaborado como apoyo a esta Unidad de Aprendizaje, para la cual se utiliz como base el lenguaje de programacin visual Visual Basic 6.0 . En una prikmera parte se dan los conceptos bsicos, as como algunas herramientas y ejercicios para su fcil comprensin. En una segunda parte se apoya este curso con problemas y ejercicios para un mayo entenimiento del mismo. Cabe sealar que la biblioigrafa que se tomo en su gran mayora fue de la librera de ayuda de Visual Basic 6.0 , as como la mayot parte de ejercicios del Mtro. Carlos Castillo Peralta quien ha publicado un interesante material as como prcticas de laboratorio al respecto. M. en C.A. Imelda Avalos Flores

Academia de Computacin

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

INTRODUCCIN A LA PROGRAMACIN VISUAL La palabra Visual hace referencia al mtodo que se utiliza para crear la interfaz grafica de usuario. En lugar de escribir numerosas lneas de cdigo para implementar una interfaz, se utiliza el ratn para arrastrar y colocar los objetos prefabricados al lugar deseado dentro de un formulario. Programacin en Windows Visual Basic 6.0 est orientado a la realizacin de programas para Windows, pudiendo incorporar todos los elementos de este entorno informtico: ventanas, botones, cajas de dilogo y de texto, botones de opcin y de seleccin, barras de desplazamiento, grficos, mens, etc. Prcticamente todos los elementos de interaccin con el usuario de los que dispone Windows 95/98/NT pueden ser programados en Visual Basic 6.0 de un modo muy sencillo. En ocasiones bastan unas pocas operaciones con el ratn y la introduccin a travs del teclado de algunas sentencias para disponer de aplicaciones con todas las caractersticas de Windows 95/98/NT. En los siguientes apartados se introducirn algunos conceptos de este tipo de programacin. 1.1.1. Herramientas RAD La escritura de aplicaciones mediante herramientas de desarrollo rpido o visual se basa en el uso de componentes o controles prefabricados, que son dispuestos en ventanas y personalizados mediante propiedades. De esta forma la creacin de la interfaz de usuario pasa de ser un tedioso trabajo exclusivamente de escritura de cdigo a unas simples operaciones de ratn y poco ms. El programador puede volver a centrarse en el ncleo del programa, el tratamiento de la informacin, y no necesita preocuparse de la gestin de la ventana en la que se visualizan los datos, ni de la forma en que el usuario se puede desplazar de un lugar a otro con el ratn, por poner un ejemplo. Los entornos de desarrollo visual, adems de simplificar la creacin de la interfaz, tambin facilitan en gran medida otras operaciones habituales en Windows como la comunicacin con otras aplicaciones, el uso de cuadros de dilogo comunes, la gestin de bases de datos, etc. Cada elemento de un programa, ya sea visual o no, viene representado por un componente. A pesar de la simplicidad que denotan este tipo de entornos, hay que tener en cuenta que siempre ser necesario escribir algo de cdigo para que una aplicacin realice una funcin til. Aunque es posible crear programas consistentes tan slo en lo que es la interfaz, al ejecutarlo obviamente slo tendremos eso, una ventana con algunos elementos que pueden responder a las acciones del usuario pero que no generarn ningn resultado a partir de la informacin introducida, que es la finalidad principal de cualquier aplicacin. El cdigo necesario para realizar determinadas funciones de la aplicacin estar escrito en un determinado lenguaje, que ser la base del entorno de desarrollo visual que estemos usando. El lenguaje base de Delphi es Objec Pascal, el de Visual Basic es BASIC, y el de C++ Builder es C++. El lenguaje es, precisamente, lo que diferencia fundamentalmente a un entorno RAD de los dems, hacindolo ms o menos potente o flexible. El lenguaje BASIC es de gran simplicidad, ideal para el programador novel, y por ello el elegido para este curso en particular. 1.1.2. Principales lenguajes de programacin visual En la actualidad existe gran diversidad de compiladores visuales para el sistema operativo Windows, por enumerar algunos Visual C++, Visual Basic, Visual Fox Pro, Visual Fortran, Visual Cobol, C++

Academia de Computacin

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Builder, Delphi, Java, etc,. Sin embargo, en estos momentos los lenguajes mas predominantes en la industria son Visual C++, Visual Basic, Delphi, C++ Builder y Java, los dos primeros de la empresa Microsoft, los dos segundos de la empresa Borland/Inprise y Java de Sun Microsistemas 1.2. Principales caractersticas de los entornos visuales en Windows La caracterstica principal de los entornos visuales en Windows es que trabajan por medio e ventanas para presentar informacin al usuario; utilizan iconos, que son dibujos grficos de tamao pequeo que representan a un objeto de Windows (Carpeta, unidad de disco, programa, impresora, etc.). La barra de tareas de Windows es parte importante en estos entornos, contiene el men Inicio, mediante el cual se accede a todos los programas y utilidades, contiene la zona de carga de carpetas y programas, que contiene un icono por cada programa que se est ejecutando y la zona de control, que muestra la fecha y la hora, adems de iconos para otras caractersticas como volumen de sonido, rendimiento del equipo, antivirus, etc. 1.3. Componentes y controles visuales para reutilizacin Los componentes son unos elementos genricos con una funcionalidad muy concreta, cuya nica finalidad es la reutilizacin. Cada uno de ellos est destinado a realizar una tarea tpica en una aplicacin. Un componente de la VCL ((Visual Class Library o Biblioteca de Componentes Visuales)) es una clase que caracteriza a un control de Windows agregando propiedades, mtodos y gestores de eventos a cada control. 1.4. La API de Windows Las API de Windows (Application Programming Interface) son funciones automticas que ya trae incorporadas el sistema operativo Windows y que podemos convocar para programar en Visual Basic. De esta manera ahorramos recursos y programamos en un nivel de mayor complejidad. Win32 es el nombre de la API que ofrece Microsoft para la implementacin de programas. Cuando escribe un programa de win32 se est llamando a funciones de la API Win32. Estas funciones se encuentran en archivos .dll en el directorio System de Windows que son libreras de enlace dinmico. Estas libreras se diferencian de otras porque en vez de ser enlazadas cuando es compilado el programa y de esa forma incluirse el cdigo en el ejecutable(tiempo de compilacin); lo que se hace es tener una referencia al fichero y a la lnea de cdigo donde empieza la funcin y cuando es llamada se carga en memoria (se carga en tiempo de ejecucin) y cualquier proceso puede hacer uso de ella para de esta forma no tener mltiples copias del mismo cdigo en memoria ni en disco. De estas librera cabe destacar entre otras: kernel32.dll : funciones para gestin de memoria, procesos e hilos. user32.dll :funciones para interfaz del usuario, ventanas y mensajes. gdi32.dll :funciones para grficos y visualizacin de texto. shell32.dll :funciones del shell de Windows

La API Win32 se implementa en cuatro plataformas: Win32s, Windows NT/2000 , Windows 95/98 y Windows CE. Esto significa que los programas se pueden compilar en estos distintos sistemas y ejecutarse sin cambiar una sola lnea de cdigo. En cambio hay que destacar que hay diferencias entre

Academia de Computacin

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

al implementacin de Win32 en Windows NT y en el resto, pues en el resto aunque las funciones existen tienen implementaciones restringidas. 1.5. Comunicacin con manejadores de bases de datos (ADO, ODBC, RDO, DAO) El sistema manejador de bases de datos (DBMS) es la porcin ms importante del software de un sistema de base de datos. Un DBMS es una coleccin de numerosas rutinas de software interrelacionadas, cada una de las cuales es responsable de alguna tarea especfica. El DBMS es conocido tambin como Gestor de Base de datos. Las funciones principales de un DBMS son: Crear y organizar la Base de datos. Establecer y mantener las trayectorias de acceso a la base de datos de tal forma que los datos puedan ser accesados rpidamente. Manejar los datos de acuerdo a las peticiones de los usuarios. Registrar el uso de las bases de datos. Interaccin con el manejador de archivos. Esto a travs de las sentencias en DML al comando de el sistema de archivos. As el Manejador de base de datos es el responsable del verdadero almacenamiento de los datos. Respaldo y recuperacin. Consiste en contar con mecanismos implantados que permitan la recuperacin fcilmente de los datos en caso de ocurrir fallas en el sistema de base de datos. Control de concurrencia. Consiste en controlar la interaccin entre los usuarios concurrentes para no afectar la inconsistencia de los datos. Seguridad e integridad. Consiste en contar con mecanismos que permitan el control de la consistencia de los datos evitando que estos se vean perjudicados por cambios no autorizados o previstos.

Entre las tecnologas que pertenecen a la Interfaz de Objetos de Acceso de Datos encontramos: DAO (Data Access Objects), ADO (ActiveX Data Objects), RDO (Remote Data Object), RDS (Remote Data Service) y MIDAS (Middle-tier Distributed Application Service).

Academia de Computacin

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

2. UTILIZACIN DE COMPONENTES VISUALES La programacin visual consiste en disear los formularios que componen al programa colocando todos sus controles (botones, etiquetas, campos de texto, etc.) en las posiciones deseadas, normalmente usando un ratn. Luego se asocia cdigo a los eventos de dichos controles y tambin se pueden crear mdulos de datos, que regularmente contienen los componentes de acceso a datos y las reglas de negocio de una aplicacin. 2.1. Entorno El ambiente de desarrollo de programas visuales consta generalmente de un editor de formularios (que permite el desarrollo visual), un potente editor de textos que resalta la sintaxis del cdigo fuente, la paleta de componentes y el depurador integrado, adems de una barra de botones y un men que nos permite la configuracin de la herramienta y la gestin de proyectos, entre otros. 2.1.1. Proyectos Un proyecto es un conjunto de archivos que trabajan en equipo para crear un archivo ejecutable independiente o una DLL. Un grupo de proyectos es un conjunto de proyectos. 2.1.2. Barra de herramientas La barra de herramientas tiene como objeto acelerar las operaciones ms comunes del men principal. Si nos acostumbramos a utilizarla agilizaremos el uso del entorno significativamente. Si pasamos el ratn sobre los iconos nos aparecern unos globos o cuadros de ayuda, informndonos de cual es la funcionalidad de cada uno de ellos. 2.1.3. Cuadro de herramientas La caja de herramientas es un contenedor de objetos de control que pueden ser usados en las formas. Para usarlo solo de clic en el icono apropiado y sobre la forma dibuje un rectangulo arrastrado el ratn, con esto el control se colocar en ese lugar. Luego se puede redimensionar. No todos los controles se pueden cambiar de tamao. En el caso del Timer y el Common Dialog solo pueden aparecer pequeos cuadros. 2.1.4. Formularios Es una ventana cuadriculada sobre el que se disponen los componentes para disear las ventanas que formarn la aplicacin 2.2. Propiedades, mtodos y eventos Las propiedades son aquellas caractersticas de un objeto que lo define "fsicamente", bien por su forma o color, por su contenido, por la forma en la que va a trabajar, entre otras. Las propiedades pueden modificarse cuando estamos diseando la interface grfica, mediante lo que llamamos caja de propiedades, o durante la ejecucin del programa. En este caso hay que hacerlo con cdigo escrito en el propio programa. Tiempo de diseo. Es cuando realizamos una operacin durante el diseo. Por ejemplo, podemos cambiar el color de un control durante el diseo de la aplicacin, accediendo a su propiedad BackColor en la caja de propiedades. Tiempo de ejecucin. Es cuando esa operacin se realiza durante la ejecucin del programa. Si tenemos una lnea de cdigo como esta
5
Programacin

Academia de Computacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

MiControl.BackColor =RGB(255,0,0) al ejecutarse esa lnea, se cambiar el color del control de nombre MiControl. Hemos cambiado la propiedad BackColor de ese control en tiempo de ejecucin. Las propiedades pueden ser de lectura y escritura, (se puede cambiar y se puede leer el valor de la propiedad), slo de lectura (solamente se puede leer el valor de la propiedad) solo de escritura (hay muy pocas de este tipo). Puede que una propiedad, que es de lectura y escritura en tiempo de diseo, sea slo de lectura en tiempo de ejecucin (esto es lo que le pasa por ejemplo, a la propiedad Name Nombre) Un evento es todo aquello que le puede ocurrir a un objeto con parte grfica (Control o Formulario) Por ejemplo, es un evento el hecho de hacer click sobre ese control, el hecho de pasar el ratn por encima de l, el hecho de que un control cambie de tamao. Los controles tienen muchos eventos, unos de ellos comunes a casi todos los controles (Evento click, por ejemplo) y otros exclusivos de un determinado control (El evento Timer solamente lo tiene el control Timer) Puede ver los eventos de un control haciendo doble click sobre ese control en tiempo de diseo. Le aparecer la ventana de cdigo.

Ventana de cdigo

La ventana de cdigo es el lugar donde deber escribir el cdigo de su aplicacin. Puede ver que existen en ella dos listas desplegables, una a la izquierda (sin desplegar) donde se ve el nombre del control del cual estamos visualizando el cdigo (en este caso Command1) y otra a la derecha, donde se despliegan todos los eventos que tiene ese control. Haciendo click en la lnea de uno de esos eventos, aparecer la ventana de cdigo dedicada a ese evento.
Nota. Fjese en la parte inferior izquierda de la ventana de cdigo. Hay dos botones, uno que permite visualizar el cdigo correspondiente a un solo evento, (el de ms a la izquierda) y otro que permiten ver en la misma ventana el cdigo de todos los eventos. Cada programador tiene su costumbre para ver uno o todos. La prctica le dir lo que es ms prctico para Vd.

Academia de Computacin

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Un Procedimiento es el cdigo que introducimos dentro de un evento. No pretendo hacer escuela con definiciones, puesto que el concepto de evento y procedimiento se confunde con mucha frecuencia, y no pasa nada por ello. El cdigo introducido en la ventana de cdigo del evento click ser el procedimiento click, el que se introduzca en el evento MouseUp ser el procedimiento MouseUp. No se sorprenda si a lo largo de este libro nos referimos a evento o a procedimiento de forma equivocada. En el lenguaje coloquial es muy habitual ese error y como decamos, no pasa nada por ello. Estos procedimientos forman parte del programa. Podra hacerse una aplicacin que no tuviese mas cdigo que el introducido en los procedimientos, y muchas veces esa es la realidad. Un procedimiento puede pasar parmetros. Se dice que pasa parmetros cuando el sistema aporta datos automticamente al procedimiento. Por ejemplo, el procedimiento MouseUp, que se ejecuta cuando levantamos el botn del ratn (tambin existe el evento MouseDown), pasa los siguientes parmetros: Nmero del botn que se ha pulsado, (1=Izdo, 2=Dcho, 3=Central), si est pulsada la tecla maysculas (Shift, 1 si est pulsada, 0 si no est pulsada) y los valores X e Y de la posicin del cursor del ratn. Podemos ver los parmetros que pasa en la propia definicin del procedimiento, que nos da Visual Basic Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) End Sub Observe que los parmetros estn entre parntesis, y que queda definido el tipo de variable que es cada uno de ellos. Podemos usar ese valor dentro del cdigo del procedimiento como un dato ms. Un Mtodo es una operacin que la realiza Visual Basic sin necesidad de escribir cdigo para realizarla. Por ejemplo, si queremos dibujar una lnea en un formulario o en la impresora utilizaremos el mtodo Line. Si queremos dibujar una circunferencia usaremos el mtodo Circle. Si queremos escribir texto, utilizaremos el mtodo Print. No necesitamos decirle como lo tiene que haver, puesto que eso ya lo sabe hacer VB sin necesidad de que se lo expliquemos. A los mtodos les tenemos que pasar datos. A eso le llamamos tambin pasarle parmetros. Los mtodos solo permiten introducir los parmetros que necesita el mtodo para ejecutarse. (En el caso de una lnea, el punto inicial y el final, en el caso del circulo, el radio y las coordenadas del centro. Pueden pedir parmetros optativos, como el puede ser el color de la lnea o circulo. Espero que le quede claro cada una de estas definiciones. Tendr tiempo suficiente a lo largo del curso para verlas, y dentro de muy poco tiempo le sern muy familiares estos conceptos. 2.3. Manejo de controles Los controles son objetos que pueden colocar en un formulario que tiene su propio conjunto de propiedades, mtodos y eventos reconocidos. Puede utilizar controles para recibir entradas del usuario, mostrar resultados y desencadenar procedimientos de evento. Puede manipular la mayora de los controles utilizando mtodos. Algunos controles son interactivos (responden a acciones del usuario) mientras que otros son estticos (slo son accesibles mediante cdigo). 2.3.1. Propiedades del formulario El formulario le permite crear ventanas, cuadros de dilogo y controles en la aplicacin. Los controles se dibujan y se ven en l. Mientras est diseando un formulario:
Academia de Computacin

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Las ventanas Formulario tienen los botones Maximizar, Minimizar y Cerrar. Puede crear formularios fijos o mviles. El formulario que disea tendr las mismas caractersticas en tiempo de diseo1 y en tiempo de ejecucin2 , a menos que especifique lo contrario en las propiedades del formulario. Utilice los botones del Cuadro de herramientas para dibujar los controles en el formulario. Utilice el comando Ventana Posicin del formulario, del men Ver, para obtener una vista previa de la distribucin del formulario.

A travs de sus propiedades podr modificar su entorno, haciendo que ste se pueda o no, maximizar o minimizar, mostrar una barra de ttulo o ocultarla, especificar unas dimensiones fijas o variables, etc.. Algunas de estas propiedades son: Appearance, AutoRedraw, BorderStyle, ControlBox, Icon, MaxButton, MinButton, Movable, etc. 2.3.2. Herramienta puntero La herramienta puntero es el nico elemento del Cuadro de herramientas que no es un control. Su funcionalidad se reduce a darle al puntero del ratn su carcter sealador. til para cancelar la seleccin de algn otro control del Cuadro de herramientas. 2.3.3. Principales controles Controles estndar del Cuadro de herramientas: Puntero: Es el nico elemento del Cuadro de herramientas que no sirve para dibujar controles. Cuando selecciona el puntero, slo puede cambiar el tamao o mover un control que ya se ha dibujado en un formulario. PictureBox: Muestra imgenes grficas (decorativas o activas), como un contenedor3 que recibe la salida de los mtodos grficos4 o como un contenedor para otros controles. Label: Le permite definir texto que el usuario no podr cambiar, como un ttulo escrito debajo de un grfico. TextBox: Contiene el texto que el usuario puede escribir o cambiar. Marco: Le permite crear un agrupamiento funcional o grfico de controles. Para agrupar controles, debe dibujar primero el marco y despus dibujar los controles dentro del marco. CommandButton: Crea un botn en el que el usuario puede hacer clic para ejecutar un comando. CheckBox: Crea una casilla de verificacin que el usuario puede seleccionar fcilmente para indicar si algo es verdadero o falso, o que presenta al usuario mltiples opciones cuando ste puede elegir ms de una. OptionButton: Le permite mostrar mltiples opciones de las que el usuario slo puede elegir una.

1 El tiempo durante el cual se genera una aplicacin en el entorno de desarrollo agregando controles, estableciendo propiedades de controles o formularios, etc. Por el contrario, durante el tiempo de ejecucin se interacta con la aplicacin como lo hara un usuario. 2 El tiempo durante el cual se est ejecutando cdigo. Durante el tiempo de ejecucin, se interacta con el cdigo como lo hara un usuario. 3 Objeto que puede contener otros objetos. 4 Mtodos que ejecutan operaciones de dibujo en tiempo de ejecucin como animacin o simulacin. Los mtodos grficos son Circle, Cls, Line, PaintPicture, Point, Print y PSet.

Academia de Computacin

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

ComboBox: Le permite crear una combinacin de cuadro de texto y cuadro de lista. El usuario puede seleccionar un elemento de la lista o escribir un valor en el cuadro de texto. ListBox: Se utiliza para mostrar una lista de elementos de los que el usuario puede escoger uno. La lista se puede desplazar si tiene ms elementos de los que se pueden mostrar en un momento dado. HScrollBar (barra de desplazamiento horizontal): Le proporciona una herramienta grfica para desplazarse rpidamente por una larga lista de elementos o de una gran cantidad de informacin, para indicar la posicin actual en una escala o para utilizarlo como un dispositivo de entrada o un indicador de velocidad o de cantidad. VScrollBar (barra de desplazamiento vertical): Le proporciona una herramienta grfica para desplazarse rpidamente por una larga lista de elementos o de una gran cantidad de informacin, para indicar la posicin actual en una escala o para utilizarlo como un dispositivo de entrada o un indicador de velocidad o de cantidad. Timer: Genera eventos Timer con los intervalos definidos. Este control no es visible en tiempo de ejecucin. DriveListBox: Muestra las unidades de disco vlidas. DirListBox (cuadro de lista de directorios): Muestra los directorios y las rutas de acceso. FileListBox: Muestra una lista de archivos. Formas: Le permite dibujar una gran variedad de formas en el formulario, en tiempo de diseo. Puede elegir entre un rectngulo, un rectngulo redondeado, un cuadrado, un cuadrado redondeado, un valo o un crculo. Line: Se utiliza para dibujar una gran variedad de estilos de lnea en el formulario en tiempo de diseo. Imagen: Muestra en el formulario una imagen grfica de un mapa de bits5, un icono6 o un metarchivo7 . Las imgenes que se muestran en un control Image slo pueden ser decorativas y utilizan menos recursos que un control PictureBox. Datos: Le proporciona acceso a los datos almacenados en bases de datos mediante los controles enlazados del formulario. Actives: Le permite vincular e incrustar objetos de otras aplicaciones en la aplicacin de Visual Basic.

Imagen representada por pxeles y almacenada como una coleccin de bits en la que cada bit corresponde a un pxel. En equipos con pantalla en color, a cada pxel le corresponde ms de un bit. Normalmente un mapa de bits tiene una extensin de nombre de archivo .bmp. 6 Representacin grfica de un objeto o un concepto, que se utiliza normalmente para representar aplicaciones minimizadas en Microsoft Windows. Un icono es un mapa de bits con un tamao mximo de 32 x 32 pxeles. Los iconos tienen una extensin de nombre de archivo .ico. 7 Archivo que almacena una imagen como objetos grficos tanto lneas, crculos y polgonos como pxeles. Hay dos tipos de metarchivos, estndar y ampliado. Los metarchivos estndar normalmente tiene una extensin de nombre de archivo .wmf. Los metarchivos ampliados normalmente tiene una extensin de nombre de archivo .emf. Los metarchivos preservan una imagen ms exacta que los pxeles cuando la imagen se cambia de tamao.

Academia de Computacin

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

3. MANEJO DE ARCHIVOS Existen tres tipos de archivos donde podremos almacenar y leer datos: - Secuenciales - Aleatorios (Random) - Binarios Cada uno de ellos tiene sus aplicaciones y particularidades. 3.1 Archivos secuenciales Este tipo de archivos nos permite guardar informacin de cualquier longitud. En este tipo de archivos, la informacin se guarda colocando un carcter tras otro. La forma de leerlos es, igualmente, carcter tras carcter. (Byte tras byte). Son los mas sencillos de manejar, y los utilizados para guardar texto en ASCII. Permiten guardar datos en un archivo con un determinado nombre, "machacando" la informacin de otro posible archivo que ya estuviese en el disco con el mismo nombre, o aadir la informacin nueva a continuacin de la ya existente. Para abrir un archivo secuencial para guardar informacin, debemos ejecutar la siguiente instruccin: Open Nombrearchivo For Output As # Numerocanal De esta forma, si ya exista un archivo llamado Nombrearchivo, sobreescribiremos dicho archivo perdiendo la informacin que contuviese. Es la forma tpica de hacerlo cuando modificamos un texto. Para aadir la nueva informacin tras la ya existente, deberemos abrirlo con la siguiente instruccin: Open Nombrearchivo For Append As # Numerocanal Numerocanal debe ser un nmero comprendido entre 1 y 255. Representa el nmero del canal por donde introduciremos los datos. Normalmente se llama tambin nmero de archivo. No puede haber mas de un archivo abierto con un nmero de canal determinado. Para cerrar un archivo secuencial, basta con ejecutar la instruccin: Close # Numerocanal Si no se especifica Numerocanal (la instruccin Close a secas) se cerrarn todos los archivos abiertos actualmente. Para introducir la informacin, pueden emplearse dos mtodos: Print y Write Nos centraremos de momento solamente en Print. Print Introduce la informacin de forma secuencial, byte tras byte tal como se coment. Sirve para guardar textos. Por ejemplo si deseamos guardar en ese archivo el contenido de una caja de texto llamada Text1, basta con ejecutar la siguiente instruccin: Print #NumerodeCanal, Text1.Text El texto queda en el archivo en caracteres ASCII, que se pueden leer con el Bloc de Notas. Cuando los datos se han introducido con la instruccin Print, la forma de acceder a ese texto es muy sencilla: Se abre el archivo con la instruccin Open Open Nombrearchivo For Input As # Numerodecanal

Academia de Computacin

10

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Se utiliza la instruccin Input o Line Input para sacar los datos del archivo. La instruccin Input tiene en este caso la siguiente sintaxis: VariableString = Input (Numero de caracteres, # Numero de canal) Por ejemplo, VariableString = Input (1, #1) extrae un carcter del archivo abierto como #1. El nmero mximo de caracteres a extraer de un golpe mediante la instruccin Input est limitado a 65.534. Ver un poco mas adelante la propiedad LOF de los archivos secuenciales. LOF devuelve un valor igual a la longitud total del archivo. Si ejecutamos la instruccin : Para no emplear una palabra tan larga como Numerodecanal, utilizaremos de ahora en adelante el nmero 1 como nmero de canal. Recuerde que ese nmero puede ser un nmero comprendido entre el 1 y el 255 VariableString = Input (LOF(1), #1) LOF(1)=longitud del archivo #1 leeremos el archivo de una nica vez. Este procedimiento puede ahorrarle cierto tiempo a la hora de la lectura. (Por lo dicho anteriormente, este procedimiento de leer todo el archivo de un golpe solamente se podr hacer si la longitud del archivo (LOF(1)) es inferior a 65.534 bytes. Tenga esto presente cuando vaya a leer un archivo que no sabe que longitud tiene. Para curarse en salud, le recomiendo que lea los archivos secuenciales carcter a carcter. Input(1,#X) pues tarda poco mas que leyndolo de un golpe. Claro que para leer un archivo carcter a carcter debe poner un bucle en el que se van leyendo los caracteres hasta que llaga al final del archivo. La forma de hacer este bucle es la siguiente: Dim A As String Dim MiVariable as String Do Until EOF(1) A es la variable donde meteremos el carcter que extraemos del archivo. MiVariable es una variable tipo string donde vamos a meter todo el contenido del archivo El programa ejecutar este bucle hasta que se cumpla que EOF(1) sea True. EOF(NumerodeCanal) es una propiedad de los archivos cuando estn abiertos, que es True cuando la posicin del puntero de lectura apunta al carcter Fin De Archivo (End Of File) que es el carcter siguiente al ltimo carcter de texto de ese archivo. Estrae un carcter del archivo abierto por el canal nmero 1. Al leer carcter, el puntero de lectura avanza automticamente tantos como haya ledo, colocndose sobre el primer carcter no ledo. Con esta lnea vamos anexando el carcter ledo a la variable MiVariable. En vez de utilizar una variable, podramos poner ese texto sobre un TextoBox o un RichTextBox (RTB) (Lo ver proximamente). Si lo ponemos en un RTB esta lnea sera: RTB.SelText = A Loop Close #1 Vuelve al comienzo del bucle. Cierra el archivo

A = Input (1, #1) este caracteres MiVariable = MiVariable & A

Slo se utilizar la instruccin Input con archivos abiertos en modo Input o Binary. (Los Binary Se vern a continuacin) A diferencia de la instruccin Input #, (la veremos a continuacin, pues es la instruccin que deber utilizar para leer archivos escritos con la instruccin Write ), Input devuelve
Academia de Computacin

11

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

todos los caracteres que lee, incluyendo puntos y coma, retornos de carro, avances de lnea, comillas y espacios iniciales. Existe una instruccin, Input$ , que asume que el dato a leer es un String. (Cadena de caracteres). Puede ahorrar un poco de memoria usando esta instruccin en lugar de Input.
Nota Se proporciona otra funcin (InputB) para su uso con datos de byte incluidos en archivos de texto. En lugar de especificar el nmero de caracteres a devolver, nmero especifica el nmero de bytes.

INSTRUCCION LINE INPUT La instruccin Line Input se utiliza para extraer una lnea completa. Tiene la siguiente sintaxis: Line Input # Nmero de canal, VariableString Mediante esta instruccin se extrae una lnea completa (los caracteres delimitados entre dos retornos de carro), y se le asigna esa cadena a VariableString Una lnea es un trozo de texto delimitado por los caracteres 13 (Retorno de carro) y 10 (Avance de lnea) La instruccin Line Input # lee un carcter cada vez en un archivo hasta que encuentra un retorno de carro (Chr(13)) o una secuencia retorno de carro - avance de lnea (Chr(13) + Chr(10)). Las secuencias de retorno de carro - avance de lnea no se tienen en cuenta y no se aaden a la cadena de caracteres extrada mediante esta instruccin. Cuando lea un archivo mediante Line Input # y lo quiere presentar en un TextBox o en el Printer, deber introducirlos para evitar que le salga todo el texto en una nica lnea. Con lo que se ha explicado, ya puede realizar un pequeo edito de textos. Este sencillo editor tiene un TextBox llamado TBTexto, donde podemos escribir el texto que queramos (con la propiedad MultiLine = True y ScrollBars = Vertical), tres botones llamados BAbrir (1), (2 a y b) y (3), para abrir el archivo y poner su contenido en TBTexto, y dos BGuardar para guardar, uno abriendo el archivo For Append y el otro abrindolo For Output. En este ltimo, al guardar el texto borramos el contenido que del archivo, si ya existiera. En el primero, lo anexamos al final del mismo . Para conocer el nombre del archivo, ponemos un CommonDialog llamado CD1, con un filtro CD1.Filter = Archivos de Texto |*.txt Para abrir el archivo, y depositar su contenido en TBTexto pondremos este cdigo en BAbrir : Private Sub BAbrir1_Click() Dim VarTexto As String CD1.Filter = "Archivos de Texto |*.txt" CD1.ShowOpen Open CD1.filename For Input As #1 VarTexto = Input(LOF(1), #1) Close #1 TBTexto = VarTexto End Sub Cuando el archivo es mayor de 64 kilobytes, el leerlo de un golpe puede dar problemas. Mejor dicho, no funciona. Deberemos leerlo en ese caso, carcter a carcter o lnea a lnea. Para leer carcter a carcter : 'leemos todo el archivo de un golpe

Academia de Computacin

12

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Private Sub BAbrir_Click() Dim VarTexto As String CD1.Filter = "Archivos de Texto |*.txt" CD1.ShowOpen Open CD1.filename For Input As #1 Do Until EOF(1) VarTexto = Input(1, #1) TBTexto = TBTexto & VarTexto TBTexto Loop Close #1 End Sub
(NOTA.- Lo expuesto funciona perfectamente, pero el hecho de meter en un TextBox carcter a carcter eterniza la aplicacin. - Meter un texto en un TextBox o en un Label es una operacin que tarda cierto tiempo. Si esa operacin hay que hacerla una vez por carcter, puede tardar mucho tiempo. Para evitar esto, cuando vaya a leer un archivo carcter a carcter, mtalo primero en una variable y luego realice un volcado nico de esa variable al TextBox o Label)

Hacemos un bucle de lectura hasta que encontremos EOF(1) 'leemos el archivo carcter a carcter 'vamos aadiendo los caracteres ledos a

Vea mas adelante la Propiedad EOF en Propiedades de los archivos Secuenciales

Y podemos hacerlo tambin leyendo lnea a lnea con Line Input Dim VarTexto As String CD1.Filter = "Archivos de Texto |*.txt" CD1.ShowOpen Open CD1.filename For Input As #1 Do Until EOF(1) Line Input #1, VarTexto 'leemos el archivo Lnea a Lnea 'vamos aadiendo las lneas ledas a TBTexto = TBTexto & VarTexto & vbCrLf TBTexto contiene los retornos ni avances de lnea. Loop Close #1 Los Botones de Guardar tienen el cdigo : Private Sub BGuardar_Click()
Academia de Computacin

'(Hay que introducir un retorno + avance de lnea con cada lnea (vbCrLf), ya que VarTexto no

13

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Dim VarTexto As String CD1.Filter = "Archivos de Texto |*.txt" CD1.ShowSave Open CD1.filename For Output As #1 Print #1, TBTexto.Text Close #1 End Sub O para el caso de abrir con For Append Private Sub BGuardar2_Click() Dim VarTexto As String CD1.Filter = "Archivos de Texto |*.txt" CD1.ShowSave Open CD1.filename For Append As #1 Print #1, TBTexto.Text Close #1 End Sub Ya hemos visto como se guardan y se leen datos de texto en un archivo secuencial. INSTRUCCIN WRITE La otra forma de introducir datos en un archivo secuencial es Write. Mediante esta instruccin, no se puede introducir texto, sino datos, aunque esos datos sean de texto. Mediante la instruccin Write puede crear una pequea base de datos. Eso s, una base de datos de escasa calidad. Pero no es momento de cuestionar la calidad de esta base de datos, sino de explicarla. Write Puede introducir varias informaciones, que posteriormente se podrn leer de forma separada con la instruccin Input #. Esta forma de introducir datos en un archivo secuencial permite realizar un archivo con distintos datos que se pueden leer en el propio archivo, puesto que se guardan en ASCII, y leerlos mediante el programa de una forma muy sencilla. Hacemos, en realidad, una pequea base de datos. (Ver a lo largo de su vida profesional que lo de pequea no es cierto, pues es la forma mas sencilla de guardar datos cuando la cantidad de estos datos no es muy grande) Lo que estamos haciendo en realidad al escribir datos mediante la instruccin Write es escribir estos datos en un archivo secuencial, utilizando una coma como separador entre los distintos datos. Un archivo secuencial con datos introducidos mediante la instruccin Write tendr esta forma : Luis Surez, VisualBasic - Gua del estudiante,Editorial XX,3200,51 Miguel de Cervantes,El Qijote,Editorial YY,5000,27 Observe que el contenido de este archivo se diferencia algo de una simple sucesin de caracteres.
Academia de Computacin

14

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Tiene varias partes separadas por una coma. Cada una de ellas es un dato. Imaginemos una aplicacin, con la que introducimos datos de libros. La aplicacin es un nico formulario donde podemos introducir la informacin mediante varios TextBox. Existe un Botn de comando con el siguiente cdigo: Private Sub Command1_Click() TITULO = LIBRETBTITULO.Text AUTOR = LIBRETBAUTOR.Text EDITORIAL = LIBRETBEDITORIAL.Text PRECIO = LIBRETBPREC.Text EXISTENCIAS = LIBRETBEX.Text Donde LIBRETBTITULO, LIBRETBAUTOR, Etc. son los nombres de los TextBox Ha ledo los datos de los TextBox. Ya estn el las variables TITULO, AUTOR, Etc. Ahora los metemos en el archivo con la instruccin Write. El nombre del archivo ser el que hayamos puesto en el TextBox LIBRETBARCHIVO, y lo guardar en el directorio C :\cursoVB Open TBNombreArchivo.Text For Append As #1 Write #1, TITULO, AUTOR, EDITORIAL, PRECIO, EXISTENCIAS Close #1 End Sub Si introduce los datos del ejemplo anterior, se crear un archivo que tiene esta apariencia: Luis Surez, VisualBasic - Gua del estudiante,Editorial XX,3200,51 Si realizamos otra introduccin de datos, con la segunda lnea del ejemplo anterior, los datos existentes en ese archivo no se borrarn, dado que lo hemos abierto con Append. Quedar de la siguiente forma: Luis Surez, VisualBasic - Gua del estudiante,Editorial XX,3200,51 Miguel de Cervantes,El Qijote,Editorial YY,5000,27 Que pasara si leemos este archivo con la instruccin Input o Line Input # vista anteriormente ? Pues simplemente que lo leeramos tal como est, con sus comas y comillas dobles. No sera la forma mas adecuada, ya que lo que queremos es obtener sucesivos datos de autores, ttulos, editoriales, precios y existencias. Para sacar estos datos debemos leerlos con la instruccin Input #. Esta instruccin saca los datos que hemos metido, es decir, elimina las comillas y la coma que servan de separadores. En nuestro ejemplo, podramos hacerlo de esta forma, aprovechando los mismos TextBox: Private Sub Command2_Click() ' Limpiamos los TextBox LIBRETBTITULO.Text = "" : LIBRETBAUTOR.Text = "" : LIBRETBEDITORIAL.Text
Academia de Computacin

15

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

= "" LIBRETBPREC.Text = "" : LIBRETBEX.Text = "" 'Abrimos el archivo Open TBNombreArchivo.Text For Input As #1 Do Until EOF(1) Introducimos una parada para poder leer datos DETENERSE = True Input #1, TIT, AUT, NED, PRE, EXS LIBRETBTITULO.Text = TIT LIBRETBAUTOR.Text = AUT LIBRETBEDITORIAL.Text = NED LIBRETBPREC.Text = PRE LIBRETBEX.Text = EXS ' Refrescamos los TextBox Refresh ' Esto produce una pequea parada Do While DETENERSE = True A=A+1 If A = 100000 Then DETENERSE = False: A = 0 Loop ' termin la parada y vuelve a leer datos Loop Close #1 End Sub Observe que los nombre de las variables en el proceso de lectura tienen distintos nombres a los utilizados durante la escritura. Como en el archivo no se guarda ninguna referencia al respecto, lo nico que importa es que el nmero de variables para la lectura sea igual al nmero de variables que se utiliz para la escritura, y que el orden de las variables sea correcto. Si por ejemplo, el nmero de variables usadas en la introduccin de datos fuese distinto al nmero de variables usado en la lectura, Visual Basic nos dara un error. Observe tambin que se ha introducido un temporizador. Sirve para ver los sucesivos ttulos que tenemos en nuestra base de datos tan sui generis. Se ha pretendido presentar unos datos de esta pequea base de datos sin complicarnos mucho la vida. Mas adelante veremos como presentarlos de una forma correcta. Este tipo de archivos no es el mas adecuado para construir bases de datos, es complicado manejar archivos de mas de unas pocas lneas, por lo que para tener muchos datos, este tipo de archivos no es recomendable. No es aconsejable ni para muchos datos ni para pocos datos. Es
Academia de Computacin

16

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

obligacin del autor explicarlo y de advertirlo. En esta pequea aplicacin mostrbamos las informaciones sucesivamente segn las bamos leyendo del archivo. Interrumpamos momentneamente la lectura para presentar cada informacin durante un instante, ya que como tenemos cinco datos distintos en cada registro y cinco TextBox para presentarlos, deberemos presentar una informacin tras otra. Esto no parece en principio una solucin prctica para una base de datos, donde lo que interesa es disponer de todos los datos para usarlos cuando sea necesario. Esto nos lleva a crear una matriz para albergar todos los datos de la base, ya que los archivos secuenciales se leen y se les tiene que extraer toda la informacin de un golpe, ya que no permiten ir a leer hacia atrs. Por lo tanto, si deseamos disponer de todos los datos, deberemos guardarlos en la memoria, en una matriz. Imagnese que estamos tratando datos de varios miles de libros en el ejemplo anterior. Si la informacin de cada campo es medianamente extensa, no tendramos memoria RAM suficiente en el ordenador para albergarlos. Esto nos lleva a pensar en otro tipo de archivo que veremos a continuacin, los Random (aleatorios), que permiten leer solamente los registros que nos interesan. Pero volvamos a nuestra aplicacin de librera, donde hemos hecho una variacin, los campos PRECIO y EXISTENCIAS los vamos a tratar ahora como nmeros (Integer). Tambin se ha introducido otro campo tipo texto, para introducir la edicin. El archivo creado tras introducir varios libros qued de la siguiente forma: "EL RODABALLO","GUNTER GRASS","PLANETA",1995,2000,12 " VisualBasic - Gua del Estudiante ","LUIS SUAREZ","CEU",PRIMERA,1000,21 "EL NOMBRE DE LA ROSA","UMBERTO ECO","AGUILAR",28,1000,21 "ENCICLOPEDIA DEL VB","CEBALLOS","RAMA",CUARTA,1200,23 "LA GRANJA ANIMAL","ORWELL","DESTINO",45,12000,78 "LA PASION TURCA","ANTONIO GALA","PLANETA",SEGUNDA,2500,25 "LA METAMORFOSIS","KAFKA","PLAZA&JANES", 4,3400,101 "VB4 PARA WINDOWS95","GARY CORNELL","MCGRAWHILL",1,6500,25 Observe que los dos ltimos campos (correspondientes a PRECIO y EXISTENCIAS) no estn entre comillas, pues no se trata de texto, sino de nmeros. (Observe tambin la gran ventaja de tener una base de datos con datos completamente legibles) Se han introducido alguna variaciones en el programa. Entre ellas, se crea una matriz de variables de 5 x n (n=nmero de registros). Tambin se le aaden unos botones para poder recorre toda la base de datos. La interfaz grfica qued de la siguiente forma:

Academia de Computacin

17

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

El programa necesita que le introduzcamos el nombre del archivo que alberga la base de datos. Por sencillez no se ha usado ningn CommonDialog y se introduce directamente el nombre de este archivo en un TextBox llamado TBNombreArchivo El archivo anterior podemos leerlo tal y como indicbamos antes: Open TBNombreArchivo.Text For Input As #1 Do Until EOF(1) Input #1, TITULO, AUTOR, EDITORIAL, EDICION, PRECIO, EXISTENCIAS Donde las variables TITULO, AUTOR, EDITORIAL y EDICION sern del tipo String y PRECIO y EXISTENCIAS sern de tipo numrico. Podemos saberlo, ya que en una lnea cualquiera del archivo anterior: " VisualBasic - Gua del Estudiante ","LUIS SUAREZ","CEU",PRIMERA,1000,21 Los cuatro primeros parmetros van entre comillas dobles, ya que son datos tipo texto, y los dos ltimos van sin comillas, como corresponde a datos numricos. Pero existe otra forma mejor (al menos un poco mas complicada) para leer estos datos, y evitar el problema que tenamos antes de tener que hacer un temporizador para poder ver, aunque solo sea un momento, los datos. Podemos meter los datos a una matriz que tenga tantas columnas como datos (campos) (en el ejemplo 6, cuatro String y dos numricos), y tantas filas como apuntes (registros) tengamos. Para ello, antes de nada debemos definir un tipo de variable, mediante la instruccin Type. Parece que no nos basta con los tipos de variable que trae VB (Long, String, Integer ...) y es cierto. La variable que necesitamos no es de ningn tipo de esos. Est compuesta por varias secciones, y cada una de ellas puede ser de un tipo distinto. Este tipo de definiciones debe hacerse en un mdulo (Vase instruccin Type en la ayuda de VB), por lo que se ha creado un mdulo llamado LIBREMD2.BAS, con el siguiente cdigo: Type REGISTROLIBRO AUTOR As String TITULO As String

Academia de Computacin

18

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

EDITORIAL As String EDICION As String PRECIO As Integer EXISTENCIAS As Integer End Type Esto es lo que se llama DEFINIR una variable. Es como hacerse un traje a medida. Y dese cuenta de que es un tipo de variable (REGISTROLIBRO) formado por varias partes (AUTOR, TITULO, Etc.) Observe que DEFINIR una variable NO es lo mismo que DECLARAR En el apartado de Declaraciones del General del formulario declaramos las variables, entre ellas una variable, REGISTROLIBROS, de la cual decimos que va a ser una matriz mediante los parntesis que la acompaan, y adems declaramos que va a se similar a REGISTROLIBRO ya definida en el mdulo. Dim NR As Integer Dim REGISTROLIBROS() As REGISTROLIBRO Dim NRP As Integer Observe que al usar parntesis al declarar la variable REGISTROLIBROS le estamos diciendo a VB que esa variable ser un Array, y adems que es una variable del tipo REGISTROLIBRO, tipo de variable que ya conoce, puesto que se la hemos definido en un mdulo. En el ejemplo preparado podemos escribir y leer datos. Veamos de nuevo como se escriben El cdigo del procedimiento click del botn BIntroducir1 es: Private Sub BIntroducir1_Click() TITULO = LIBRETBTITULO.Text AUTOR = LIBRETBAUTOR.Text EDITORIAL = LIBRETBEDITORIAL.Text EDICION = LIBRETBEDICION.Text PRECIO = Val(LIBRETBPREC.Text) EXISTENCIAS = Val(LIBRETBEX.Text) existencias TextBox para introducir el ttulo autor editorial edicin precio

(Observe que para introducir el precio y las existencias se transform el contenido del TextBox a un valor numrico mediante la instruccin Val.) Open "C:\cursoVB\" + LIBRETBARCHIVO.Text For Append As #1 Write #1, TITULO, AUTOR, EDITORIAL, EDICION, PRECIO, EXISTENCIAS Close #1 End Sub Tras reiteradas entradas, el archivo de la BD qued como se vio anteriormente.
Academia de Computacin

19

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Al leer los datos, lo primero es que no conocemos el nmero de registros existentes. Como cada registro va en una lnea del archivo, si contamos el nmero de retornos de carro (Chr(13)) obtendremos el nmero de registros. Esta operacin es la primera que se realiza en el procedimiento click del botn LEER: Private Sub Command2_Click() LIBRETBTITULO.Text = "" Pone todos los TextBox en blanco LIBRETBAUTOR.Text = "" LIBRETBEDITORIAL.Text = "" LIBRETBEDICION.Text = "" LIBRETBPREC.Text = "" LIBRETBEX.Text = "" NR = 0 NR=nmero de registros Abre el archivo, lo lee entero y cuenta el nmero de retornos de carro. Existirn tantos apuntes (registros) como retornos de carro existan, ya que cada registro ocupa una lnea. Open TBNombreArchivo.Text For Input As #1 Do Until EOF(1) A = Input(1, #1) If A = Chr(13) Then NR = NR + 1 Loop Close #1 Presenta en LNumFich el nmero de registros LNumFich.Caption = Str(NR) + " Registros)" 'Redimensionamos la matriz de REGISTROLIBROS a NR elementos.. ReDim REGISTROLIBROS(1 To NR) Volvemos a abrir el archivo Open TBNombreArchivo.Text For Input As #1 Leemos los registros del 1 al NR, y cada campo del archivo lo vamos asignando a los elementos que componen la matriz. For I = 1 To NR Input #1, REGISTROLIBROS(I).TITULO Input #1, REGISTROLIBROS(I).AUTOR Input #1, REGISTROLIBROS(I).EDITORIAL Input #1, REGISTROLIBROS(I).EDICION
Academia de Computacin

20

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Input #1, REGISTROLIBROS(I).PRECIO Input #1, REGISTROLIBROS(I).EXISTENCIAS Next I Close #1 NOTA.- Estas lneas podramos heberlas puesto en una lnea nica : Input#1,REGISTROLIBROS(I).TITULO,REGISTROLIBROS(I).AUTOR,_ REGISTROLIBROS(I).EDITORIAL,REGISTROLIBROS(I).EDICION,_ REGISTROLIBROS(I).PRECIO, REGISTROLIBROS(I).EXISTENCIAS NRP = Nmero del Registro Presentado. Lo hacemos igual a 1 para presentar, de momento, el nmero 1 NRP = 1 LIBRETBTITULO.Text = REGISTROLIBROS(NRP).TITULO LIBRETBAUTOR.Text = REGISTROLIBROS(NRP).AUTOR LIBRETBEDITORIAL.Text = REGISTROLIBROS(NRP).EDITORIAL LIBRETBEDICION.Text = REGISTROLIBROS(NRP).EDICION LIBRETBPREC.Text = REGISTROLIBROS(NRP).PRECIO LIBRETBEX.Text = REGISTROLIBROS(NRP).EXISTENCIAS End Sub Copiamos este cdigo de presentacin de datos y lo llevamos a las flechas de incrementar o disminuir el nmero del registro a presentar. Private Sub BMas1_Click() NRP = NRP + 1 If NRP > NR Then NRP = NR Else LIBRETBTITULO.Text = REGISTROLIBROS(NRP).TITULO LIBRETBAUTOR.Text = REGISTROLIBROS(NRP).AUTOR LIBRETBEDITORIAL.Text = REGISTROLIBROS(NRP).EDITORIAL LIBRETBEDICION.Text = REGISTROLIBROS(NRP).EDICION LIBRETBPREC.Text = REGISTROLIBROS(NRP).PRECIO LIBRETBEX.Text = REGISTROLIBROS(NRP).EXISTENCIAS End If
Academia de Computacin

protegemos que salga error de NRP fuera de intervalo

MsgBox "No existen mas registros en esta direccin"

21

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

End Sub Esta es la de incrementar. La de disminuir es igual, pero restando 1 a NRP Las flechas dobles llevan al registro 1 y al ltimo. Tienen este cdigo Private Sub BMas2_Click() NRP = NR LIBRETBTITULO.Text = REGISTROLIBROS(NRP).TITULO LIBRETBAUTOR.Text = REGISTROLIBROS(NRP).AUTOR LIBRETBEDITORIAL.Text = REGISTROLIBROS(NRP).EDITORIAL LIBRETBEDICION.Text = REGISTROLIBROS(NRP).EDICION LIBRETBPREC.Text = REGISTROLIBROS(NRP).PRECIO LIBRETBEX.Text = REGISTROLIBROS(NRP).EXISTENCIAS End Sub Observe que es muy sencillo trabajar con archivos secuenciales para bases de datos. El inconveniente es la cantidad de memoria necesaria para la matriz de datos. Tambin tienen un gran inconveniente: solamente se pueden leer de hacia adelante. Un archivo secuencial hay que leerlo de una sola vez. Esto que no es ningn inconveniente para un archivo de texto, o incluso para un archivo de datos que leemos una nica vez, es un problema cuando leemos un dato situado en un punto de ese archivo, y luego tenemos que leer un dato colocado en una posicin anterior. En este caso, deberemos terminar de leerlo, y volver a comenzar por el principio. Este es un gran inconveniente para hacer bases de datos con archivos secuenciales. No solamente hemos visto una forma de crear una base de datos, sino que hemos visto como movernos a lo largo de los registros. Ver esto con mucho mas detalle cuando demos bases de datos. Este tipo de bases de datos son la Tipo Texto que ver mas adelante. Propiedades de los archivos Secuenciales: EOF Indica el fin del archivo (End Of File). EOF ser False hasta que encuentre el final del archivo secuencial. Habr observado instrucciones tales como: Do until EOF(1) (Hazlo hasta que encuentres el EOF del canal 1) (Hazlo mientras EOF del canal 1 sea False) Do While Not EOF(1)

Estas expresiones se usan en un bucle, para ir extrayendo con la instruccin Input o Line Input los caracteres de un archivo hasta que se encuentre la marca de final de archivo (EOF) LOC Devuelve la posicin de lectura/escritura actual en un archivo abierto. La sintaxis de esta propiedad es: LOC (Numero de canal) La informacin devuelta para un archivo secuencial es la posicin de byte actual en el archivo, dividida por 128. LOF Devuelve la longitud de un archivo (Lenght Of File) abierto mediante Open. Sintaxis
Academia de Computacin

LOF(numeroarchivo)
22
Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Ejemplo Long = LOF (1) Observaciones Para obtener la longitud de un archivo que no est abierto utilice la funcin FileLen. (Vala mas abajo) SEEK Devuelve la posicin actual de lectura/escritura de un archivo abierto con la instruccin Open. Sintaxis Seek(nmeroArchivo) Seek devuelve un valor entre 1 y 2,147,483,647 (equivalente a 2^31-1) inclusive. Para archivos abiertos en modo Output, Append o Input, Seek devuelve la posicin de byte en la que se va a ejecutar la siguiente operacin. El primer byte de un archivo est en la posicin 1, el segundo en la posicin 2 y as sucesivamente. 3.2 Archivos aleatorios (RANDOM) Un archivo aleatorio es un conjunto de registros, todos ellos de la misma longitud, que nos permite guardar varias colecciones de datos. Tal como habamos visto en los archivos secuenciales, el almacenar una serie de colecciones de datos en un archivo secuencial era muy fcil, pero bastante difcil de almacenarlas en la memoria cuando el nmero de estas colecciones superaba una cierta cantidad. Los archivos aleatorios permiten almacenar informacin en registros que pueden ser fcilmente ledos, pudiendo leer los registros uno a uno, sin necesidad de leerlos todos. En los archivos secuenciales, la informacin de varios datos podamos introducirla mediante la instruccin Write, y conseguamos un registro de la forma: (Recurdese el ejemplo de los datos de un libro) "Ttulo","Autor","Editorial","Edicin","Precio","Existencias" Si desebamos guardar la informacin de muchos libros, no haba mucho problema para guardarla, pero s para almacenarla en memoria para poder usarla luego. Tenamos que leer todo el archivo, y extraer de l la coleccin de informaciones y guardarlas en una matriz. Cambiar una informacin dentro del archivo secuencial tambin implica una complicacin adicional, ya que debemos rehacer el archivo completo, pues un archivo secuencial no permite remendar el trozo que queremos cambiar. Los archivos aleatorios nos permiten guardar una informacin similar a la anterior, referida a cualquier nmero de libros, y para leerla no es necesario leer todo el archivo, sino simplemente acceder a los registros que nos interesen. Tambin permite realizar el cambio de un registro de una forma sencilla, sin alterar los dems. Todo esto tiene un precio: En los archivos secuenciales, podamos introducir informaciones de cualquier longitud. En los archivos aleatorios cada dato tiene una longitud asignada, longitud que no se puede sobrepasar, y si la informacin que debemos almacenar tiene menos que la longitud preestablecida, perderemos esa capacidad sobrante. Para abrir un archivo aleatorio debemos emplear la expresin: Open Nombrearchivo LongitudRegistro For Random As # Numerocanal Len =

Nombrearchivo es el nombre que queremos dar al archivo Numerocanal es el nmero del canal (nmero de archivo) que puede ser de 1 a 255 LogitudRegistro es la longitud total del registro.
Academia de Computacin

23

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Un archivo aleatorio (Random), una vez abierto, puede utilizarse para leer o escribir datos. Para escribir datos en un archivo aleatorio, primero debemos definir el registro, es decir, en el caso de los libros visto anteriormente, un registro va almacenar los datos del titulo, autor, editorial, etc. Para "saber" como se colocan estos datos dentro del registro ser necesario definirlo. En realidad lo que vamos a hacer es definir una variable de las denominadas Definidas por el usuario Con esto lo que hacemos es crear un nuevo tipo de variable, en el ejemplo, la variable tipo Registro. Se debbe hacer en la seccin de declaraciones de un mdulo o de un formulario, y siempre antes de declarar una variable como variable de ese tipo. (La definicin de la variable debe hacerse en la seccin de declaraciones del mdulo o formulario con mbito suficiente para que sea vlida en todas las partes de la aplicacin donde se necesite esa variable) Podemos hacerlo con la instruccin Type: Type Registro Titulo As String * 30 Autor As String * 30 editorial Editorial As String * 15 Edicin As String * 6 Precio As String * 4 Existencias As String * 3 End Type Observe la diferencia de esta definicin con la que hacamos en los archivos secuenciales. En aquellos no ponamos la longitud de cada seccin. Aqu es necesario, ya que la longitud de un registro (y tambin de cada campo) es fija. Ya una vez definido como es Registro, podemos decir que una variable es del tipo definido para Registro, es decir: Dim MiVariable as Registro Entonces MiVariable ya puede almacenar los datos de Titulo, Autor, Editorial, Edicin, Precio y Existencias, colocando un dato tras otro, sin ninguna separacin, en el mismo orden que lo habamos definido para Registro. No es necesario utilizar separaciones ya que el programa sabe que longitud tiene cada dato y el orden de colocacin. Lo sabe porque se lo hemos dicho al definir Registro. Si los datos a introducir son: Titulo: Autor: Editorial: Edicin: Precio: Existencias: Gua del Estudiante Luis Surez Bernaldo Ediciones XX 2 3500 25 Asignamos 30 caracteres para el ttulo Otros 30 para el autor Asignamos 15 caracteres para

Asignamos 6 caracteres para Edicin Asignamos 4 caracteres para el precio Tres caracteres para existencias.

el registro correspondiente a este libro tendr una forma mas o menos as : Gua del Estudiante///////////Lus Surez Bernaldo//////////Ediciones
Academia de Computacin

24

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

XX///2////350025/ donde se ha sustituido el carcter nulo por una barra ( / ) con el fin de hacerlo visible en el texto. Si se molesta en contar los caracteres que tiene el registro observar que son 88, que es la suma de 30 + 30 + 15 + 6 + 4 + 3 que son los caracteres asignados a cada uno de las partes que forman el registro (Ttulo, Autor, etc.) Para hablar con propiedad, a esas partes que componen el registro lea vamos a llamar CAMPOS. Un Registro est formado por varios Campos, y cada Campo contiene una informacin. Imagnese que introducimos otro libro. El primer campo de ese nuevo registro se colocar en el archivo inmediatamente despus del ltimo campo existente, sin ningn tipo de separacin. No hace falta esa separacin, pues VB conoce donde finaliza un registro y comienza otro, ya que la longitud total del registro se le ha introducido en la instruccin para abrir el archivo, que repetimos aqu por comodidad : Open Nombrearchivo LongitudRegistro For Random As # Numerocanal Len =

(Si se omite el dato LongitudRegistro VB colocar la longitud por defecto, 128 caracteres) LongitudRegistro deber ser igual o mayor que la suma de caracteres de cada uno de los campos declarados en la instruccin Type, que tambin reproducimos: Type Registro Titulo As String * 30 Autor As String * 30 Editorial As String * 15 editorial Edicin As String * 6 Precio As String * 4 Existencias As String * 3 End Type Deber ser igual o mayor, o estrictamente igual ? La respuesta es igual o mayor. Pero si declaramos en la instruccin Open que el registro es mayor que la suma de los caracteres de todos los campos que lo componen, estaremos perdiendo espacio de disco duro, tanto como la diferencia entre lo declarado en la instruccin Open menos la suma de los caracteres de cada uno de los campos. Y esa cifra, multiplicada por el nmero de registros existentes. Por lo tanto debe declararse en la instruccin Open exactamente la suma de los caracteres de todos los campos. En el ejemplo anterior era bastante fcil, ya que todos los campos eran del tipo String (cadena de caracteres) y cada carcter ocupa un byte. La cosa se complica si uno o varios de los campos son de tipo numrico, porque nos obligar a recordar cuantos bytes ocupa un integer, un Long, etc. Si hubisemos declarado en la instruccin Type Precio as Long, Existencias as Integer deberamos tener en cuenta que un Long (nmero entero entre 2.147.483.648 y 2.147.483.647, inclusive) ocupa 4 bytes y un integer (nmero entero entre -32.768 y 32.767) ocupa 2 bytes. Se reproduce a continuacin la longitud en Bytes de cada uno de los tipos de datos. No se moleste en aprendrsela de memoria, pues en la Ayuda de Visual Basic puede encontrarla como Resumen de tipos de datos. Pero fjese en algo tan curioso como que un dato tipo Boolean que solamente puede tomar 2 valores (S / No) ocupa 2 bytes frente a un dato tipo Byte, que puede tomar
Academia de Computacin

Asignamos 30 caracteres para el ttulo Otros 30 para el autor Asignamos 15 caracteres para

Asignamos 6 caracteres para Edicin Asignamos 4 caracteres para el precio Tres caracteres para existencias.

25

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

256 valores y ocupa solamente un Byte. Tipo de Dato Byte Boolean Integer Long(entero largo) Single(coma flotante Simple precisin) Double(coma flotante Doble Precisin) Currency Date Object String (longitud variable) String (longitud fija) Variant (con nmeros) Variant (con caracteres) Ocupa 1 byte 2 bytes 2 bytes 4 bytes 4 bytes 8 bytes 8 bytes 8 bytes 4 bytes 10 bytes + longitud de cadena longitud declarada de la cadena 16 bytes 22 bytes + longitud de cadena

Ya le estoy viendo tomando buena nota de cuanto ocupa cada variable. Y echando nmeros para saber la longitud exacta de la variable y no perder ningn byte del disco duro desaprovechndolo sin informacin. No habr algo que nos lo facilite ? S, lgicamente. La instruccin LEN LEN nos da la longitud de un texto (Var=Len (Hola que tal), o de una variable Var=Len(Variable) Podemos usarla para conocer la longitud total de la variable MiVariable LongitudRegistro = Len (MiVariable) Pero si quiere reducir mas la cosa, abra el archivo de esta forma : Open Nombrearchivo For Random As # Numerocanal Len = Len (MiVariable) Ni que decir tiene que si se abre ese archivo en varias partes del programa con distintas instrucciones Open el valor de LongitudRegistro debe ser igual en todas ellas. La declaracin del registro mediante la instruccin Type debe hacerse en la seccin de declaraciones de un Mdulo. Esta instruccin Type en realidad lo que est haciendo es definir un nuevo tipo de variable, (una variable definida por el usuario) que servir de muestra para que en otra parte del programa le digamos, mediante una instruccin Dim, que tal variable es del tipo definido anteriormente mediante la instruccin Type. Por lo tanto, debemos declarar una variable en la parte que corresponda del programa, dependiendo del mbito que se le quiera dar a esa variable, diciendo que ser del tipo de la declarada mediante la instruccin Type. Usando la declaracin de Registro del ejemplo anterior, vamos a retomar el ejemplo de la biblioteca. Declararemos (posiblemente en la seccin de declaraciones del formulario) una variable que llamaremos p.e. REGLIBROS de la siguiente forma : Dim REGLIBROS as Registro
Academia de Computacin

26

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

A partir de este momento, el programa sabe que REGLIBROS es una variable que tiene 6 campos (Titulo, Autor, Editorial, Edicin, Precio y Existencias) y que cada campo tiene los caracteres especificados en la instruccin Type. Ahora nos cabe una pregunta Cuantos registros tiene un archivo Random? La respuesta es sencilla. Basta conocer la longitud del archivo mediante la instruccin LOF si el archivo ya est abierto, o con la instruccin FILELEN si no lo est, y dividir el dato obtenido con cualquiera de las dos instrucciones anteriores por el valor LongitudRegistro. Escribir datos en un archivo Random. Instruccin Put Una vez abierto el archivo Random podemos leer y escribir datos en l. Para escribir datos utilizaremos la instruccin Put. La sintaxis de Put es la siguiente: Put # Numerocanal , NumeroRegistro, Variable Puede omitirse NumeroRegistro. En este caso, el nmero de registro que se escribir ser el siguiente al ltimo registro escrito. NumeroRegistro es el nmero del registro que queremos escribir, y Variable es el contenido de ese registro. Siguiendo con nuestro ejemplo de biblioteca, Variable tiene en este caso el nombre REGLIBROS, que no es un String ni un Integer, sino una variable definida por el usuario ya que la declaramos con Dim REGLIBROS as Registro. Por lo tanto, la variable REGLIBROS contendr los mismos campos que habamos declarado para Registro en la instruccin Type. Recuerde: Type Registro Titulo As String * 30 Autor As String * 30 Editorial As String * 15 editorial Edicin As String * 6 Precio As String * 4 Existencias As String * 3 End Type Luego REGLIBROS tendr 6 campos (Titulo, Autor, Editorial, Edicin, Precio y Existencias), cada uno de una longitud determinada, la definida en la instruccin Type. Antes de introducir REGLIBROS en el archivo habr que decir que valor tiene. Pero cada campo que lo compone tendr un valor. Podramos hacer una aplicacin en la que, a travs de varios TextBox, le introdujsemos los valores de los campos, y el nmero de registro en el cual queremos escribir. El nombre de cada uno de los TextBox para cada uno de los datos es el siguiente: Campo Ttulo : TBEDITORIAL TBTITULO Campo Autor : TBAUTOR Campo Editorial : Asignamos 6 caracteres para Edicin Asignamos 4 caracteres para el precio Tres caracteres para existencias. Asignamos 30 caracteres para el ttulo Otros 30 para el autor Asignamos 15 caracteres para

Campo Edicin :TBEDICION TBEXISTENCIAS

Campo Precio : TBPRECIO Campo Existencias :

La aplicacin deber introducir en cada campo el valor (string) existente en cada uno de esos TextBox.
Academia de Computacin

27

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

El valor de la variable REGLIBROS lo compondremos de la siguiente forma: REGLIBROS.Titulo = TBTITULO.Text REGLIBROS.Autor = TBAUTOR.Text REGLIBROS.Editorial = TBEDITORIAL.Text REGLIBROS.Edicion = TBEDICION.Text REGLIBROS.Precio = TBPRECIO.Text REGLIBROS.Existencias = TBEXISTENCIAS.Text (Si se hubiese omitido alguna de estas igualdades, el campo correspondiente contendra el valor nulo) De esta forma, REGLIBROS ya tiene un valor que se puede escribir en el archivo mediante la instruccin Put. El formulario de esa aplicacin tendr esta forma:

Observe que ya se le han introducido otros controles (TextBox para introducir el nombre del archivo, otro para el nmero de registro, botones para leer, escribir, abrir el archivo (EXAMINAR), un par de botones para subir o bajar el nmero de registro y un botn para salir de la aplicacin. El TextBox para introducir el nombre del archivo se llama TBNOMBREARCHIVO y en el que debemos introducir el nmero de registro a leer o escribir TBLEERESCR. El Botn EXAMINAR cierra cualquier archivo que pudiese estar abierto, abre el archivo indicado en TBNOMBREARCHIVO, calcula el nmero de registros y escribe este nmero en el Label con nombre LNUMFICH. El cdigo de su procedimiento Click es el siguiente: Private Sub BEXAMINAR_Click() Close abierto Cierra cualquier archivo el

Open TBNOMBREARCHIVO For Random As #1 Len = 88 archivo deseado


Academia de Computacin

Abre

28

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

LONGITUDFICH = LOF(1) NUMREGS = LONGITUDFICH / 88 registros LNUMFICH.Caption = NUMREGS End Sub

Obtiene su longitud Calcula el N. de

Pone ese N. en el Label

Veamos como se escribe un registro. Analicemos el cdigo del procedimiento click del botn ESCRIBIR Private Sub BESCRIBIR_Click() REGISTROLIBRO.Titulo = TBTITULO.Text de cada REGISTROLIBRO.Autor = TBAUTOR.Text variable REGISTROLIBRO.Editorial = TBEDITORIAL.Text REGISTROLIBRO.Edicin = TBEDICION.Text REGISTROLIBRO.Precio = TBPRECIO.Text REGISTROLIBRO.Existencias = TBEXISTENCIAS.Text Put #1, Val(TBLEERESCR), REGISTROLIBRO End Sub Observe que el N. de registro es el valor que figure en el TextBox TBLEERESCR Leer datos en un archivo Random. Instruccin Get Para leer los datos de un archivo Random utilizaremos la instruccin Get. Su sintaxis es la siguiente : Get # Numerocanal , NumeroRegistro, Variable Puede omitirse NumeroRegistro. En este caso, el nmero de registro que se leer ser el siguiente al ltimo registro ledo. La Instruccin Get leer un registro completo. Ese registro contendr varios campos, y seguramente nos interesar conocer el valor de cada campo dentro de ese registro. Variable es una variable que contendr todos los campos. En nuestra aplicacin de biblioteca, Variable tiene por nombre REGISTROLIBRO (El mismo que tena para la instruccin Put de escribir. Es pura comodidad del programador. Puede tener cualquier otro nombre). Para obtener el contenido de cada campo, realizaremos un proceso similar al empleado para la escritura, pero al revs. En nuestra aplicacin, pretendemos poner el contenido de cada campo en los mismos TextBox que se utilizaron para escribirlos. Veamos el contenido del procedimiento click del botn LEER Private Sub BLEER_Click() Get #1, Val(TBLEERESCR), REGISTROLIBRO TBTITULO.Text = REGISTROLIBRO.Titulo campo Titulo TBAUTOR.Text = REGISTROLIBRO.Autor
Academia de Computacin

Se asignan los valores uno de los campos de la REGISTROLIBROS

Se escribe el registro

Lee el registro completo Obtiene Autor, el valor del

Editorial,

Edicin,

29

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Precio TBEDITORIAL.Text = REGISTROLIBRO.Editorial en los TBEDICION.Text = REGISTROLIBRO.Edicin correspondientes a cada TBPRECIO.Text = REGISTROLIBRO.Precio TBEXISTENCIAS.Text = REGISTROLIBRO.Existencias End Sub Funciones e instrucciones aplicables a los archivos Random. Funciones Seek y Loc. En los archivos Random tienen especial importancia las funciones Seek y Loc. Mediante la Funcin Loc podemos conocer la el ltimo registro manipulado, bien por lectura, escritura. Si abrimos el archivo y no se ha hecho ninguna lectura o escritura de registros, el nmero devuelto por la funcin Loc es 0. La sintaxis de la funcin Loc es : Variable = Loc (Numerocanal) Variable tomar un valor igual al nmero del registro escrito o ledo por ltima vez. Mediante la Funcin Seek podemos conocer el prximo registro que ser manipulado en una operacin de lectura o escritura. Si abrimos el archivo y no se ha hecho an ninguna operacin de lectura o escritura, Seek devuelve el valor 1. La sintaxis de la funcin Seek es : Variable = Seek (Numerocanal) ATENCION Seek puede ser una funcin (lee un Dato) o una instruccin (fuerza un dato) ! ! ! Instruccin Seek La instruccin Seek establece el prximo registro a leer o escribir en un archivo Random. Sintaxis Seek (Numerocanal), posicin posicin es el nmero de registro que se va a leer o escribir en la siguiente operacin. No acepta el 0 como nmero de registro, el mas bajo debe ser el 1. Si se intenta forzar a la posicin 0 dar un error. Funciones de los archivos Random: EOF Sintaxis Devuelve un valor que indica si se ha llegado al final de un archivo. EOF(Numerocanal) y Existencias y los pone TextBox dato

En archivos Random, EOF devuelve False hasta que se haya ejecutado una instruccin Get y no haya podido leer el registro completo, en cuyo caso devolver True.
Academia de Computacin

30

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

La funcin EOF no suele emplearse en archivos Random, ya que en estos nos movemos a base de registros, y es muy fcil controlar cuantos registros existen en el archivo y en que registro nos encontramos o nos vamos a mover, mediante las funciones LOF, LOC y SEEK LOF ( Lenght Of File ) Devuelve la longitud de un archivo . Sintaxis Variable = LOF(Numerocanal) Mediante la funcin LOF podemos conocer el nmero de registros existentes en un archivo Random, dividiendo el valor devuelto por LOF por la longitud del registro declarada en la instruccin Open (LEN = longitud) N. Registros = LOF / longitud Recuerde Para obtener la longitud de un archivo que no est abierto utilce la funcin FileLen.

3.3 Archivos binarios Un archivo binario es una sucesin de bytes, uno tras otro, que puede almacenar cualquier tipo de informacin. Cuando se explicaban los archivos secuenciales, decamos que eran los mas adecuados para introducir informacin de un texto, con los Random podamos realizar una base de datos de forma sencilla, a base de controlar los registros y sus campos. Con un archivo binario podemos almacenar cualquier informacin. (texto y cualquier tipo de datos) . Para abrir un archivo secuencial se abre utilizando la instruccin : Open Nombrearchivo For Binary As # Numerocanal Como siempre en VB, Numerocanal puede ser un nmero comprendido entre 1 y 255, que define ea archivo. No pueden existir al mismo tiempo 2 archivos abiertos con el mismo Numero de canal. Nombrearchivo es el nombre completo del archivo, con su Path. Una vez abierto un archivo se binario, podemos leer o escribir datos en l. Para escribir uno o varios caracteres en un archivo binario, usaremos la instruccin Put. Put # Numerocanal, Posicin, Variable Donde Posicin es el Byte donde comenzar la escritura, y Variable es el nombre de la variable que contiene el dato a escribir. Este dato puede ser un byte o varios bytes. Para escribir varios bytes podemos hacerlo de dos formas : - Si se puede conocer de antemano el nmero de bytes a escribir, puede declararse Variable como un string de ese nmero de caracteres mediante la instruccin Dim, por ejemplo : Dim Variable As String * numero de bytes y en este caso siempre escribir el nmero de bytes declarado. Cuidado ! Si los datos a introducir sobrepasan el nmero de bytes declarados para Variable, los datos sobrantes no se escribirn en el archivo. Si los datos a escribir en el archivo fuesen menos que los declarados para Variable, la diferencia se rellenar con el byte nulo ( 0 ).
Academia de Computacin

31

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

- Si no se conoce de antemano el nmero de bytes a escribir, podemos declarar la variable sin especificar el nmero de bytes que tiene, y de esta forma se escribirn todos los bytes que componen la variable: Dim Variable As String Pero en este caso debemos volver a decir Cuidado !, si no conocemos el nmero de bytes que vamos a escribir, puede que machaquemos parte de la informacin que ya tenemos en el archivo, pues la instruccin Put va a colocar los bytes que componen Variable en la posicin especificada por Posicin y siguientes, hasta que quepa toda la cadena de bytes que le queremos introducir. Si la posicin en la que introducimos esos bytes es una posicin intermedia, y no controlamos bien el nmero de bytes a introducir y las informaciones que ya existen en el archivo en las posiciones colindantes con las que vamos a introducir los datos, es muy probable que perdamos esa informacin al introducir la nueva. Si se omite el dato Posicin, se tomar como byte de inicio de la escritura el siguiente al ltimo usado por la instruccin Put. Si quiere omitir este dato, debe conservar las comas que lo separan : Put # Numerocanal, , Variable Qu pasar si el dato Posicin indica una posicin mayor que la que tiene realmente el archivo ? Simplemente que rellenar las posiciones intermedias que se formarn con un byte (puede verlo con el Block de Notas ) Un archivo binario es, como se deca al principio, una sucesin de bytes, que no tiene ningn tipo de separacin entre bytes. Cada dato (byte o conjunto de bytes) que introduzcamos en un archivo binario se escribir en el archivo tal y como se introducen. Machacando informacin ya existente si no se controla bien donde se mete. Por lo tanto, aunque parece que los archivos binarios pueden ser mucho mas verstiles que los secuenciales y los Random, exigen mucho mas control que los anteriores. Limite el uso de este tipo de archivos a las aplicaciones en que sea realmente imprescindible. Para leer datos de un archivo binario, utilizaremos la instruccin Get. Get # Numerocanal, Posicin, Variable Donde Posicin es el nmero del primer byte ledo, que como en el caso de Put, si se omite, tomar como valor el byte siguiente al usado en la ltima instruccin Get. Variable es el nombre de una variable que contendr los datos ledos. Pueden leerse uno o varios Bytes, pero ahora surge un pequeo problema. Como le decimos cuantos bytes debe leer ? Sencillamente los especificados al declarar la variable . Imaginemos que la declaracin de la variable fue : Dim Variable As String * 10 Con Variable declarada de esta forma, leer 10 bytes a partir del byte Posicin. (Incluido) De esta forma, siempre leeremos un nmero determinado de caracteres (10 en el caso del ejemplo). Esta es una limitacin para el uso de Get. Esta funcin viene muy bien en aquellas aplicaciones en las que tenemos que extraer un nmero fijo de bytes (En la prctica, en la mayor parte de las aplicaciones se extrae de uno en uno) Pero pueden existir aplicaciones en las que sea necesario leer una vez un nmero de caracteres, y otra
Academia de Computacin

32

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

vez otro. Ese problema lo tenemos resuelto con la instruccin Input. Podemos leer caracteres de un archivo secuencial mediante la instruccin Input : Variable = Input (Numero de bytes, # Numerocanal) Mediante la instruccin Input podemos leer el nmero de caracteres que queramos, pero no podemos controlar el byte de comienzo. Por lo tanto deberemos ayudarnos de la instruccin Seek para posicionar el puntero de lectura encima del primer byte que queramos leer : Seek (Numerocanal), Nmero del primer Byte a leer Por ejemplo, si queremos leer 35 bytes de un archivo binario, abierto con el nmero de canal 1, comenzando por el byte 48 (el 48 ser el primer byte ledo), ejecutaremos las dos siguientes instrucciones: Seek (1), 48 Variable = Input (35, #1) Variable contendr ahora los 35 bytes deseados. Al igual que se hizo para los archivos secuenciales y Random, vamos a ver con un ejemplo prctico como se manejan los archivos binarios. El formulario del ejemplo tiene esta forma:

Con el botn ABRIR se abre el archivo deseado. Si no existe en el disco, lo crea, ya que la instruccin Open Nombrearchivo For Binary As # Numerocanal intenta abrir un archivo existente llamado Nombrearchivo, y si este no existe, lo crea. Si existe el archivo, presenta todo su contenido en el TextBox inferior, para poder tener una referencia de que lugar ocupan los distintos caracteres (un archivo binario puede guardar cualquier byte, por lo que si abre un archivo generado con cualquier programa puede ser que muchos de los bytes no contengan
Academia de Computacin

33

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

informacin de un carcter, por lo que le recomendamos haga esta prctica con un archivo creado por la misma prctica) El botn CERRAR cierra el archivo. SALIR sale de la aplicacin. El TextBox superior (variable) sirve para introducir la variable a escribir en el archivo, o para presentar la variable leda en caso de lectura . El TextBox posicin sirve para indicar la posicin del primer byte. Posicin por defecto presenta la posicin que se extrae mediante la funcin Seek cada vez que se hace una lectura o escritura en el archivo. Longitud de la variable permite introducir esa longitud, para leer mediante la instruccin Input. El botn ESCRIBIR escribe el dato Variable en el archivo, LEER (GET) lee un nico byte, y LEER (INPUT) lee una cadena de caracteres, de longitud la especificada en el TextBox Longitud de la variable. Se enumera a continuacin el cdigo de cada uno, dejando para las explicaciones del profesor en clase, o el estudio del alumno, la interpretacin de cada una de susu partes. FORMULARIO. DECLARACIONES Option Explicit Dim COMIENZA As Long Dim TESTO As String Dim pospordef As Long BOTON ABRIR Private Sub BABRIR_Click() CD1.ShowOpen archivo CD1 es un CommonDialog para buscar el Abre el archivo indicado en CD1 Obliga a declarar todas las variables Se declara la variable COMIENZA Se declara la variable TESTO Se declara la variable pospordef Dim LONGVAR As Integer Se declara la variable LONGVAR

Open CD1.filename For Binary As #1

TESTO = Input(LOF(1), #1) Lee de un golpe el archivo y lo mete en la variable TESTO TBARCHIVO.Text = TESTO Presenta el archivo en el TextBox TBARCHIVO End Sub BOTON CERRAR Private Sub BCERRAR_Click() Close archivos abiertos End Sub BOTON ESCRIBIR Private Sub BESCRIBIR_Click() TBVAR2.BackColor = RGB(255, 0, 0)
Academia de Computacin

La

instruccin

Close

cierra

todos

los

Pone el TB long. De la variable en


Programacin

34

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

rojo Dim escribe As String string, sin limitacin escribe = TBVAR1.Text variable escribe Put #1, Val(TBVAR3), escribe posicin del 1er byte pospordef = Seek(1) archivo Lvar5 = Str(pospordef) Lvar5 End Sub BOTON LEER (GET) Private Sub BLEER_Click() TBVAR2.BackColor = RGB(255, 0, 0) la variable) TBVAR2.Text = "1" If Seek(1) >= LOF(1) Then Seek #1, 1 End If Dim TEXTO As String * 1 If TBVAR3.Text <> "" Then comenzar COMIENZA = Val(TBVAR3.Text) indicada en TBVAR3 ElseIf Lvar5.Caption <> "" Then Pone en rojo el TB TBVAR2 (long. de Declara la variable escribe como Pasa el contenido de TBVAR a la Instruccin Put. Val(TBVAR3) es la Analiza donde qued el puntero del y pone este valor en la etiqueta

e indica que la longitud leda es 1 Si est al final del archivo pone el puntero en la posicin 1 Declara la variable TEXTO de un byte Si se le ha indicado donde tiene que le dice que comience en la posicin si no, si existe posicin por defecto

COMIENZA = Val(Lvar5.Caption) le indica que comience en la posicin por defecto Else COMIENZA = Seek(1) (byte 1) End If Get #1, COMIENZA, TEXTO TBVAR1.Text = TEXTO pospordef = Seek(1) lee un byte y lo presenta en TBVAR1 busca la nueva posicin por defecto si no pone el puntero en la posicin 1

Academia de Computacin

35

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Lvar5 = Str(pospordef) End Sub BOTON LEER (INPUT) Private Sub BLLERINPUT_Click()

y pone ese valor en Lvar5

TBVAR2.BackColor = RGB(255, 255, 255) LONGVAR = Val(TBVAR2.Text) LONGVAR If TBVAR3.Text <> "" Then nada) COMIENZA = Val(TBVAR3.Text) Seek (1), COMIENZA End If Dim TEXTO As String limitacin TEXTO = Input(LONGVAR, #1) pasa a TEXTO TBVAR1.Text = TEXTO pospordef = Seek(1) Lvar5 = Str(pospordef) End Sub BOTON SALIR Private Sub BSALIR_Click() End End Sub Private Sub TBVAR2_Change() TBVAR2.BackColor = RGB(255, 255, 255) introducimos un dato en End Sub

Pone TBVAR2 en blanco

pasa el valor para long. de variable a si ese valor existe (TBVAR3 es distinto de la variable COMIENZA toma ese valor coloca el puntero en ese valor Declara la variable TEXTO sin

Lee LONGVAR bytes del canal 1 y los y lo presenta en el TB TBVAR1 analiza la nueva posicin por defecto y la presenta en Lvar5

Sale de la aplicacin.

Vuelve

color

blanco

si

este Text Box

FIN DE LA APLICACIN PARA MANEJO DE ARCHIVOS BINARIOS Funciones y propiedades aplicables a todos los archivos DIR Devuelve el nombre de un archivo, directorio o carpeta que concuerda con el patrn o atributo de archivo especificado o la etiqueta de volumen de una unidad de disco. Sintaxis nombreruta Dir[(nombreruta[, atributos])] Expresin de cadena que especifica un nombre de archivo. Puede incluir el directorio o carpeta y la unidad de disco. Si no se encuentra nombreruta, devuelve
36
Programacin

Academia de Computacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Null. atributos Constante o expresin numrica, cuya suma especifica atributos de archivo. Si se omite, devuelve todos los archivos normales que satisfacen el nombreruta. Valor 0 2 4 8 16 Descripcin Normal. Oculto. Sistema Etiqueta de volumen; si se especifica se ignoran todos los atributos Directorio o carpeta.

El argumento atributos tiene estas constantes y valores: Constante vbNormal vbHidden vbSystem vbVolume vbDirectory

En Microsoft Windows, Dir permite el empleo de los caracteres comodn '*' (mltiples caracteres) y '?' (un solo carcter) para especificar varios archivos. La primera vez que se llama a la funcin Dir se debe especificar el nombreruta, de lo contrario se produce un error. Si adems se especifican atributos de archivo, se debe incluir el nombreruta. Dir devuelve el primer nombre de archivo que coincide con el nombreruta. Para obtener ms nombres de archivo que coincidan con el nombreruta, se debe volver a llamar a Dir sin argumentos. Cuando no hay ms nombres de archivo coincidentes, Dir devuelve una cadena de caracteres de longitud cero. Cuando se devuelve una cadena de longitud cero, en las siguientes llamadas se debe especificar nombreruta o se producir un error. Se puede cambiar el nombreruta sin haber obtenido todos los nombres de archivo que coinciden con el nombreruta actual. Sin embargo, no se puede llamar a la funcin Dir. FILECOPY Copia un archivo. FileCopy fuente, destino Sintaxis

fuente Expresin de cadena que especifica el nombre de un archivo a copiarse puede incluir el directorio o carpeta y la unidad de disco.. destino Expresin de cadena que especifica el nombre del archivo de destino se puede incluir el directorio o carpeta y la unidad de disco. Si intenta utilizar la instruccin FileCopy en un archivo abierto actualmente, se produce un error. FILEDATATIME Sintaxis Devuelve una fecha que indica la fecha y hora en que un archivo fue creado o modificado por ltima vez. Variable = FileDateTime(nombreRuta)

El argumento con nombre nombreRuta es una expresin de cadena que especifica un nombre de archivo. Se puede incluir el directorio o carpeta y la unidad de disco. FILELEN Devuelve la longitud de un archivo en bytes. Sintaxis Variable = FileLen(nombreRuta)

El argumento con nombre nombreRuta es una expresin de cadena que especifica un nombre de archivo se puede incluir el directorio o carpeta y la unidad de disco.
Academia de Computacin

37

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Si el archivo especificado est abierto cuando se llama la funcin FileLen, el valor devuelto representa el ltimo tamao de ese archivo cuando se guard la ultima vez en el disco. Para obtener la longitud de un archivo abierto, utilice la funcin LOF. GETATTR Devuelve un nmero, que representa los atributos de un archivo, directorio o carpeta o una etiqueta de volumen. Variable = GetAttr(nombreRuta)

Sintaxis

El argumento con nombre nombreRuta es una expresin de cadena que especifica un nombre de archivo se puede incluir el directorio o carpeta y la unidad de disco. Valores devueltos El valor devuelto por GetAttr es la suma de los siguientes valores de atributos: Valor 0 1 2 4 16 32 Constante vbNormal vbReadOnly vbHidden vbSystem vbDirectory vbArchive Descripcin Normal. Slo lectura. Oculto. Archivo de sistema. Directorio o carpeta. El archivo ha sido modificado despus de efectuar la ltima copia de seguridad. SETATTR nombreRuta atributos Establece los atributos de un archivo. SetAttr nombreRuta;atributos Expresin de cadena que especifica un nombre de archivo se puede incluir el directorio o carpeta y la unidad de disco. Constante o expresin numrica cuya suma especifica los atributos de archivo. Sintaxis

Las constantes y valores de atributos son los mismos que para la instruccin GetAttr Si se trata de establecer los atributos de un archivo abierto, se producir un error en tiempo de ejecucin. FREEFILE Sintaxis Devuelve el siguiente nmero de archivo disponible para ser usado con la instruccin Open. FreeFile[(nmerodeintervalo)]

El argumento nmerodeintervalo especifica el intervalo desde el que el siguiente nmero de archivo libre se va a devolver. Se especifica 0 (predeterminado) para devolver un nmero de archivo en el intervalo 1 a 255, inclusive. Se especifica 1 para devolver un nmero de archivo en el intervalo 256 a 511. Observaciones Se usa FreeFile cuando se necesita proveer un nmero de archivo y se quiere asegurar
Academia de Computacin

38

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

que el nmero de archivo no est ya en uso.

Academia de Computacin

39

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

4. BASES DE DATOS Visual Basic nos permite trabajar directamente con distintas bases de datos (ACCESS, dBaseIII, dBaseIV , dBase 5, Excel3, Excel4, Excel5, Excel7, FoxPro2.x, Foxpro3.0, LotusWK1, LotusWK3, LotusWk4, Paradox3.x, Paradox4.x y Paradox5.x Esto lo logra mediante el Motor de Bases de Datos Jet, herramienta de Microsoft para administrar los datos en bases de datos Access. Tiene un nombre que mas parece de una materia de ingeniera aeronutica, pero en realidad no es mas que un conjunto de programas que se cargan en el disco duro cuando instala Access o Visual Basic. E esta forma de acceder a las bases de datos se le llama Acceso mediante objetos DAO. DAO (Data Access Objet) es la forma ms sencilla y rpida de acceder a una base de datos Access instalada en el propio disco duro o en un disco de red de rea local rpida. 4.1. Conceptos generales Entendiendo los Conceptos Bsicos acerca de las Bases de Datos La mayora de sistemas de bases de datos emplean el modelo de base de datos relacional. Este modelo presenta los datos como una coleccin de tablas. Una tabla es un grupo lgico de informacin relacionada. Por ejemplo, la base de datos Neptuno contiene una tabla que almacena a los empleados, y otra almacena los pedidos de una compaa ficticia. La base de datos Neptuno.mdb es una base de datos de ejemplo incluida con Microsoft Access.

Elementos de una Tabla: La base de datos Neptuno contiene un nmero de tablas que agrupan la informacin. Estas tablas incluyen Pedidos, Clientes, y Empleados. En una base de datos Jet, las filas de la tabla son denominadas registros, y las columnas campos.

Academia de Computacin

40

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

La Clave Principal: Cada tabla debe de tener una clave principal, que es un campo (o una combinacin de campos) que es nico para cada registro en la tabla. Por ejemplo, el campo IdEmpleado es la clave principal para la tabla Empleados. Una tabla puede tambin tener claves forneas, que son campos que hacen referencia a una clave principal de otra tabla. Por ejemplo, en la base de datos Neptuno, la tabla Pedidos tiene un campo llamado IdCliente. Este campo es una clave fornea porque hace referencia a un cliente de la tabla Clientes. En vez de duplicar toda la informacin del cliente por cada pedido, slo se ingresa la clave principal del cliente a quien pertenece el pedido, como la clave principal es nica por cada cliente, hay un solo cliente por cada pedido, y un cliente puede tener muchos pedidos. En trminos de una base de datos, la relacin entre la tabla Clientes y la tabla Pedidos es una relacin del tipo uno-a-varios. Registros: Un registro contiene informacin acerca de un solo ingreso en una tabla. Generalmente, no se desea que dos registros en una tabla tengan los mismos datos. Por ejemplo, un registro en la tabla Empleados contiene informacin acerca de un nico empleado. Campos: Cada campo en una tabla contiene una parte de la informacin. Por ejemplo, la tabla Empleados incluye campos para el Id del empleado, Apellidos, Nombre, etc. Indices: Los ndices de una tabla de una base de datos son listas ordenadas que son ms rpidas para las bsquedas que las tablas en s. Para habilitar un acceso ms rpido a una base de datos, la mayora de bases de datos emplean uno o ms ndices. Por ejemplo, la tabla Empleados tiene un ndice para la columna IdEmpleado. Uso del Control Data: En Visual Basic puede utilizar el control Data para crear aplicaciones de bases de datos para una gran variedad de formatos de base de datos. El control Data interacta con el motor de base de datos Microsoft Jet y permite crear aplicaciones preparadas para datos con la mnima cantidad de cdigo posible. Tener Acceso a Datos con el Control Data: El control Data implementa el acceso a datos mediante el motor de base de datos Microsoft Jet. Esta tecnologa proporciona acceso a muchos formatos de base de datos y permite crear aplicaciones que manejan datos sin necesidad de escribir cdigo. Para crear una aplicacin de base de datos que emplee el control Data, se siguen los siguientes pasos: 1. Aadir el control Data al formulario y establecer las propiedades para especificar la base de datos y la tabla desde la cual se obtendrn los datos. 2. Aadir controles enlazados a datos al formulario, y establecer las propiedades para enlazar los controles al control Data para que los datos puedan ser mostrados. Uso de Controles Enlazados a Datos: Cuando un control que ha colocado en un formulario se enlaza a datos, se muestran automticamente los datos de la base de datos en el control enlazado. Si un usuario cambia los datos de un control enlazado, dichos cambios se actualizarn automticamente en la base de datos en cuanto el usuario se desplace a otro registro. Muchos controles intrnsecos o estndar de Visual Basic permiten ser enlazados a datos, como es el caso de los controles CheckBox, Image, Label, PictureBox, TextBox, ListBox, ComboBox y los contenedores OLE. La siguiente ilustracin es un ejemplo de un formulario que contiene un control Data y dos controles enlazados.

Academia de Computacin

41

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Establecer las Propiedades del Control Data: Los siguientes pasos describen como conectar un control Data a una base de datos. 1. 2. Especificar las base de datos a la cual se quiere acceder estableciendo la propiedad DatabaseName al nombre de la base de datos. Para especificar que registros recuperar, establecer la propiedad RecordSource al nombre de la tabla dentro de la base de datos, o a una cadena SQL.

Nota: Para acceder a una base de datos dBase, Paradox, o Btrieve, se debe establecer la propiedad DatabaseName a la carpeta que contiene los archivos de la base de datos, y la propiedad Connect al tipo apropiado de base de datos. Enlazar Controles: Despus de establecer los valores de las propiedades para el control Data, es necesario enlazar al control Data controles individuales y despus especificar qu campo de la tabla mostrar cada control. 1. En tiempo de diseo, establecer la propiedad DataSource del control enlazado a datos al control Data. 2. En tiempo de diseo o en tiempo de ejecucin, especificar que campo se desea mostrar en el control enlazado estableciendo la propiedad DataField. Esta propiedad puede ser establecida en tiempo de diseo o en tiempo de ejecucin. Usar las Propiedades y Mtodos del Control Data: Para especificar los datos que se desean recuperar, se debe establecer las propiedades DatabaseName y RecordSource de un control Data. Adems, se pueden establecer las siguientes propiedades y mtodos. La Propiedad Connect: Esta propiedad especifica el tipo de base de datos a abrir. Puede incluir argumentos tales como un nombre de usuario (user ID) y una contrasea. La Propiedad Exclusive: La propiedad Exclusive determina si se tiene o no un uso exclusivo de la base de datos. Si esta propiedad se establece a True, y luego se abre sin problemas la base de datos, ninguna otra aplicacin podr abrirla hasta que sea cerrada. La Propiedad ReadOnly: Esta propiedad determina si se puede o no actualizar o grabar cambios en la base de datos. Si no se tiene planeado hacer cambios en la base de datos, es ms eficiente establecer la propiedad ReadOnly a True. La Propiedad Recordset: La propiedad Recordset es un objeto que contiene el conjunto de registros devueltos por el control Data. Esta propiedad contiene a su vez propiedades y mtodos que pueden ser usados para trabajar con los registros devueltos.
Academia de Computacin

42

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Las Propiedades BOFAction y EOFAction: Estas propiedades determinan que accin tomar el control Data cuando las propiedades BOF o EOF del recordset tomen como valor True. Por ejemplo, si la propiedad EOFAction del control Data es establecida a vbActionAddNew, y se emplea el control Data para desplazarse, una vez que se pase el ltimo registro, el control Data automticamente ejecutar el mtodo AddNew de modo que se pueda aadir un nuevo registro. El Mtodo Refresh: El mtodo Refresh renueva el objeto Recordset. Si se cambia la propiedad RecordSource en tiempo de ejecucin, se debe invocar al mtodo Refresh para renovar el recordset. El siguiente cdigo muestra como emplear el mtodo Refresh. Data1.RecordSource = "SELECT * FROM Empleados " & _ "WHERE [IdEmpleado] = " & txtIdEmp.Text Data1.Refresh El Objeto Recordset: En una aplicacin de base de datos, los usuarios trabajan con el control Data para desplazarse entre registros dentro de la base de datos. Los usuarios pueden hacer clic en los botones del control Data para avanzar o retroceder registro a registro o para ir directamente al primer o al ltimo registro. Qu es un Recordset? Todo el conjunto de registros al que hace referencia un control Data se denomina conjunto de registros o Recordset. El Recordset se almacena en la memoria, transfirindose al disco si es necesario. Para manipular el Recordset, se emplea la propiedad Recordset del control Data. El Recordset contiene el registro actual. La informacin del registro actual es mostrada por los controles enlazados. Se puede cambiar la posicin del registro actual haciendo clic en el control Data o escribiendo cdigo que emplee mtodos del objeto Recordset. Determinar los lmites de un Recordset: Si utiliza cdigo para cambiar la posicin del registro actual, debe comprobar las propiedades EOF y BOF del objeto Recordset para determinar el inicio y el final del mismo. Cuando se desplace al registro EOF o al BOF, se ejecutar la accin indicada por el valor de la propiedad BOFAction o EOFAction. Por ejemplo, se puede establecer la propiedad EOFAction para aadir un nuevo registro automticamente. Si se establece la propiedad EOFAction a EOF, ninguna accin ser tomada cuando se desplace al registro EOF. Cuando se desplace pasando un registro los registros BOF o EOF, se producir un error en tiempo de ejecucin. En la siguiente ilustracin se muestra cmo las propiedades BOF y EOF determinan los lmites del objeto Recordset.

Academia de Computacin

43

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Para emplear el objeto Recordset de un control Data determinado, se debe especificar la propiedad Recordset del control Data, como se muestra en el siguiente cdigo. Data1.Recordset.MoveNext 'Mueve el registro actual al siguiente If Data1.Recordset.EOF Then Data1.Recordset.MoveLast Uso de las Propiedades y Mtodos de un Recordset Utilice los mtodos y las propiedades del objeto Recordset para recuperar informacin del conjunto de registros, desplazarse por los registros y agregar, actualizar o eliminar registros. Las Propiedades BOF y EOF Las propiedades BOF y EOF del objeto Recordset indican si la posicin del registro actual es antes del primer registro o despus del ltimo registro dentro del conjunto de registros. Si no hay registros en el recordset, entonces el valor de las propiedades BOF y EOF es True. El Mtodo AddNew del Recordset Para agregar un nuevo registro a un recordset, se emplea el mtodo AddNew. Cuando se ejecuta el mtodo AddNew, Visual Basic limpia los controles enlazados y establece la propiedad EditMode del control Data a dbEditAdd. El nuevo registro no ser aadido a la base de datos hasta que sea ejecutado explcitamente un mtodo UpdateRecord o Update, o hasta que el usuario se mueva a otro registro. El siguiente cdigo muestra como agregar un nuevo registro a un recordset. Private Sub cmdAgregar_Click() Data1.Recordset.AddNew El Mtodo UpdateRecord del Control Data El mtodo UpdateRecord se emplea para grabar el registro actual a una base de datos. El siguiente cdigo muestra como grabar el registro actual y actualizar la base de datos. Private Sub cmdGrabar_Click() Data1.UpdateRecord El Mtodo CancelUpdate del Control Data El mtodo CancelUpdate se emplea para cancelar un mtodo AddNew o Edit y renovar o refrescar los controles enlazados con datos del recordset. Por ejemplo, si un usuario ha modificado los campos de un formulario, pero todava no los ha actualizado, el mtodo CancelUpdate refrescar los campos con los datos originales del recordset. Si un usuario selecciona un botn Agregar de un formulario, y luego decide no agregar el registro, el mtodo CancelUpdate cancelar la operacin y visualizar el registro actual. El siguiente cdigo muestra como cancelar la agregacin o edicin de un registro. Private Sub cmdCancelar_Click() Data1.CancelUpdate
Academia de Computacin

44

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

El Mtodo Delete del Recordset Para eliminar un registro de una base de datos, se emplea el mtodo Delete. El registro eliminado permanecer como el registro actual hasta que el usuario se mueva a un registro diferente, como se muestra en el siguiente cdigo. Private Sub cmdEliminar_Click() Data1.Recordset.Delete Data1.Recordset.MoveNext If Data1.Recordset.EOF Then Data1.Recordset.MoveLast End If End Sub Nota: La base de datos Neptuno tiene definidas reglas de integridad referencial que impiden eliminar registros relacionados. Uso del Asistente para Formularios de Datos El Asistente para Formularios de Datos es una utilidad de Visual Basic que genera formularios de datos simples que emplean el control Data. Se puede emplear el Asistente para Formularios de Datos para construir rpidamente formularios para una aplicacin de base de datos. Para cargar el Asistente para Formularios de Datos, se emplea la orden Administrador de Complementos del men Complementos. Uso de los Eventos del Control Data El control Data proporciona tres eventos que puede utilizar para mejorar la aplicacin de base de datos: Validate, Error y Reposition. Dichos eventos permiten omitir parte del comportamiento predeterminado del control Data. Usar el Evento Validate Utilice el evento Validate para comprobar los datos antes de guardar un registro en la base de datos. Este evento se produce justo antes de que Visual Basic escriba en la base de datos los cambios procedentes de los controles enlazados y de que vuelva a colocar el puntero del registro actual en otro registro de la base de datos. Puede utilizar el evento Validate para pedir al usuario que confirme los cambios realizados. Sintaxis El evento Validate tiene la siguiente sintaxis: Private Sub Data1_Validate (index As Integer, action As Integer, save As Integer) El Argumento Action El argumento action indica la operacin que provoc el evento Validate. El evento Validate se produce como resultado de realizar las operaciones siguientes: MoveFirst, MovePrevious, MoveNext, MoveLast
45
Programacin

Academia de Computacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

AddNew Update Delete Find Establecer la propiedad Bookmark Cerrar la base de datos Descargar el formulario

Para cancelar cualquiera de estas acciones, asigne al argumento action el valor vbDataActionCancel. El Argumento Save El argumento save indica si va a guardarse o no el registro. Si save es True, los datos enlazados han cambiado. Para cancelar la accin de guardar puede asignar a save el valor False. El siguiente cdigo pide al usuario que confirme los cambios hechos a la base de datos. Si el usuario responde No, los cambios sern cancelados. Private Sub Data1_Validate (Action As Integer, Save As Integer) Dim iRespuesta as Integer If Save = True Then iRespuesta = MsgBox ("Desea guardar los cambios?" , vbYesNo) If iRespuesta = vbNo Then Save = False Data1.UpdateControls 'Actualiza los campos End If End If End Sub Usar el Evento Reposition Utilice el evento Reposition para modificar la apariencia de un formulario o realizar una accin necesaria cuando se desplace a un nuevo registro. Este evento tiene lugar cuando Visual Basic desplaza el puntero del registro actual a otro registro de la base de datos. Tambin se produce la primera vez que se abre la base de datos. Modificar la apariencia de un formulario Para cambiar la manera en que un formulario muestra informacin basndose en el registro seleccionado en ese momento hay que utilizar el evento Reposition. Por ejemplo, puede modificar el ttulo del control Data de forma que se muestre el registro nmero n. Para ver el nmero del registro actual, utilice la propiedad AbsolutePosition del objeto Recordset. El nmero de registro es relativo a cero, por lo que el primer registro es el 0. El siguiente cdigo muestra como visualizar el nmero del registro actual. Private Sub Data1_Reposition() Data1.Caption = "Registro N" & Data1.Recordset.AbsolutePosition + 1
Academia de Computacin

46

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

End Sub Tratar los cambios al desplazarse a un nuevo registro Cuando un usuario se desplaza a un nuevo registro mediante el control Data, puede que los datos del formulario tengan que presentarse de una forma distinta en el caso del nuevo registro. Por ejemplo, es posible que en un formulario que muestre registros de empleados haya distintas opciones dependiendo de s los empleados son fijos, temporales o si trabajan por horas. Cada registro mostrar la informacin sobre un empleado distinto, cuyas opciones pueden no ser las mismas para todos los registros. Para que se seleccione la opcin correcta para cada registro, escriba cdigo en el evento Reposition. El cdigo siguiente utiliza el evento Reposition para modificar la apariencia de un formulario. Private Sub Data1_Reposition() Data1.Caption=Data1.Recordset.AbsolutePosition If Data1.Recordset("IdEmpleado") > 5 Then optSenior.Value = True Else optJunior.Value = True End If Data1.Caption = "Registro N" & Data1.Recordset.AbsolutePosition + 1 End Sub Esta ilustracin muestra el formulario basado en el cdigo anterior.

Usar el Evento Error El evento Error tiene lugar cuando un usuario interacta con el control Data y se produce un error de acceso a datos. Utilice el evento Error para agregar tratamiento de errores personalizado al control Data. Por ejemplo, si un usuario modifica un campo y despus hace clic en el control Data para desplazarse al siguiente registro, el control Data actualizar el registro actual. Si se produce un error de acceso a datos durante la actualizacin, se producir el evento Error. Los valores de los campos enlazados no cambian tras producirse un error. El usuario puede corregir los valores y hacer clic en el control Data para tratar de actualizar nuevamente el registro. Mostrar un mensaje de error personalizado

Academia de Computacin

47

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Si no coloca cdigo para tratar errores en el evento Error y se produce un error cuando un usuario interacta con el control Data, Visual Basic muestra el mensaje de error y el programa contina ejecutndose. Si no desea que se muestre el mensaje de error estndar, puede asignar al argumento Response el valor 0 y mostrar un mensaje de error personalizado como se muestra en el siguiente cdigo. Private Sub Data1_Error (DataErr As Integer, Response As Integer) If DataErr = 3022 Then 'Error de clave principal duplicada MsgBox "Ingrese un Id de Empleado nico" txtIdEmp.SetFocus Response = 0 Else Response = 1 'Muestra el mensaje de error estndar End If End Sub Uso de Controles Enlazados a Datos ActiveX Adems de los controles enlazados intrnsecos, Visual Basic ofrece varios controles ActiveX enlazados a datos. En esta parte del curso se describen algunos controles ActiveX enlazados a datos avanzados. Usar el Control DBGrid El control de cuadrcula enlazada a datos (control DBGrid) permite que los usuarios de su aplicacin de base de datos trabajen con varios registros a la vez. Mostrar mltiples registros DBGrid es un control ActiveX que muestra una serie de filas y columnas que representan registros y campos de un objeto Recordset. Cuando asigne a la propiedad DataSource del control DBGrid un control Data, el control DBGrid se llenar automticamente de datos y se establecern automticamente sus encabezados de columna a partir del conjunto de registros del control Data. Al contrario que la mayora de los controles enlazados a datos, el control DBGrid le permite ver y modificar varios registros simultneamente. En la siguiente ilustracin se muestra un formulario que utiliza un control DBGrid para presentar registros procedentes de la base de datos Neptuno.

Academia de Computacin

48

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Para aadir el control DBGrid a un proyecto

1. Hacer clic en la orden Componentes del men Proyecto. 2. En la ficha Controles, seleccionar Microsoft Data Bound Grid Control, y luego hacer clic en Aceptar. El control DBGrid tiene varias propiedades que especifican cmo se comporta el control. Por ejemplo, si asigna a la propiedad AllowUpdate el valor True, un usuario puede modificar los datos del control. Tambin puede establecer propiedades para columnas individuales del control DBGrid. Puede cambiar el ttulo de la columna, cambiar el campo de datos al que se enlaza la columna, agregar valores predeterminados, etc. Para establecer propiedades de columnas 1. Oprima el botn secundario del ratn sobre el control DBGrid. 2. Haga clic en la orden Propiedades. 3. Haga clic en Columnas. Puede cambiar el ttulo de la columna, cambiar el campo de datos al que se enlaza la columna, agregar valores predeterminados, etc. Para establecer los encabezados de las columnas del control DBGrid, luego de haberlo enlazado a un control Data, oprima el botn secundario del ratn sobre el control en tiempo de diseo, y luego haga clic en la orden Recuperar campos. Obtener y establecer el texto de la celda actual Utilice la coleccin Columns del control DBGrid para recuperar el texto de la celda seleccionada actualmente en tiempo de ejecucin. Por ejemplo: MsgBox DBGrid1.Columns(DBGrid1.Col).Text Para cambiar la informacin del control DBGrid, cambie el objeto Recordset asociado. Por ejemplo, si el control DBGrid est enlazado al recordset Data1, se ejecutara el siguiente cdigo: Data1.Recordset.Edit Data1.Recordset.Fields("NombreProducto") = "Disco duro" Data1.Recordset.Update Usar el evento BeforeUpdate El evento BeforeUpdate tiene lugar antes de que se muevan datos desde un control DBGrid al bfer de copia del control Data. Puede validar los datos y cancelar la actualizacin si es necesario. Usar el Control MSFlexGrid El control MSFlexGrid proporciona caractersticas avanzadas para la presentacin de datos en una cuadrcula. Es similar al control DBGrid aunque, cuando se enlaza a un control Data, el control MSFlexGrid muestra datos de slo lectura. Puede utilizar el control MSFlexGrid para combinar filas o columnas de informacin y as agrupar la informacin relacionada.
Academia de Computacin

49

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

En la siguiente ilustracin se muestran registros agrupados por Id. de pedido en la tabla Detalles de pedidos.

Para combinar celdas

1. Establezca la propiedad MergeCells a un valor diferente a cero. 2. Establezca las propiedades arreglo MergeRow() y MergeCol() a True para las filas y columnas que desee combinar. Por ejemplo, para combinar las celdas en la tabla Detalles de pedidos, aada el siguiente cdigo al formulario donde se encuentra el control MSFlexGrid. Private Sub Form_Load() MSFlexGrid1.MergeCells = flexMergeFree MSFlexGrid1.MergeCol(0) = True End Sub Usar el Control DBCombo Puede utilizar el control de cuadro de lista enlazado a datos (DBList) o el cuadro combinado enlazado a datos (DBCombo) para presentar automticamente una lista de valores de un Recordset. Esto resulta til para proporcionar valores vlidos al usuario. Obtener informacin de una tabla de bsqueda Tambin puede utilizar estos controles en aplicaciones de "tabla de bsqueda". Por ejemplo, puede presentar una lista de nombres de categora vlidos (en vez de Id.) y utilizar el Id. correspondiente cuando el usuario agregue o modifique datos. La ilustracin siguiente muestra un formulario que utiliza el control DBCombo para presentar nombres de categoras de la tabla Productos.

Academia de Computacin

50

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Establecer propiedades del control DBCombo Para determinar el valor que se presenta en el control DBCombo, asigne a la propiedad RowSource un nombre de control Data y a la propiedad ListField un nombre de campo. El cuadro combinado enlazado a datos contiene todos los valores de ese campo. Para determinar qu campo de la base de datos se actualiza cuando un usuario cambia un valor, establezca las propiedades DataSource y DataField. Para establecer la relacin entre la tabla que contiene los valores de bsqueda y la tabla que se est modificando realmente, establezca la propiedad BoundColumn. 4.2. Gestores de bases de datos Como se menciono en la primera parte de este documento, un DBMS es un conjunto de programas que se encargan de manejar la creacin y todos los accesos a las bases de datos, los DBMS mas comunes son Oracle, SqlServer, Informix, Sysbase, Los gestores de bases de datos estndar: Microsoft Access, Oracle, Microsoft SQL Server, IBM DB2 e Informix, entre otros. 4.3. Acceso a bases de datos Las tecnologas para el Acceso de Datos se describen a continuacin: DAO (Data Access Objects) Es una interfase de aplicacin de programa (API) disponibles en Microsoft's Visual Basic que permite al programador solicitar acceso a una base de datos de Microsoft Access. DAO fue la primera interfase orientada a objetos de Microsoft's para bases de datos. Los objetos DAO usan en el encapsulamiento de las funciones del motor Jet de Access's por medio del cual podramos tener acceso a otras bases de datos basadas en Lenguaje de Consulta Estructurado (SQL), Permite manipular directamente bases de datos nativas del motor Jet de Access (archivos .MDB), as como los denominados ISAM (Fox, dBase, Excel, Btrieve, Paradox y Texto). Adems, si se dispone del driver ODBC apropiado, a travs del Jet se puede acceder a cualquier fuente de datos ODBC (SQL Server, Oracle, Informix, etc.), utilizando el mismo conjunto de objetos. RDO (Remote Data Object) es un elemento de la API (Aplication Program Interface) de Microsoft que le permite escribir aplicaciones para Windows que accesan bases de datos relacionales provenientes tanto de Microsoft como de cualquier otro proveedor RDO usa instrucciones contenidas en un DAO (Data Acces Object) para alcanzar los datos de una Base de Datos relacional. ADO puede acceder a Bases de Datos relacionales y no-relacionales de una manera fcil y rpida. RDO (Remote Data Object) es un modelo de objetos incorporado en las versiones empresariales de Visual Basic 4.0 y 5.0. RDO permite a las aplicaciones Visual Basic acceder a fuentes de datos ODBC sin utilizar un procesador local de consultas (dicho de otro modo, RDO "se salta" el Jet de Access para acceder a datos ODBC). RDO dispone de un conjunto de objetos similar al de DAO, pero mucho ms cercano a la capa de ODBC y al motor de datos del servidor. ADO(Activex Data Object) es un elemento de la API (Application Program Interface)de Microsoft que le permite escribir aplicaciones para Windows que accedan bases de datos relacionales y no-relacionales provenientes tanto de Microsoft como de cualquier otro proveedor. Una aplicacin para ADO es por ejemplo cuando se tiene una Sitio WEB y se desea tener una base de datos que los usuarios puedan examinar y actualizar. Si la pgina posee una archivo de tipo IBM DB2 o de Oracle entonces podremos escribir un programa coninstrucciones en ADO dentro del archivo HTML que lo identifique como un ASP (Active Server Page). Cuando el usuario haga la peticin de la pgina ASP, sta devolver los datos
Academia de Computacin

51

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

pedidos por el usuario por medio de las Instrucciones en ADO. Al igual que otras interfaces de Microsoft, ADO esta orientado a objetos y es parte de una estrategia de Microsoft llamado UDA(Universal Data Access) que consiste en intentar crear un puente entre los diferentes formatos de archivos de los Sistemas Manejadores de Bases de Datos para lograr una estandarizacin de la informacin y a su vez crear nuevos drivers para los formatos de archivos venideros. 4.3.1. Comunicacin con manejadores de bases de datos Normalmente, los datos almacenados en una base de datos estn en un formato propio, al igual que el texto del archivo de un procesador de textos La aplicacin Web se encuentra con el mismo problema que con el Bloc de notas o cualquier otra aplicacin que trata de acceder a datos cuyo formato es desconocido: la aplicacin no puede descifrar los datos. Hace falta una interfaz de software entre la aplicacin Web y la base de datos que haga posible el dilogo entre ambas. Hay tres interfaces comunes que permiten a las aplicaciones comunicarse con las bases de datos. La primera se llama Open Database Connectivity u ODBC; la segunda, OLE DB (vinculacin e incrustacin de objetos) y la tercera se llama Java Database Connectivity o JDBC. La funcin de estas interfaces es actuar como intrpretes. Por ejemplo, cuando en las Naciones Unidas se realiza un discurso en ingls, un intrprete lo traduce al francs y otro lo traduce al alemn para los representantes que hablan estos idiomas. De manera similar, se usa una interfaz para las aplicaciones que hablan OLE DB, otra interfaz para las aplicaciones Web que hablan ODBC y una tercera interfaz para aquellas aplicaciones que hablan JDBC. Las aplicaciones de ColdFusion y JSP son comunicadores de JDBC: ASP se comunica con ODBC (a travs de un intrprete OLE DB/ODBC incorporado) y las aplicaciones de ASP.NET se comunican con OLE DB. Las interfaces ODBC, OLE DB y JDBC estn incluidas como controladores de bases de datos (o "proveedores de datos" en OLE DB), que no son ms que elementos de software. Para comunicarse con la base de datos, la aplicacin Web utiliza un controlador, que acta como intermediario. Los controladores de bases de datos son especficos de cada base de datos. Puede usar, por ejemplo, los controladores de Microsoft Access, SQL Server y dBase. De manera similar, puede usar proveedores de OLE DB como el proveedor OLE DB para SQL Server. Su eleccin depender de su base de datos. 4.3.2. SQL Desde hace aos, en la gestin de bases de datos existe un lenguaje prcticamente estndar conocido como SQL, que puede ser usado para realizar cualquier tipo de consulta, extraccin y modificacin de los datos de una base. SQL son las siglas de structured Query Languaje, que podramos traducir como Lenguaje estructurado de consulta. En este lenguaje existen diferencias sintcticas segn el motor de datos que se use: ORACLE, SQLServer o el motor JET de Microsoft ACCES. Aqu veremos SQL implementado con Visual Basic, para usar con los datos de una en base de datos *.mdb de ACCES. El lenguaje SQL est compuesto por comandos, clusulas, operadores y funciones de agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos.

Academia de Computacin

52

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Comandos Comando
CREATE DROP ALTER SELECT INSERT UPDATE DELETE

Descripcin
Utilizado para crear nuevas tablas, campos e ndices Empleado para eliminar tablas e ndices Utilizado para modificar las tablas agregando campos o cambiando la definicin de los campos. Utilizado para consultar registros de la base de datos que satisfagan un criterio determinado Utilizado para cargar lotes de datos en la base de datos en una nica operacin. Utilizado para modificar los valores de los campos y registros especificados Utilizado para eliminar registros de una tabla de una base de datos

Clusulas ms usadas en consultas SQL


Clusula FROM JOIN

Descripcin Indica el nombre de la tabla en la que basamos la consulta.


FROM Tabla

Relaciona ms de una tabla en la consulta, se pueden usar segn las necesidades las clausulas INNER JOIN, LEFT JOIN o RIGHT JOIN; INNER JOIN muestra solo los registros que tengan datos relacionados en ambas tablas. LEFT JOIN muestra todos los datos de la tabla base, tenga o no registros relacionados, y los datos de la tabla relacionada que tengan relacin en la tabla base. RIGTH JOIN Muestra solo los registros de la tabla base que tengan registros relacionados y todos los de la tabla relacionada tengan o no correspondencia con la tabla base.
Tabla [INNER | LEFT | RIGHT] JOIN Tabla_Relacionada ON Tabla.Campo_n = Tabla_Relacionada.Campo_n

WHERE ORDER BY Ejemplo:

Filtra los registros segn el criterio definido en esta clusula.


WHERE Tabla.Campo_1 = Valor_1 And Tabla.Campo_2 = Valor_2

Ordena los registros devueltos por la consulta, segn los criterios usados.
ORDER BY Tabla.Campo_1, Tabla.Campo_2, Tabla.Campo_n, ....

SELECT Campo_1, Campo_2, Campo_n FROM Tabla INNER JOIN Tabla_Relacionada ON Tabla.Campo_n = Tabla_Relacionada.Campo_n WHERE Tabla.Campo_1 = Valor_1 And Tabla.Campo_2 = Valor_2 ORDER BY Tabla.Campo_1, Tabla.Campo_2

Consultas de accin
Consulta DELETE

Descripcin Usado en el lugar de la clusula SELECT borrar los registros que resulten de la consulta realizada.
DELETE * From Nombre_Tabla WHERE Nombre_Tabla.Nombre = "Pepe"

INSERT INTO VALUES

Inserta un nuevo registro con sus valores en la tabla y campos especificados. INSERT INTO Nombre_Tabla ([Campo_1], [Campo_2], [Campo_n], VALUES ([Valor_1], [Valor_2], [Valor_n])

Academia de Computacin

53

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

4.3.2.1. Seleccionar datos Ya que el aprendizaje de SQL requiere un estudio en profundidad que escapa a los propsitos de este curso, se pretende que se conozcan las acciones de las principales instrucciones SQL. Una consulta de seleccin pide a la base de datos un conjunto de registros que satisfagan criterios especficos y recibe un Recordset; en cambio, una consulta de accin ejecuta una tarea que se especifica sobre un conjunto de registros que satisfacen el criterio especificado. En ambos casos se usan instrucciones SQL para definir los registros que se quieren recuperar o con los que quiere actuar, y cmo se les quiere ordenar y agrupar. Este es un ejemplo de una consulta de seleccin que podra usarse con una base de datos Contactos: SELECT cp, Contacto, Telefono FROM Contactos WHERE Estado = DF ORDER BY cp 4.3.2.2. Aadir registros Mtodo AddNew Crea un nuevo registro para un objeto Recordset de tipo Table Sintaxis: Recordset.AddNew Del ejemplo de clase: Data1.Recordset.AddNew 4.3.2.3. Borrar registros
Mtodo Delete Elimina el registro activo de un objeto Recordset de tipo Table.

Sintaxis: Recordset.Delete
coleccin.Delete nombreobjeto La sintaxis del mtodo Delete utiliza los siguientes argumentos.

Argumentos recordset coleccin

Descripcin Una variable de objeto que identifica un objeto Recordset de tipo Table abierto, que contiene el registro que desea eliminar. Una variable de objeto que representa una coleccin de la que se elimina nombreobjeto.

nombreobjeto Un tipo de datos String que es el valor de la propiedad Name de un objeto existente en una coleccin. Del ejemplo de clase: Data1.Recordset.Delete 4.3.2.4. Actualizar registros

Academia de Computacin

54

Programacin

Universidad Autnoma de Nayarit Metodo Refresh

Area de Ciencias Bsicas e Ingenieras

Actualiza los objetos de una coleccin para reflejar los objetos disponibles y especficos del proveedor. Sintaxis collection.Refresh

Del ejemplo de clase Data1.Refresh 4.3.2.5. Crear tablas Comando Create table Crea una tabla que tiene los campos especificados 4.3.2.6. Eliminar tablas
Mtodo Delete Elimina el registro activo de un objeto Recordset de tipo Table.

Sintaxis: Recordset.Delete
coleccin.Delete nombreobjeto

Del ejemplo de clase: Data1.Recordset.Delete

Academia de Computacin

55

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

5. INFORMES 5.1. Diseo de informes Reportes (Uso del Data Report) Acerca del Diseador de entorno de datos (DataEnvironment) El Diseador de entorno de datos proporciona un entorno interactivo en tiempo de diseo para crear por programa accesos a datos en tiempo de ejecucin. En tiempo de diseo se establecen los valores de las propiedades de los objetos Connection y Command, se escribe cdigo para responder a los eventos de la interfaz de objetos de datos de ActiveX (ADO), se ejecutan comandos y se crean campos agregados y jerarquas. Tambin es posible arrastrar y colocar objetos Data_Environment en formularios o informes para crear controles enlazados a datos. Con el Diseador de entorno de datos puede llevar a cabo las tareas siguientes: Agregar un Diseador de entorno de datos a un proyecto de Visual Basic. Crear objetos Connection. Crear objetos Command basados en procedimientos almacenados, tablas, vistas, sinnimos e instrucciones SQL. Crear jerarquas de objetos Command basadas en una agrupacin de objetos Command, o asociar entre s uno o varios objetos Command. Escribir y ejecutar cdigo para los objetos Connection y Recordset. Arrastrar y colocar campos de un objeto Command del Diseador de entorno de datos a un formulario de Visual Basic o al Diseador de informe de datos.

Disear un objeto DataEnvironment En tiempo de diseo, es posible usar el Diseador de entorno de datos para crear un objeto DataEnvironment. El objeto DataEnvironment puede incluir objetos Connection y Command, jerarquas (relaciones entre objetos Command), agrupaciones y campos agregados. Antes de disear el objeto DataEnvironment debe determinar la informacin que desea presentar, identificar las bases de datos que contienen la informacin y determinar el objetivo de tiempo de ejecucin (por ejemplo, crear un informe de datos). Antes de obtener acceso al Diseador de entorno de datos debe hacer referencia al mismo en Visual Basic. Para hacer referencia al Diseador de entorno de datos 1. En el men Proyecto, haga clic en Referencias. 2. En el cuadro de dilogo Referencias, seleccione Data Environment 1.0 y, a continuacin, haga clic en Aceptar. Para agregar un objeto del Diseador de entorno de datos a un nuevo proyecto de Visual Basic 1. En la ficha Nuevo del cuadro de dilogo Nuevo proyecto, elija proyecto EXE estndar y, a continuacin, haga clic en Abrir. 2. En el men Proyecto, elija Agregar entorno de datos.
Academia de Computacin

56

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Visual Basic agrega el Diseador de entorno de datos al proyecto, muestra la ventana del Diseador de entorno de datos, y agrega un objeto Connection al entorno de datos. Despus de haber agregado un Diseador de entorno de datos al proyecto, puede crear un objeto Connection; vea el procedimiento en Objetos Connection. Despus de crear un objeto Connection, puede agregar objetos Command al mismo; vea el procedimiento en Objetos Command Objetos Connection Para tener acceso a los datos mediante el entorno de datos, debe crear un objeto Connection. Por tanto, cada entorno de datos debera incluir al menos un objeto Connection. Un objeto Connection representa una conexin a una base de datos remota que se utiliza como un origen de datos. Cuando ha agregado un entorno de datos al proyecto de Visual Basic, el Diseador de entorno de datos incluye automticamente una nueva conexin, denominada Connection1. En tiempo de diseo, el entorno de datos abre la conexin y obtiene metadatos relativos a la conexin que incluyen los nombres de objetos, las estructuras de tablas y los parmetros de procedimiento de la base de datos. Nota Si se activa la opcin Mostrar propiedades inmediatamente despus de crear el objeto del cuadro de dilogo Opciones, se mostrar el cuadro de dilogo Propiedades de vnculos de datos cuando agregue un entorno de datos a su proyecto. Esta opcin no est seleccionada de forma predeterminada. Crear un objeto Connection La funcin Agregar conexin est disponible en todo momento, independientemente de si existen otros objetos. Para crear una conexin a una base de datos Haga clic en Agregar conexin en la barra de herramientas del Diseador de entorno de datos, o bien, haga clic con el botn secundario del mouse (ratn) en el Diseador de entorno de datos y seleccione Agregar conexin en el men emergente. Cuando ha agregado un objeto Connection, se actualiza el entorno de datos para mostrar el nuevo objeto Connection. El nombre predeterminado de este objeto es "Connection" seguido de un nmero, como Connection1. Utilice el procedimiento siguiente para especificar las propiedades del objeto Connection. Para establecer el nombre de conexin y el origen de datos 1. En la ventana de Propiedades, cambie el nombre predeterminado por un nombre ms descriptivo de la base de datos de origen. Por ejemplo, puede cambiar el nombre Connection1 por "Northwind" si el origen de datos es la base de datos Northwind. 2. Haga clic en el objeto Connection y elija Propiedades para tener acceso al cuadro de dilogo Propiedades de vnculos de datos. 3. En el cuadro de dilogo Propiedades de vnculos de datos, especifique la informacin de conexin en las fichas Conexin y Proveedor. Suele ser una base de datos que contiene datos o procedimientos almacenados. Slo puede seleccionar un origen para cada objeto Connection. 4. Nota Independientemente del tipo de origen de datos seleccionado, el entorno de datos permite recuperar todos los datos mediante las interfaces ADO y OLE DB.
Academia de Computacin

57

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

5. Haga clic en Aceptar para aplicar las propiedades y cerrar el cuadro de dilogo Propiedades de Connection. Establecer la informacin de inicio La informacin de inicio slo es necesaria si el acceso a la base de datos mediante el objeto Connection requiere informacin de autenticacin. Puede especificar que se utilicen conjuntos diferentes de informacin de inicio en tiempo de diseo y en tiempo de ejecucin. Por ejemplo, podra desarrollar una aplicacin que utilice una identificacin y contrasea de usuario administrador del sistema pero que proporcione al mismo tiempo una identificacin de usuario invitado general cuando se ejecuta la aplicacin. Nota Cualquier informacin de inicio especificada en la ficha Propiedades de vnculos de datos se sobrescribe con la informacin de inicio de sesin especificada en la ventana de Propiedades de Visual Basic. Para especificar la informacin de inicio 1. Si es necesario, en la ventana de Propiedades de Visual Basic, especifique la identificacin y contrasea de usuario que debe usarse en tiempo de diseo y tiempo de ejecucin. Es posible especificar tambin el comportamiento del indicador. 2. Establezca DesignSaveAuthentication a True si desea que la autenticacin especificada persista en tiempo de diseo. Esta informacin no se escribe en el archivo ejecutable o la biblioteca de vnculos dinmicos (DLL). Si el valor de esta opcin es False, cualquier informacin en DesignUserName y DesignPassword se perder una vez que cierre y vuelva a abrir el proyecto que genere. 3. Establezca RunSaveAuthentication al valor True si desea usar la autenticacin especificada en tiempo de ejecucin. La informacin de autenticacin se almacena en las propiedades de la clase y persiste en el archivo ejecutable o DLL que genera. Si el valor de esta opcin es False, cualquier informacin en RunUserName y RunPassword se perder una vez que cierre y vuelva a abrir el proyecto. Nota Por seguridad, debido a que la contrasea no est codificada, no debe especificar que la contrasea persista en tiempo de ejecucin ni en tiempo de diseo. Objetos Command Los objetos Command definen informacin de detalle especfica acerca de cmo deben recuperarse los datos mediante una conexin basada en datos. Es posible basar los objetos Command en un objeto de base de datos (como una tabla, una vista, un procedimiento almacenado o un sinnimo) o en una consulta SQL (Structured Query Language). Asimismo, puede crear relaciones entre objetos Command para obtener un conjunto de datos relacionados en forma de jerarqua. Nota Para que un objeto Command sea vlido, debe estar asociado con un objeto Connection. Si un objeto Command devuelve datos, se considera "de devolucin de conjunto de registros" y es posible tener acceso a sus resultados mediante un objeto Recordset disponible en el objeto DataEnvironment. Sin embargo, si un objeto Command no devuelve datos (por ejemplo, procedimientos almacenados o texto SQL que realice una actualizacin), se considera de "nodevolucin de conjunto de registros". El Diseador de entorno de datos identifica automticamente si el objeto Command es de devolucin de conjunto de registros. Puede suplantar este valor mediante la
Academia de Computacin

58

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

casilla de verificacin Devolver RecordSet de la ficha Avanzadas del cuadro de dilogo Propiedades de Command. En tiempo de ejecucin, la forma de obtener acceso al objeto Command depende de si se trata de un objeto Command de devolucin de conjunto de registros. Si se trata de un objeto Command de devolucin de un conjunto de registros, puede obtener acceso al objeto Command como una propiedad o como un mtodo del objeto DataEnvironment. Si se trata de un objeto de no-devolucin de conjunto de registros, slo se puede tener acceso al objeto Command como un mtodo. Vea Usar un entorno de datos con su aplicacin para obtener ms informacin. Crear un objeto Command La funcin Agregar comando est disponible en todo momento y es independiente de la existencia de otros objetos. Sin embargo, un objeto Command que no est asociado con un objeto Connection no es vlido. La propiedad ActiveConnection del objeto Command est establecida en el objeto Connection si la conexin puede identificarse mediante el enfoque actual durante el procedimiento de agregar. Si no se identifica un objeto Connection, el objeto Command no es vlido mientras no lo asocie con una conexin. Para agregar un objeto Command Haga clic en Agregar comando en la barra de herramientas del Diseador de entorno de datos, o bien, haga clic con el botn secundario del mouse en un objeto Connection o en el Diseador de entorno de datos, y elija la opcin Agregar comando del men emergente. Despus de agregar un objeto Command, la vista esquema del entorno de datos presenta el nuevo objeto Command. El nombre predeterminado del objeto es "Command", seguido de un nmero, como Command1. Utilice el procedimiento siguiente para especificar las propiedades del objeto Command. Para especificar las propiedades del objeto Command 1. Haga clic con el botn secundario del mouse en el objeto Connection y elija Propiedades para tener acceso al cuadro de dilogo Propiedades de Command. 2. Haga clic en la ficha General, y establezca los valores siguientes: 3.
Elemento Nombre comando de Propsito Cambie el valor predeterminado de Nombre de comando por un nombre ms descriptivo del objeto de base de datos. Por ejemplo, podra modificar el ttulo Command1 por "Clientes" si el objeto Command se basa en una tabla llamada "Clientes". Si cre el objeto Command a partir del men contextual del objeto Connection, se establece automticamente el nombre del objeto Connection. No obstante, es posible cambiar esta conexin. Nota Para que sea vlido, cada objeto Command debe estar asociado con un objeto Connection.

Conexin

Academia de Computacin

59

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Objeto de base Seleccione el tipo de base de datos en la lista desplegable. Puede tratarse de un de datos procedimiento almacenado, un sinnimo, una tabla o una vista. Nombre objeto O bien Instruccin SQL Si selecciona esta opcin como el origen de datos, escriba una consulta SQL vlida para la base de datos en el cuadro Instruccin SQL, o bien, para generar la consulta, haga clic en SQL Builder para iniciar el diseador de consultas. del Seleccione un nombre de objeto en la lista desplegable. Los objetos mostrados provienen de la conexin y coinciden con el tipo del Objeto de base de datos seleccionado.

Si el objeto Command se basa en una consulta con parmetros o en un procedimiento almacenado, puede tener una coleccin de parmetros. Para establecer las propiedades de parmetro, haga clic en la ficha Parmetros del cuadro de dilogo Propiedades de Command. 4. Utilice las fichas Relacin, Agrupacin y Campos agregados para definir relaciones y modelar los datos incluidos en el recordset. 5. Haga clic en la ficha Avanzadas del cuadro de dilogo Propiedades de Command para establecer las propiedades que cambian la forma en que se obtienen o manipulan los datos en tiempo de ejecucin. En esta ficha, establezca las propiedades avanzadas que el control de entorno de datos proporciona sobre las propiedades del objeto Command y el objeto Recordset resultante. 6. Haga clic en Aceptar para aplicar las propiedades al nuevo objeto Command y cerrar el cuadro de dilogo. Si se cre correctamente el objeto Command de devolucin de conjunto de registros y la opcin Mostrar campos est activada en el cuadro de dilogo Opciones, puede hacer clic en el mecanismo de expansin (+) bitmap de la vista esquema del diseador de entorno de datos para mostrar una lista de campos. Si no se ven campos, puede deberse a un objeto Recordset vaco, un objeto Command no vlido o una conexin no vlida. Personalizar los objetos Parameter de un objeto Command Si un objeto Command se basa en una consulta con parmetros o en un procedimiento almacenado con parmetros, el objeto Command posee una coleccin Parameters. Puede personalizar los objetos Parameter incluidos en la coleccin si cambia el tipo de datos o les asigna un nombre ms descriptivo. Cambiar las propiedades de los objetos Parameter asociados El procedimiento siguiente describe cmo puede cambiar las propiedades de los objetos Parameter asociados a un objeto Command. Para cambiar las propiedades del objeto Parameter asociado a un objeto Command 1. Haga clic con el botn secundario del mouse en el objeto Command que desee personalizar y, a continuacin, seleccione Propiedades en el men emergente. 2. En la ficha Parmetros, seleccione un objeto Parameter en el cuadro de lista Parmetro y, a continuacin, establezca las propiedades siguientes:

Academia de Computacin

60

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Elemento Name Direction DataType Precision Scale Size

Propsito Proporcione un nombre nico y descriptivo para el objeto Parameter seleccionado. Especifique si se trata de un parmetro de entrada o de salida, o ambos a la vez, o si el parmetro corresponde al valor devuelto por el procedimiento. Especifique el tipo de datos al que se convierte el objeto Parameter. Especifique la precisin o nmero mximo de dgitos. Especifique el tamao mximo, en bytes. Especifique el tamao mximo en bytes.

Especifica el tipo de datos utilizado cuando la aplicacin host hace referencia a este Host Data objeto Parameter. Cambiar este valor afecta al tipo de datos utilizado para generar Type la informacin de la biblioteca de tipos correspondiente al host. Especifica si se requiere un valor del parmetro cuando se ejecuta el objeto Command. Nota Si un parmetro requerido no est establecido cuando se ejecuta el objeto Command, el comando fallar. Especifica el valor predeterminado que debe usarse en tiempo de ejecucin (a menos que se proporcione un valor por programa) y, si corresponde, en tiempo de diseo si el objeto Command debe ejecutarse para obtener la informacin del campo.

Required

Value

1. Haga clic en Aceptar para aplicar las propiedades del parmetro al objeto Command seleccionado y salir del cuadro de dilogo. DataReport (Objeto) El objeto DataReport es el objeto programable que representa al diseador de informe de datos. Sintaxis DataReport Comentarios El objeto DataReport permite generar informes a partir de los registros de una base de datos. Para usarlo: 1. Configure un origen de datos para tener acceso a una base de datos.
Academia de Computacin

61

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

2. Asigne a la propiedad DataSource del objeto DataReport con el origen de datos. 3. Asigne a la propiedad DataMember del objeto DataReport con un miembro de datos. 4. Haga clic con el botn secundario del mouse (ratn) en el diseador y, a continuacin, haga clic en Obtener estructura. 5. Agregue los controles apropiados a las secciones segn sea necesario. 6. Establezca las propiedades DataMember y DataField de cada control. 7. En tiempo de ejecucin, utilice el mtodo Show para mostrar el diseador de informe de datos. El objeto DataReport sirve para cambiar por programacin la apariencia y el comportamiento del diseador de informe de datos al modificar el diseo de cada objeto Section. El diseador de informe de datos ofrece la posibilidad de exportar los informes mediante el mtodo ExportReport. Este mtodo permite especificar un objeto ExportFormat, dentro de la coleccin ExportFormats, que servir de plantilla para el informe. Partes del informe de datos El Diseador de informe de datos consta de los siguientes objetos: 1. Objeto DataReport. El objeto DataReport, similar a un formulario de Visual Basic, consta de un diseador visual y un mdulo de cdigo. Utilice el diseador para crear el diseo de un informe. Tambin puede agregar cdigo al mdulo de cdigo del diseador para dar formato a los controles o a las secciones contenidas en el diseador por programa. 2. Objeto Section. Cada seccin del Diseador de informe de datos est representada por un objeto Section de una coleccin Sections. En tiempo de diseo, cada seccin est representada por un encabezado en que puede hacer clic para seleccionar la seccin y por un panel de la seccin donde puede colocar controles. Utilice el objeto Section y sus propiedades para volver a configurar dinmicamente un informe antes de generarlo. 3. Controles del informe de datos. Se trata de controles especiales que slo funcionan con el Diseador de informe de datos. (Nota: en el Diseador de informe de datos, no puede emplear los controles intrnsecos de Visual Basic ni los controles ActiveX.) Estos controles se encuentran en el Cuadro de herramientas de Visual Basic, agrupados por separado en una ficha llamada DataReport. Secciones del Diseador de informe de datos El Diseador de informe de datos predeterminado contiene los siguientes objetos Section: Encabezado de informe: contiene el texto que aparece al principio de un informe, como el ttulo del informe y el nombre del autor o de la base de datos. Si desea que el Encabezado de informe aparezca en la primera pgina del informe, establezca su propiedad ForcePageBreak en rptPageBreakAfter. Encabezado de pgina: contiene informacin que se escribe en la parte superior de cada una de las pginas, como el ttulo del informe.

Academia de Computacin

62

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Encabezado y pie de grupo: contiene una seccin que se repite en el informe de datos. A cada encabezado de grupo corresponde un pie de grupo. La pareja de encabezado y pie de grupo est asociada con un nico objeto Command del Diseador de entorno de datos. Detalles: contiene la parte "repetida" ms interior (los registros) del informe. La seccin Detalles est asociada al objeto Command de nivel inferior en una jerarqua de entorno de datos. Pie de pgina: contiene informacin que se escribe en la parte inferior de cada una de las pginas, como el nmero de pgina. Pie de informe: contiene el texto que aparece al final del informe, por ejemplo un resumen o una direccin o nombre de contacto. El pie de informe aparece entre el ltimo encabezado de pgina y el ltimo pie de pgina.

Controles del informe de datos Cuando agrega un nuevo Diseador de informe de datos a un proyecto, los controles siguientes se insertan automticamente en la ficha DataReport del Cuadro de herramientas: Control TextBox (RptTextBox): permite dar formato al texto o asignar un objeto DataFormat. Control Label (RptLabel): permite colocar etiquetas para identificar los campos o las secciones del informe. Control Image (RptImage): permite insertar grficos en el informe. Observe que no es posible enlazar este control con un campo de datos. Control Line (RptLine): permite dibujar reglas en el informe para distinguir mejor las secciones. Control Shape (RptShape): permite insertar rectngulos, tringulos o crculos (y valos) en un informe. Control Function (RptFunction): un cuadro de texto especial que calcula valores a medida que se genera el informe.

Escribir informes con el Diseador de informe de datos de Microsoft El Diseador de informe de datos de Microsoft es un generador de informes de datos verstil con capacidad integrada de creacin de informes jerrquicos por capas. Puede usarse con un origen de datos como el Diseador de entorno de datos para crear informes con datos procedentes de muchas tablas relacionales diferentes. Permite imprimir los informes y exportarlos a archivos con formato HTML o de texto. Posibles usos Crear automticamente informes que se exportan en formato HTML para su distribucin instantnea a travs de Internet. Crear informes diarios con las sumas de transacciones efectuadas cada da.

Caractersticas del Diseador de informe de datos El Diseador de informe de datos tiene varias caractersticas: 1. Funcionalidad arrastrar y colocar aplicada a campos. Esta funcionalidad permite arrastrar campos del Diseador de entorno de datos de Microsoft al Diseador de informe de datos. Cuando utiliza esta tcnica, Visual Basic crea automticamente un control TextBox en el
Academia de Computacin

63

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

informe de datos y establece las propiedades DataMember y DataField del campo que ha colocado. Tambin puede arrastrar un objeto Command del Diseador de entorno de datos al Diseador de informe de datos. En este caso, se crear en el informe de datos un control cuadro de texto por cada uno de los campos del objeto Command y se asignarn valores apropiados a las propiedades DataMember y DataField de cada cuadro de texto. 2. Controles del Cuadro de herramientas. El Diseador de informe de datos posee un conjunto de controles propios. Cuando agrega un Diseador de informe de datos al proyecto, los controles se crean automticamente en una ficha llamada DataReport del Cuadro de herramientas. Muchos de estos controles tienen un funcionamiento idntico a los controles intrnsecos de Visual Basic e incluyen un control Label, Shape, Image, TextBox, y Line. El sexto control (el control Function) genera automticamente informacin de uno de los cuatro tipos siguientes: Sum (suma), Average (promedio), Minimum (mnimo) o Maximum (mximo). Para obtener ms informacin acerca del control Function, vea "Agregar un control Function al informe de datos". 3. Vista preliminar. El mtodo Show permite mostrar una vista preliminar del informe. El informe de datos se genera y se muestra en su propia ventana. Nota Es necesario tener una impresora instalada en el equipo para poder usar el modo de vista preliminar. 4. Impresin de informes. Es posible llamar al mtodo PrintReport desde un programa para imprimir un informe. Cuando el informe de datos est en el modo de vista preliminar, los usuarios tambin pueden imprimirlo si hacen clic en el icono de impresora de la barra de herramientas. Nota Es necesario tener una impresora instalada en el equipo para poder imprimir un informe. 5. Exportacin de archivos. El mtodo ExportReport permite exportar la informacin del informe de datos. Los formatos de exportacin incluyen HTML y texto. 6. Exportacin de plantillas. Es posible crear una coleccin de archivos de plantilla para usarlos con el mtodo ExportReport. Esto es conveniente para exportar informes a varios formatos, cada uno ajustado al tipo de informe. 7. Operacin asncrona. Los mtodos PrintReport y ExportReports del objeto DataReport son operaciones asncronas. El evento ProcessingTimeout permite supervisar el estado de cada una de estas operaciones y cancelarlas si llevan demasiado tiempo. Crear un informe de datos sencillo Este tema muestra cmo puede crear un informe de datos sencillo mediante un Diseador de entorno de datos utilizado como un origen de datos. El Diseador de entorno de datos emplea la base de datos NorthWind incluida con Visual Basic para crear un sencillo cursor jerrquico. El cursor contiene dos tablas, Clientes y Pedidos, y ambas estn vinculadas mediante el campo IdCliente. El informe terminado es similar a la siguiente figura. Informe de datos sencillo: Fechas de los pedidos de clientes Antes de empezar el procedimiento paso a paso, compruebe que la base de datos Northwind (Nwind.mdb) est presente en su equipo. Si no est, copie el archivo del CD de Visual Basic al disco duro.
Academia de Computacin

64

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Para insertar un cursor jerrquico sencillo en el Diseador de entorno de datos Cree un nuevo proyecto Standard EXE. En el men Proyecto, haga clic en Agregar entorno de datos para agregar un diseador al proyecto. Si el diseador no aparece entre las opciones del men Proyecto, haga clic en Componentes. Haga clic en la ficha Diseadores y en Entorno de datos para agregar el diseador al men. Nota El men Proyecto proporciona la lista de los cuatro primeros tipos de diseadores ActiveX cargados para un proyecto. Si se cargan ms de cuatro diseadores, los siguientes aparecern en el submen Ms diseadores ActiveX del men Proyecto. En el cuadro de dilogo Data Link Properties, haga clic en Microsoft Jet 3.51 OLE DB Provider. Esta seleccin del corrige el proveedor OLE DB para tener acceso a la base de datos Jet. Haga clic en el botn Siguiente para llegar a la ficha Conexin. Haga clic en el botn Examinar () que se encuentra junto al primer cuadro de texto. Utilice el cuadro de dilogo Seleccionar base de datos de Access para desplazarse por el archivo nwind.mdb, que est instalado en el directorio Archivos de programa\Microsoft Visual Studio\Vb98. Haga clic en Aceptar para cerrar este cuadro de dilogo. Haga clic con el botn secundario de mouse (ratn) en el icono Connection1, y elija Cambiar nombre. Cambie el nombre del icono a Northwind. Haga clic con el botn secundario del mouse en el elemento Norhwind y, despus, haga clic en Agregar comando para mostrar el cuadro de dilogo Command1. En el cuadro de dilogo, establezca las propiedades como se indica a continuacin: Propiedad Nombre de comando Conexin Objeto de base de datos Nombre de objeto Valor Clientes Northwind Table Clientes

1. Haga clic en Aceptar para cerrar el cuadro de dilogo. 2. Haga clic con el botn secundario del mouse (ratn) en el comando Clientes y haga clic en Agregar comando secundario para mostrar el cuadro de dilogo Command2. En el cuadro de dilogo, establezca las propiedades como se indica a continuacin: Propiedad Nombre de comando Conexin Objeto de base de datos Nombre de objeto Valor Pedidos Northwind Table Pedidos

Academia de Computacin

65

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Haga clic en la ficha Relacin. La casilla de verificacin Relacionar con un comando primario debera estar activada. El cuadro Primario debera contener Clientes; los cuadros Campos primarios y Campos secundarios y parmetros deberan mostrar IdCliente. Cuando se disean bases de datos relacionales, se suele usar el mismo nombre para los campos que permiten vincularlas. En este caso, los dos campos vinculados se denominan IdCliente. El Diseador de entorno de datos hace coincidir automticamente estos dos campos en el cuadro de dilogo. Haga clic en Agregar. Haga clic en Aceptar para cerrar el cuadro de dilogo. Al hacer clic en el botn Agregar, agrega la relacin al objeto Command. Despus de cerrar el cuadro de dilogo, el Diseador de entorno de datos refleja las relaciones de los dos comandos como una jerarqua. Esta jerarqua se usar para crear el informe de datos. Establezca las propiedades del proyecto y del diseador segn los valores indicados a continuacin y, despus, guarde el proyecto: Objeto Project DataEnvironment Form Propiedad Name Name Name Valor prjNwind deNwind frmShow

Crear el informe de datos Despus de haber creado el Diseador de entorno de datos, puede crear un informe de datos. Debido a que no todos los campos del entorno de datos son siempre tiles en un informe, los siguientes temas muestran cmo puede crear un informe limitado que muestra slo unos pocos campos. Para crear un nuevo informe de datos 1. En el men Proyecto, haga clic en Agregar informe de datos; Visual Basic agregar el informe de datos al proyecto. Si el diseador no aparece en el men Proyecto, haga clic en Componentes. Haga clic en la ficha Diseadores y en Informe de datos para agregar el diseador al men. Nota El men Proyecto proporciona la lista de los cuatro primeros tipos de diseadores ActiveX cargados. Si se cargan ms de cuatro diseadores, los siguientes aparecern en el submen Ms diseadores ActiveX del men Proyecto. 2. Establezca las propiedades del objeto DataReport segn la tabla siguiente: Propiedad Name Caption Valor rptNwind Informe de datos Northwind

3. En la ventana Propiedades, haga clic en DataSource y, despus, en deNwind. A continuacin, haga clic en DataMember y en Clientes. Importante Es necesario abrir el Diseador de entorno de datos antes de establecer la propiedad DataSource con el valor deNwind. Si el diseador est cerrado, presione Ctrl-R para mostrar la ventana Proyecto y haga doble clic en el icono del entorno de datos.

Academia de Computacin

66

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

4. Haga clic con el botn secundario del mouse (ratn) en el Diseador de informe de datos y en Obtener estructura. Acaba de agregar una nueva seccin de grupo al diseador. Cada seccin de grupo posee una correspondencia unvoca con un objeto Command en el entorno de datos; en este caso, la nueva seccin de grupo corresponde al objeto Command denominado Clientes. Observe tambin que al encabezado de grupo corresponde una seccin Pie de grupo. 5. Arrastre el campo NombreCompaa (bajo el comando Clientes) del Diseador de entorno de datos a la seccin Encabezado de grupo (Clientes_Encabezado). La seccin Encabezado de grupo puede contener cualquier campo del comando Clientes, pero para facilitar la demostracin, este ejemplo slo muestra por el momento el nombre Clientes. 6. Elimine el control Label (rptLabel) denominado Label1. Si no desea incluir un control Label con el control TextBox, desactive la opcin Arrastrar y soltar ttulos de campo de la ficha Asignacin de campos del cuadro de dilogo Opciones del Diseador de entorno de datos. 7. Arrastre el campo FechaPedido (bajo el comando Pedidos) del Diseador de entorno de datos a la seccin Detalles de pedidos. Elimine el control Label. La seccin Detalles de pedidos representa la seccin "repetida" ms interior y, por tanto, corresponde el objeto Command de nivel inferior de la jerarqua del entorno de datos: el objeto Command denominado Pedidos. 8. Cambie el tamao de las secciones del Diseador de informe de datos para que sea similar a la figura siguiente:

Es importante que cambie el alto de la seccin Detalles de pedidos para que sea lo ms corta posible, ya que el alto se multiplicar por cada uno de los objetos FechaPedido devueltos por NombreCompaa. Cualquier espacio innecesario por encima o por debajo del cuadro de texto FechaPedido aumentar la cantidad de espacio sin usar en el informe final.
Academia de Computacin

67

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

3. Guarde el proyecto. Vista preliminar del informe de datos con el mtodo Show Ahora que se han creado los objetos del entorno de datos y del informe de datos, casi ha llegado el momento de ejecutar el proyecto. Solamente queda un paso: escribir cdigo para mostrar el informe de datos. Para mostrar el informe de datos en tiempo de ejecucin 1. En la ventana Explorador de proyectos, haga doble clic en el icono frmShow para mostrar el Diseador de formularios. 2. En Cuadro de herramientas, haga clic en la ficha General. Cuando agrega un Diseador de informe de datos al proyecto, sus controles se agregan a la ficha denominada DataReport. Para usar los controles estndar de Visual Basic, debe cambiar a la ficha General. 3. Haga clic en el icono CommandButton y dibuje un botn de comando en el formulario. 4. Establezca las propiedades del control Command1 como se indica en la tabla siguiente: Propiedad Name Caption Private Sub cmdShow_Click() rptNwind.Show End Sub 6. Guarde y ejecute el proyecto. 7. Haga clic en Mostrar informe para mostrar el informe en el modo de vista preliminar. Opcional: configurar el informe de datos como el Objeto inicial: Tambin puede mostrar el informe de datos sin escribir cdigo. 1. En el men Proyecto, haga clic en Propiedades de prjNwind. 2. En el cuadro Objeto inicial, seleccione rptNwind. 3. Guarde y ejecute el proyecto. Nota Si utiliza este mtodo, puede quitar el objeto Form del proyecto. Extender el informe de datos Ahora que dispone de un informe de datos sencillo, es fcil extenderlo y crear una presentacin ms compleja. En el procedimiento siguiente, se extiende primero el entorno de datos con las tablas Detalles de pedidos y Productos. El informe extendido incluye los nombres de los productos ordenados por una fecha especfica y es similar a la figura siguiente.
Academia de Computacin

Valor CmdShow Mostrar informe

5. En el evento Click del botn, pegue el cdigo siguiente.

68

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Informe de datos extendido con detalles sobre los pedidos

Para extender el entorno de datos 4. En el Diseador de entorno de datos, haga clic con el botn secundario del mouse (ratn) en el objeto Command Pedidos. A continuacin, haga clic en Agregar comando secundario. 5. En el cuadro de dilogo Propiedades de Command1, establezca las propiedades siguientes: Propiedad Nombre de comando Conexin Objeto de base de datos Nombre de objeto Valor DetallesPedidos Northwind Table Detalles de pedidos

6. Haga clic en la ficha Relacin. La casilla de verificacin Relacionar con un comando primario debera estar activada. El cuadro Primario debe contener Pedidos; los cuadros Campos

Academia de Computacin

69

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

primarios y Campos secundarios y parmetros deben mostrar IdPedido. Haga clic en el botn Agregar y, a continuacin, en Aceptar para cerrar el cuadro de dilogo. 7. Haga clic con el botn secundario del mouse (ratn) en el objeto Command DetallesPedidos y haga clic en Agregar comando secundario. Establezca las propiedades de la conexin como se indica a continuacin: Propiedad Nombre de comando Conexin Objeto de base de datos Nombre de objeto Valor Productos Northwind Table Productos

8. Haga clic en la ficha Relacin. La casilla de verificacin Relacionar con un comando primario debera estar activada. El cuadro Primario debe contener DetallesPedidos; los cuadros Campos primarios y Campos secundarios y parmetros deben mostrar IdProducto. Haga clic en el botn Agregar y, a continuacin, en Aceptar para cerrar el cuadro de dilogo. Agregar un campo calculado al informe de datos Un campo calculado es un campo cuyo valor se calcula al generar el informe. Por ejemplo, para calcular los impuestos aplicables a un pedido, debe multiplicar el importe total por un porcentaje correspondiente al impuesto local. Como los porcentajes de los impuestos locales varan, no conviene almacenarlos en la base de datos, sino calcular el impuesto en el momento de generar el informe, es decir, con un campo calculado. En este ejemplo el Diseador de informe de datos extendido se modifica de forma que incluya un campo Total que calcule el producto de las cantidades por el precio unitario, es decir: Cantidad * PrecioUnidad. Agregar un campo calculado implica los pasos siguientes: Usar una instruccin SQL en el objeto Command del entorno de datos para crear el campo calculado. Agregar tres controles de cuadro de texto al informe de datos: Cantidad, PrecioUnidad y Total (correspondiente al campo calculado).

El informe de datos modificado tendr la apariencia siguiente.

Academia de Computacin

70

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Para agregar un campo calculado al informe de datos En el Diseador de entorno de datos, haga clic con el botn secundario del mouse (ratn) en el comando DetallesPedidos. A continuacin haga clic en Propiedades para mostrar el cuadro de dilogo Propiedades de DetallesPedidos. En la ficha General, haga clic en el botn Instruccin SQL y escriba la instruccin siguiente en el cuadro: Select IdPedido, IdProducto, PrecioUnidad, Cantidad, (Cantidad * PrecioUnidad) As Total From [Detalles de pedidos] La instruccin SQL multiplica el valor Cantidad por el valor PrecioUnidad y obtiene el valor Total, es decir, el campo calculado. Observe que el nombre de la tabla Detalles de pedidos incluye espacios, por lo que debe escribirse entre corchetes. Haga clic en Aceptar para cerrar el cuadro de dilogo. Arrastre los campos Cantidad, PrecioUnidad y Total (bajo el comando DetallesPedidos) del Diseador de entorno de datos a la seccin Productos_Detalle del Diseador de informe de datos. Elimine los dos controles Label, cambie los valores de la propiedad Caption de los restantes controles Label a * y organice los controles de forma que tengan la apariencia siguiente:

En el Diseador de informe de datos, haga clic en el cuadro de texto PrecioUnidad para seleccionarlo. En la ventana Propiedades, haga doble clic en DataFormat para mostrar el cuadro de dilogo Pginas de propiedades. En el cuadro Tipo de formato, haga clic en Moneda. En el cuadro combinado Smbolo, seleccione la moneda correspondiente a su pas.

Academia de Computacin

71

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Repita los pasos 6 y 7 para cambiar la propiedad DataFormat del cuadro de texto Total a Moneda. Haga clic en el control de cuadro de texto Total para seleccionarlo. En la ventana Propiedades, cambie la propiedad Alignment a 1 rptJustifyRight. Guarde y ejecute el proyecto.

Agregar un control Function al informe de datos El Diseador de informe de datos tiene su propio conjunto de controles. El control Function es el nico que no tiene un equivalente entre los controles intrnsecos de Visual Basic y merece un poco ms de explicacin. El control Function presenta datos calculados en tiempo de ejecucin mediante una funcin integrada, a medida que se genera el informe. La figura siguiente muestra un ejemplo tpico donde se utiliza el control Function para sumar los subtotales de un pedido especfico y mostrar el total correspondiente. Si utiliz una instruccin SQL para crear un campo calculado (en el tema anterior, "Agregar un campo calculado al informe de datos"), puede que se pregunte por qu no se puede usar un control Function para calcular el valor de Cantidad * PrecioUnidad. En pocas palabras, el control Function slo puede calcular los valores cuando los dems registros de una seccin de grupo ya se han procesado. En cambio, una instruccin SQL calcula los valores como parte de los campos de un registro al mismo tiempo que se procesan. Siga estos pasos para agregar un control Function al Diseador de informe de datos: Dibuje un control Function en una seccin Pie de pgina apropiada del Diseador de informe de datos. Establezca las propiedades DataMember y DataField con valores apropiados (un campo numrico de un objeto Command del entorno de datos que desee usar).

Informe de datos con un control Function para presentar Totales

Para agregar un control Function al informe de datos

Academia de Computacin

72

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

1. Haga clic con el puntero del mouse en el pie de grupo denominado Cliente_Pie y arrstrelo a la parte inferior de la ventana para dejar un espacio entre l y el pie de pgina Pedidos_Pie. 2. En el Cuadro de herramientas, haga clic en el control rptFunction. 3. Dibuje el control rptFunction en el espacio comprendido entre los dos pies de pgina. 4. Establezca las propiedades del control rptFunction segn la tabla siguiente: Propiedad DataMember DataField Name Alignment DataFormat Valor DetallesPedidos Total fncTotal 1 rptJustifyRight Currency

La propiedad FunctionType del control determina qu operacin se realizar con los datos encontrados en la propiedad DataField. De forma predeterminada, la propiedad tiene el valor 0-RptFuncSum, para indicar la suma de los datos. Otras funciones incluyen: Average, Minimum, Maximum, Row Count, STDDev (Desviacin estndar) y Value Count. 5. Dibuje un control Line por encima del cuadro de texto Cantidad y un control Label a la izquierda del cuadro de texto. Establezca la propiedad Caption de la etiqueta con el valor Total. 6. Haga clic en el control fncTotal para seleccionarlo. En la ventana Propiedades, haga doble clic en Fuente para mostrar el cuadro de dilogo Fuente. Cambie el Estilo de fuente a Negrita. 7. Repita el paso 6 con el control Label. 8. Coloque los controles en el diseador de forma que tengan la apariencia siguiente:

Academia de Computacin

73

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

9. Guarde y ejecute el proyecto. Aumentar el alcance de la funcin Puede aumentar el alcance de la funcin si coloca el control en un pie de grupo inferior. Por ejemplo, podra conseguir el total general del conjunto de pedidos de cada cliente. Para mostrar el total general de todos los pedidos Dibuje un nuevo control Function en la seccin Cliente_Pie. Alinee el nuevo control con el control Function creado anteriormente. Dibuje un control Label a la izquierda del nuevo control Function. Establezca las propiedades de los controles como se indica en la tabla siguiente: Propiedad Name DataMember DataField Font (Font Style) Alignment Caption Font (Font Style) Alignment Valor fncGrandTotal DetallesPedidos Total Bold 1 rptJustifyRight Total general Bold 1 rptJustifyRight

Control rptFunction rptFunction rptFunction rptFunction rptFunction rptLabel rptLabel rptLabel

El Diseador de informe de datos debera presentarse ahora como en la siguiente figura:

Academia de Computacin

74

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Ejercicios

Guarde y ejecute el proyecto.

Ejercicio N 1 Disear un reporte que muestre la informacin almacenada en la tabla Cursos. El formato del reporte pedido se muestra a continuacin:

Para disear nuestro reporte, lo primero que debemos hacer es conectarnos a la base de datos CursosLibres.MDB. La conexin la haremos efectiva mediante el Data Environment. Luego, aada un Comando y denomnelo CmCurso. Establezca el nombre de la tabla a utilizar, para nuestro caso Curso. El aspecto de la ventana Data Environment deber ser similar a la figura:
Academia de Computacin

75

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Luego, del men Proyecto seleccionar la opcin Agregar Data Report, lo cual permite agregar el diseador de reportes:

En seguida del Data Environment seleccionar cada campo que desee incluir en el reporte y luego arrastre el campo hacia la seccin Detalles del Data Report. El diseador de reportes presenta un conjunto de controles que permiten mejorar la presentacin de nuestro reporte. En seguida ubicar los siguientes controles: 2 etiquetas en la seccin Encabezado de informe 4 etiquetas en la seccin Encabezado de pgina A continuacin proceda a establecer las propiedades segn se indica: Etiqueta1 Nombre Caption Font Etiqueta2 Nombre Caption Font Etiqueta3 Nombre Caption Font Etiqueta4 RptLblCodigo Cdigo: Arial (Negrita 10) RptLblNombre Reporte de Cursos Arial (Negrita Cursiva 16) RptLblVAB Instituto de Educacin Superior Vctor Andrs Belande Arial (Negrita 09)

Academia de Computacin

76

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Nombre Caption Font Etiqueta5 Nombre Caption Font Etiqueta6 Nombre Caption Font

RptLblNombre Nombre: Arial (Negrita 10) RptLblVacantes Vacantes: Arial (Negrita 10) RptLblProfesor Profesor: Arial (Negrita 10)

Para insertar la fecha actual dar un click con el botn derecho del ratn sobre el diseador de reportes en la seccin de Encabezado de informe, del men contextual que se presenta seleccionar la opcin Insertar control, luego Fecha actual (formato corto). En seguida, cambiar las siguientes propiedades: DataReport1 DataMember CmCurso DataSource DeCursosLibres Luego, seleccione del men Proyecto la opcin Propiedades de Proyecto, y en la ficha General del cuadro de dilogo Propiedades del proyecto, establecer DataReport1 como objeto inicial. Haga click en Aceptar y ejecute su aplicacin. Ejercicio N 2 Disear un reporte que permita mostrar un listado de profesores y los cursos que tienen a su cargo. Tener en cuenta que la informacin relacionada con cada profesor debe empezar en una pgina nueva. El formato del reporte pedido se muestra a continuacin:

En esta aplicacin explicaremos como crear grupos de datos. Para ello iniciar un nuevo proyecto. En seguida, conectarse a la base de datos CursosLibres.MDB mediante el Data Environment. Luego,
Academia de Computacin

77

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

aada un Comando y denomnelo CmProfesor. Establezca el nombre de la tabla a utilizar, para nuestro caso Curso. Para realizar el agrupamiento por profesor seleccionar la ficha Agrupar del cuadro de dilogo Propiedades de CmProfesor. A continuacin activar la casilla de verificacin Agrupar comando, luego seleccionar de la lista de campos, el campo por el cual se desea agrupar la informacin, para nuestro caso seleccionar CurProfe y dar un click en el botn > . A continuacin sobre el diseador de reportes dar un click con el botn derecho del ratn y del men emergente que se presenta elegir la opcin Insertar encabezado o pie de grupo. Del objeto DeCursosLibres arrastrar el campo CurProfe de la seccin Campo de resumen en CmProfesor_Grouping al diseador de reportes pero a la seccin Encabezado de grupo. Los dems campos arrastrarlos de la seccin Campos de Detalle en CmProfesor a la seccin Detalle del generador de reportes. Por ltimo proceda a cambiar las siguientes propiedades del objeto DataReport: DataReport1 DataMember DataSource Ejercicio N 3 Desarrollar una aplicacin que permita crear un reporte para mostrar la informacin de la base de datos CursosLibres.MDB. Para tal fin debe preparar un formulario que permita al usuario elegir una tabla, y en seguida se debe generar el reporte correspondiente. Adems el usuario puede obtener una vista preliminar del reporte o una copia impresa. El diseo de la interfaz debe ser similar a la figura que se muestra a continuacin: CmProfesor_Grouping DeCursosLibres

Para desarrollar nuestra aplicacin, proceda a disear los reportes correspondientes segn: Tabla Alumno Curso Laboratorio 1 marco 3 botones de opcin 3 botones de comando
Academia de Computacin

Reporte DataReport1 DataReport2 DataReport3

Luego, ubique los siguientes controles sobre el formulario:

78

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

En seguida proceda a establecer las propiedades segn se indica: Form1 Nombre Caption BorderStyle Frame1 Nombre Caption Option1 Nombre Caption Value Option2 Nombre Caption Value Option3 Nombre Caption Value Command1 Nombre Caption Picture Style Command2 Nombre Caption Picture Style Command3 Nombre Caption CmdSalir Salir Private Sub CmdImprimir_Click()
Academia de Computacin

FrmReporteCursosLibres Cursos Libres 3-Fixed Dialog FraTablas

OptTablaAlumno Alumno True OptTablaCurso Curso False OptTablaLaboratorio Laboratorio False

CmdVistaPrevia VistaPrevia C:\Archivos de programa\Microsoft Visual Studio\Common\Graphics\ Bitmaps\Win95\Explorer.bmp 1-Graphical CmdImprimir Imprimir C:\Archivos de programa\Microsoft Visual Studio\Common\Graphics\ Bitmaps\Win95\Printfld.bmp 1-Graphical

Una vez establecidas las propiedades, proceda a ingresar el siguiente cdigo:

79

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

If OptTablaAlumno.Value Then DataReport1.PrintReport True ElseIf OptTablaCurso.Value Then DataReport2.PrintReport True ElseIf OptTablaLaboratorio.Value Then DataReport2.PrintReport True End If End Sub Private Sub CmdVistaPrevia_Click() If OptTablaAlumno.Value Then DataReport1.Show ElseIf OptTablaCurso.Value Then DataReport2.Show ElseIf OptTablaLaboratorio.Value Then DataReport2.Show End If End Sub Private Sub CmdSalir_Click() Unload Me End Sub Cuando ejecute la aplicacin, al dar un click en el botn Imprimir se visualizar el siguiente cuadro de dilogo, el cual nos permitir confirmar o cancelar la impresin:

Academia de Computacin

80

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

6. Utilizacin de las llamadas al sistema (API) 6.1.1. Conceptos generales API es el acrnimo de Applications Program Interface (Interfaz de Programacin de Aplicaciones) Aunque se pueden definir nuevas funciones API almacenndolas en archivos DLLs o EXEs, Windows prosee una extensa librera de stas. Estas libreras se encuentran en los siguientes archivos: Archivo Funciones que realizan

KERNEL32.EXE Funciones incluidas en el sistema operativo. GDI32.EXE USER32.EXE WINMM.EXE Gestin de pantallas y grficos. Funciones de uso general. Control de dispositivos Multimedia.

Estas funciones son las mismas que utiliza el sistema operativo Windows, por lo que con su uso, podemos ampliar la funcionalidad de V.B. aadindole toda una serie de funciones, con las que podemos manejar nuestro sistema, casi en su totalidad. Un ejemplo del uso de las APIs, es el trabajo con ventanas y aplicaciones desde el corazn del sistema, pudiendo controlar la presentacin de la pantalla, los dispositivos, operaciones internas del sistema, procesos en ejecucin, el registro y un largo etc. Para usar las funciones APIs solo tenemos que declararlas en nuestro proyecto, con indicacin de que archivo contiene la funcin que vayamos a usar, mediante la instruccin 'Declare'. Este tipo de declaraciones es aconsejable hacerlas siempre desde un mdulo *.bas, aunque no es del todo necesario. Declare Function NombreFunc Lib "Librera" [Alias "NombreAlias"] (Lista parmetros) As Tipo NombreFunc: Librera: Nombre de la funcin. Archivo del sistema donde se ubica la funcin.

Alias Opcional, declara la funcin con un nombre diferente del que est declarada "NombreAlias": en el archivo de funciones. Lista parmetros: Parmetros pasados a la funcin, son definidos como en cualquier funcin, estos parmetros pueden ser estructuras de datos y deben declararse en el mismo mdulo donde se declare la funcin. Tipo de datos devueltos por la funcin.

Tipo:

Academia de Computacin

81

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

En la lista de parmetros, pasados en las llamadas a funciones APIs, se pueden usar valores literales, variables, constantes o estructuras de datos. Esquema de la declaracin de constantes: Public Const NombreConstante = ValorAsignado Declaracin de esctructuras: Type MiEstructura Var_1 As Tipo Var_2 As Tipo Var_n As Tipo End Type En una estructura de datos se pueden leer los valores de un campo mediante la notacin (.). ValorVar_1 = MiEstructura.Var_1 Para facilitarnos las cosas V.B. posee una herramienta que nos ayuda a implementar estas funciones en nuestro cdigo, el Visor de API en el men complementos. 6.1.2. Ejemplos Ejemplo N 1 Un programador de aplicaciones Visual Basic, adems de conocer su entorno de trabajo, debe conocer su entorno de programacin, conocido generalmente como Interfaz de Programacin de Aplicaciones para Windows (Windows Application Programming Interface, Windows API). La API de Windows viene a ser un conjunto de funciones desarrolladas en lenguaje C. Sin embargo, muchos programadores de Visual Basic recurren a estas funciones para conseguir hacer lo que es imposible (o muy complicado) desde Visual Basic. Las funciones API de Windows no son nada complicadas como pueden pensar algunos programadores de Visual Basic. Como primer ejercicio vamos a escribir una aplicacin que permita modificar el ttulo de un formulario. En la prctica, siempre se modifican los ttulos del formulario con la propiedad Caption de Visual Basic, pero este ejercicio ofrece una manera sencilla de declarar y llamar a una API de Windows. El primer paso consiste en aadir un mdulo de cdigo al proyecto. En seguida proceda a declarar la funcin en la seccin de declaraciones del mdulo: Public Declare Function SetWindowText Lib user32 _ Alias SetWindowTextA (ByVal hWnd As Long, _ ByVal lpString As String) As Long

Academia de Computacin

82

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Luego, en el formulario ingrese el cdigo que se muestra a continuacin: Private Sub Form_Load() SetWindowText Form1.hWnd, Bienvenidos a la API de Windows End Sub Al ejecutar su aplicacin, su resultado debe ser similar a la siguiente figura:

Ejemplo N 2 Desarrollar una aplicacin que permita reproducir un archivo Wav o Midi. Utilizar la funcin API de Windows mciExecute para lograr el objetivo deseado.

Como se sabe, el lenguaje C diferencia las letras maysculas de las minsculas. Por ello, si Ud. comete un error, por ejemplo utiliza una letra mayscula en lugar de una minscula (o viceversa), la funcin declarada no ser reconocida y obtendr un mensaje de error. Para evitar este tipo de problemas, vamos a utilizar el Visor API de Windows. En seguida, del men Complementos elija la opcin Administrador de Complementos. Del cuadro de dilogo que se presenta cargar la opcin Visor de API de VB 6. Al dar un click en el botn Aceptar, se aadir en el men Complementos la opcin Visor de API.

Academia de Computacin

83

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

En seguida ingrese al Visor de API. Se debe presentar una pantalla similar a la siguiente:

En la pantalla anterior, seleccione el men Archivo y elija la opcin Cargar archivo de texto. En el cuadro de dilogo que se presenta elegir el archivo Win32api.Txt y dar un click en el botn Abrir.

Academia de Computacin

84

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

De la siguiente pantalla Ud. podr seleccionar la funcin que desea, luego active la opcin pblico y dar un click en el botn Agregar para visualizar el cdigo de declaracin de dicha funcin.

En seguida haga click en el botn Copiar y pegue dicho cdigo a su aplicacin. Recordar que la declaracin de la funcin API se debe realizar en un mdulo, por lo tanto debe agregar un nuevo mdulo y pegar el siguiente cdigo: Public Declare Function mciExecute Lib winmm.dll _ (ByVal lpstrCommand As String) As Long
Academia de Computacin

85

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Luego proceda a disear la interfaz de la aplicacin. Para ello ubique los siguientes controles: 1 control Image 2 botones de comando En seguida establezca las propiedades segn se indica a continuacin: Form1 Nombre Caption FrmMultimedia Hacer sonar un fichero Wav o Midi

BorderStyle 3-Fixed Dialog Image1 Picture C:\Archivos de programa\Microsoft Visual Studio\Common\Graphics\Icons\Misc\Mike.ico Stretch Command1 Nombre Caption Command2 Nombre Caption CmdSalir &Salir CmdEjecutar &Ejecutar True

Una vez establecidas las propiedades, proceda a ingresar el siguiente cdigo: Private Sub CmdEjecutar_Click() iResult = mciExecute(Play C:\WINDOWS\MEDIA\Ringin.wav) End Sub Private Sub CmdSalir_Click() Unload Me End Sub Nota: No olvide revisar los direccionamientos, lo que a este ejercicio se refiere son con Windows 98
Academia de Computacin

86

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

7. Utilizacin de puertos Visual Basic incluye un componente llamado MSComm para manejo de puertos seriales, para los puertos paralelos pueden utilizarse los controles OCX como el TDLPortIO, otro componente es el de Tconnector, que se puede descargar de http://www.download.com, recuerde que no todo de lo esta disponible en Internet es gratuito. 7.1.1. Puerto serie Un puerto serie es una ranura a la cual se le pueden conectar un dispositivos externos tales como un ratn o un modem 7.1.1.1. Estndar RS232(configuracin de pines) Existen dos tamaos de los puertos, el de 25 pines y el de 9 pines (este ultimo es el mas utilizado en la actualidad), ambos son macho en la parte posterior de la PC por lo tanto se requiere un conector hembra que vaya a la computadora (Aunque tambin hay computadoras con dos puertos uno con conector hembra y el otro macho) . Enseguida se muestra una tabla con la configuracin de pines de ambos tamaos.
Serial de 25 pines Pin 2 Pin 3 Pin 4 Pin 5 Pin 6 Pin 7 Pin 8 Pin 20 Pin 22 Serial de 9 pines. Pin 3 Pin 2 Pin 7 Pin 8 Pin 6 Pin 5 Pin 1 Pin 4 Pin 9 Abreviacin en ingls TD RD RTS CTS DSR SG CD DTR RI Significado Transmit Data Receive Data Request To Send Clear To Send Data Set Ready Signal Ground Carrier Detect Data Terminal Ready Ring Indicator

Funcionamiento de los pines:


Abreviatura Significado (en ingls) TD RD CTS DCD DSR (en ingls) Transmit Data Receive Data Clear to Send Funcin Pin para transmitir (TXD) Pin para recibir (RXD) Esta linea indica que el modem esta listo para intercambiar datos.

Data Carrier Detect Cuando el modem detecta un Carrier (transmisin) desde el MODEM al otro lado de la lnea telefnica, esta lnea se pone activa. Data Set Ready Esto le dice a la UART que el MODEM esta listo para establecer un enlace. (La 87
Programacin

Academia de Computacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

UART es el chip que se encarga de transmitir asincrnicamente los datos y se encuentra dentro de la PC). DTR RTS RI Data Terminal Ready Request To Send Ring Indicator Este es el opuesto a DSR, esto le dice al modem que el UART esta listo para hacer el enlace. Esta lnea informa al modem que el UART esta listo para intercambiar datos. Esta seal se pone active cuando el modem detecta una seal de ring

La forma comn para transmitir datos de una computadora a otra es la siguiente:

Los otros pines son nicamente para manejo de MODEM u otro uso. Como una alternativa se puede comprar un cable serial RS232 Db9-Db9 en alguna tienda de artculos de computadora. 7.1.1.2. Controles para manejar el puerto serie (MSCOM en Visual Basic) Visual Basic incluye un componente llamado MSComm para transmitir y recibir datos a travs de un puerto serie. El control MSComm proporciona dos formas diferentes de tratamiento de las comunicaciones: Las comunicaciones controladas por eventos son un mtodo muy poderoso para el tratamiento de interacciones con el puerto serie. En muchas situaciones desear que se le notifique cundo tiene lugar un evento; por ejemplo, cundo llega un carcter o cundo se produce un cambio en las lneas de Deteccin de portadora (CD) o Peticin de envo (RTS). En tales casos se utiliza el evento OnComm del control MSComm para interceptar y tratar estos eventos de comunicaciones. El evento OnComm tambin detecta y trata los errores en las comunicaciones. En la propiedad CommEvent puede ver una lista completa de todos los eventos y errores posibles en las comunicaciones. Tambin puede sondear los eventos y errores si comprueba el valor de la propiedad CommEvent despus de cada funcin crtica de su programa. Esta alternativa es preferible si la aplicacin es pequea y autnoma. Por ejemplo, si est escribiendo un marcador telefnico sencillo, no tiene sentido generar un evento despus de recibir cada carcter, ya que los nicos caracteres que piensa recibir son las respuestas de aceptacin que enva el mdem.

Cada uno de los controles MSComm que use corresponde a un puerto serie. Si necesita tener acceso a ms de un puerto serie en su aplicacin, debe usar ms de un control MSComm. La direccin del puerto y la direccin de la interrupcin pueden cambiarse desde el Panel de control de Windows. El control MSComm no est normalmente en la caja de herramientas, por lo que ser necesario introducirlo mediante Proyecto | Componentes | Controles... Microsoft Comm Control 6.0 para el caso de Visual Basic 6.0.
Academia de Computacin

88

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

En el formulario solamente se le ve en tiempo de diseo. Al tratarse de un control personalizado, presenta dos formas de ver las propiedades. Si hacemos click con el botn derecho del ratn sobre el control y vamos a propiedades, nos presenta tres cuadros de configuracin de los tpicos de los controles personalizados. Si seleccionamos el control MSComm y pulsamos F4 , aparecer la caja de propiedades tpica de los controles VB. Aunque el control MSComm tiene muchas propiedades importantes, hay algunas con las que debe familiarizarse primero.
Propiedades/ Descripcin CommPort Establece y devuelve el nmero del puerto de comunicaciones. Puede especificar para valor cualquier nmero entre 1 y 16 (el valor predeterminado es 1, aunque normalmente una PC tiene 2 puertos serie : El Com1 y el Com2., ) en tiempo de diseo. Sin embargo, el control MSComm genera el error 68 (El dispositivo no est disponible) si no existe el puerto cuando intenta abrirlo con la propiedad PortOpen. Settings Establece y devuelve la velocidad en baudios, paridad, bits de datos y bits de parada en forma de cadena. La siguiente lista muestra las velocidades en baudios vlidas. Valor: 110 300 56000 128000 Valor Descripcin E M N O S Par Marca Ninguno (Predeterminado) Impar Espacio 5 6 7 8 (predeterminado) 1.5 2 600 1200 256000 2400 9600(predeterminado) 14400 19200 28800 38400

La siguiente tabla describe los valores de paridad vlidos.

La siguiente lista muestra los valores vlidos de bits de datos. Valor: 4 La siguiente lista muestra los valores vlidos de bits de parada. Valor: 1 (predeterminado) PortOpen Establece y devuelve el estado de un puerto de comunicaciones. Tambin abre y cierra un puerto. Valores Los valores admitidos para valor son: Valor True False Descripcin El puerto est abierto El puerto est cerrado 89
Programacin

Academia de Computacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Cuando la propiedad PortOpen es True se abre el puerto. Si le asigna el valor False se cierra el puerto y se borra el contenido de los bferes de recepcin y de transmisin. El control MSComm cierra automticamente el puerto serie cuando finaliza la aplicacin. Asegrese de que la propiedad CommPort contenga un nmero de puerto vlido antes de abrir el puerto. Si la propiedad CommPort es un nmero de puerto no vlido, cuando intente abrir el puerto el control MSComm generar el error 68 (El dispositivo no est disponible). Adems, el dispositivo del puerto serie tiene que aceptar los valores actuales de la propiedad Settings. Si la propiedad Settings contiene una configuracin de comunicaciones que el hardware no admite, es posible que el hardware no funcione correctamente. Si cualquiera de las propiedades DTREnable o RTSEnable tiene el valor True antes de que se abra el puerto, tendrn el valor False cuando se cierre el puerto. De lo contrario, las lneas DTR y RTS permanecern en su estado anterior. Input Devuelve y quita una cadena de datos del bfer de recepcin. Esta propiedad no est disponible en tiempo de diseo y es de slo lectura en tiempo de ejecucin. La propiedad InputLen determina el nmero de caracteres ledos por la propiedad Input. Asignar a InputLen el valor 0 hace que la propiedad Input lea todo el contenido del bfer de recepcin. La propiedad InputMode determina el tipo de datos que se recuperan mediante la propiedad Input. Si InputMode es comInputModeText, la propiedad Input devuelve datos de texto en una variable de tipo Variant. Si InputMode es comInputModeBinary, la propiedad Input devuelve datos binarios en una matriz de bytes de tipo Variant. Output Escribe una cadena de datos en el bfer de transmisin. Esta propiedad no est disponible en tiempo de diseo y es de slo lectura en tiempo de ejecucin. La propiedad Output puede transmitir datos binarios o de texto. Para enviar texto mediante la propiedad Output, debe especificar una variable de tipo Variant que contenga una cadena. Para enviar datos binarios, debe pasar a la propiedad Output un Variant que contenga una matriz de bytes. Generalmente, si enva a una aplicacin una cadena ANSI, puede enviarla como datos de texto. Si tiene datos que contengan caracteres de control, nulos, etc., debe pasarlos como datos binarios.

7.1.2. Puerto paralelo Anteriormente (alrededor de 5 aos atrs) los puertos paralelos venan con una sola configuracin de pines (con diferente forma de trabajo), hoy en da existen tres tipos de configuracin de pines: SPP. EPP y ECP, anteriormente se usaba una configuracin como el SPP, para saber que tipo de puerto se tiene actualmente en la computadora se puede visualizar en Windows el tipo de puerto paralelo, en el men Panel de control\Sistema\Hardware\Dispositivos, si no se tiene Windows, reiniciando la computadora y entrando al BIOS (Sistema Bsico de Entrada/Salida por sus siglas en ingls) nos puede decir que tipo de puerto paralelo se tiene, si no tiene descrito que tipo, entonces es similar al SPP. Enseguida vamos a describir la configuracin de SPP y EPP. Pin 1 SPP Strobe EPP Write IN/OUT (Entrada/Salida) Out
90

Funcin A low on this line indicates a Write, High indicates a Read


Programacin

Academia de Computacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

2-9 10 11 12 13 14 15 16 17 18-25

Data 0-7 Ack Busy Paper Out / End Select Auto Linefeed Error / Fault Initialize Select Printer Ground

Data 0-7 Interrupt Wait Spare Spare Data Strobe Spare Reset Address Strobe Ground

In-Out In In In In Out In Out Out GND

Data Bus. Bi-directional Interrupt Line. Interrupt occurs on Positive (Rising) Edge. Used for handshaking. A EPP cycle can be started when low, and finished when high. Spare - Not Used in EPP Handshake Spare - Not Used in EPP Handshake When Low, indicates Data transfer Spare - Note used in EPP Handshake Reset Active Low When low, indicates Address transfer Ground

Por la amplia gama de tarjetas que todava se siguen utilizando tomaremos la configuracin SPP, esto debido a que anteriormente los puertos no eran bidireccionales, esto quiere decir que no se utilizan los pines de datos para entrada y salida simultneamente Como se observa en la tabla anterior, hay pines de entrada y pines de salida, con excepcin de que los pines de datos pueden ser de entrada y salida, es importante mencionar que se debe consultar el manual de la tarjeta madre para saber si el puerto paralelo que se tiene es bidireccional o no. En resumen, si el puerto no es bidireccional, como es el caso de las tarjetas antiguas, entonces se tienen 8 pines de salida (Pines 2 a 8) que puede enviar la computadora al puerto y 5 pines de entrada (ACK, BUSY, Paper Out, SELECT, Error/Fault) que pueden ser recibidos por el puerto. Es conveniente conectar la tierra (pin GND) para que haya flujo de datos.. Para proporcionar un voltaje, es de tipo TTL, es decir un nivel de voltaje de cinco volts es un 1 lgio y cero volts 0 lgico. Para comunicar dos computadoras como una alternativa se puede adquirir un cable paralelo de comunicacin llamado Centronics (que no sea de impresora) en alguna tienda de artculos de computadora. NOTA IMPORTANTE: Es peligroso poner el voltaje equivocado en el puerto, puede ocasionar daos severos a su computadora, desde quemar el puerto paralelo hasta quemar algunos circuitos de la computadora, para ello es bueno utilizar optoacopladores o algn dispositivo que prevenga que no se pase un voltaje superior a 5 volts. Ejemplo: Desarrolle un programa que enve datos al puerto serie de la misma PC La forma debe tener la apariencia y los controles que se muestran en la figura siguiente:
Academia de Computacin

91

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Form1 Nombre Caption frmEnvia Enviar datos al puerto serial

BorderStyle 1-Fixed Single Label1 Nombre Stretch TextBox1 Nombre Stretch TextBox2 Nombre Stretch Timer Nombre Enabled Interval Timer1 True 100 text True txtEnviar True lblConf True

Academia de Computacin

92

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

CommonDialog Nombre DefaultExt DialogTitle Filter MSComm1 Nombre CommPort Settings MSComm2 Nombre CommPort Settings Command1 Nombre Caption Command2 Nombre Caption Command3 Nombre Caption CmdSalir &Salir CmdEnviarTexto Enviar &texto CmdEnviar &Enviar archivo com2 2 9600,n,8,1 com 1 9600,n,8,1 Dialogo Fmt Archivo a enviar al puerto com1 Formato texto (*.txt)|*.txt|Todos (*.*)|*.*

Una vez establecidas las propiedades, proceda a ingresar el siguiente cdigo: Option Explicit Const tramafinal = "@@"
Academia de Computacin

93

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Dim buffer As String Private Sub cmdEnviar_Click() Dim a As String On Error GoTo HuboError a = Dialogo.FileName Dialogo.ShowOpen If Dialogo.CancelError = False Then Open Dialogo.FileName For Input As #1 Do While Not EOF(1) com.Output = Input(1, #1) Loop Close 1 End If MsgBox "El archivo se ha enviado exitosamente por el puerto" Salir: Exit Sub HuboError: MsgBox "Hubo un error o se cancelo el envio del archivo" Resume Salir End Sub Private Sub cmdEnviarTexto_Click() If txtEnviar.text <> "" Then On Error GoTo HuboError com.Output = txtEnviar.text txtEnviar.text = "" 'MsgBox "El texto se ha enviado exitosamente por el puerto" Salir: Exit Sub HuboError: MsgBox "Hubo un error al enviar la cadena por el puerto" Resume Salir Else

Academia de Computacin

94

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

MsgBox "Introduzca la cadena a enviar por el puerto antes de enviar" End If End Sub Private Sub cmdSalir_Click() Unload Me End Sub Private Sub Form_Load() lblConf.Caption = "Configuracin actual del puerto serial COM1:" & com.Settings Dialogo.FileName = "*.txt" com.PortOpen = True com2.PortOpen = True buffer = "" End Sub Private Sub Form_Unload(Cancel As Integer) com.PortOpen = False com2.PortOpen = False End Sub Private Sub Timer1_Timer() If com2.InBufferCount > 0 Then buffer = buffer + com2.Input + Chr(13) + Chr(10) If InStr(1, buffer, tramafinal) > 0 Then text.text = buffer buffer = "" End If End If End Sub Private Sub txtEnviar_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Call cmdEnviarTexto_Click End If End Sub
Academia de Computacin

95

Programacin

Universidad Autnoma de Nayarit

Area de Ciencias Bsicas e Ingenieras

Bibliografa MSDN Ayuda de Visual Basic Aprendiendo Visual Basic 6 en 21 das PERRY, GREG Ed. Prentice Hall ISBN 970-17-0245-X Aprenda Visual Basic 6.0 Ya HALVORSON, MICHAEL 1a. edicin 1999 Publicado por McGraw-Hill Interamericana - Divisin Profesional MSDN (Microsoft Developer Network), Library Visual Studio 6.0a Aprenda Visual Basic 6.0 como si estuviera en primero Escuela Superior de Ingenieros Industriales, Industri Injineruen Goimailako Eskola UNIVERSIDAD DE NAVARRA - NAFARROAKO UNIBERTSITATEA Gua de desarrollo Delphi 5 Steve Taixeira Xavier Pacheco Ed. Prentice Hall Programacin con C++ Builder 5 Francisco Charte Ojeda Edicin espaola: EDICIONES ANAYA MULTIMEDIA, 2000 Ayuda de Microsoft Access 2003

Academia de Computacin

96

Programacin

UNIVERSIDAD AUTNOMA DE NAYARIT


AREA DE CIENCIAS BSICAS E INGENIERAS ACADMIA DE COMPUTACIN

CURSO TEORICO-PRACTICO DE PROGRAMACIN

REALIZADO POR: M. en C. Imelda Avalos Flores Ing. Alma Cristina Ramrez Cobarrubias Ing. Lucia Ramrez Prez Ing. Agustn Leopoldo Arciniega Luna

ltima revisin Agosto de 2008.

Indice

Tema 1. Introduccin a la programacin visual. . . . . . . 1.1. Programacin en Windows. . . . . . . 1.1.1. Herramientas RAD. . . . . . . . 1.1.2. Principales lenguajes de programacin visual. . . . . 1.1.3. Otras herramientas visuales. . . . . . . 1.2. Principales caractersticas de los entornos visuales en Windows. . . 1.3. Componentes y controles visuales para reutilizacin. . . . 1.4. La API de Windows. . . . . . . . 1.5. Comunicacin con manejadores de bases de datos (ADO, ODBC, RDO, DAO). 2. Utilizacin de componentes visuales. . . . . . . 2.1. Entorno. . . . . . . . . . 2.1.1. Proyectos. . . . . . . . . 2.1.2. Barra de herramientas. . . . . . . 2.1.3. Cuadro de herramientas. . . . . . . 2.1.4. Formularios. . . . . . . . . 2.2. Propiedades, mtodos y eventos. . . . . . . 2.3. Manejo de controles. . . . . . . . 2.3.1. Propiedades del formulario. . . . . . . 2.3.2. Herramienta puntero. . . . . . . . 2.3.3. Principales controles. . . . . . . . 3. Manejo de archivos.. . . . . . . . . 4. Bases de datos. . . . . . . . . . 4.1. Conceptos generales. . . . . . . . 4.2. Gestores de bases de datos. . . . . . . 4.3. Acceso a bases de datos. . . . . . . . 5. Informes. . . . . . . . . . . 5.1. Diseo de informes. . . . . . . . 6. Utilizacin de las llamadas al sistema (API). . . . . . . 7. Utilizacin de puertos. . . . . . . . .

Pg.

Potrebbero piacerti anche