Cuaderno de Trabajo Visual Basic - Net Con BD
Cuaderno de Trabajo Visual Basic - Net Con BD
Cuaderno de Trabajo Visual Basic - Net Con BD
Cuaderno de Trabajo Visual Basic se encu encuentra bajo una Licencia Creative Commons Atribucin-No Atribucin ComercialLicenciamiento Recp Recproco 3.0 Unported. Diciembre IDSystems
Contenido
INTRODUCCION ..........................................................................................................................................................4 EJERCICIOS Y PRACTICAS SOBRE EL ARCHIVOS ..........................................................................................................5 Ejercicio01a Editor Sencillo - Guardar (Funciones)..............................................................................................6 Ejercicio01b Editor Sencillo - Guardar (Stream) ..................................................................................................7 Ejercicio 02a Editor Sencillo Leer ......................................................................................................................9 Ejercicio 02b Editor Sencillo Leer (Stream).................................................................................................... 11 Ejercicio 03 Editor Sencillo Lectura de un archivo utilizando un bucle ............................................................ 12 PRACTICA 1 Editor Sencillo Lectura con Bucle y Stream .................................................................................. 12 Ejercicio 04 - Creacin de un editor sencillo ....................................................................................................... 12 PRACTICA 2 Editor Sencillo con Stream ............................................................................................................ 17 Ejercicio 05 Archivos con Estructura de Base de Datos .................................................................................... 17 PRACTICA 3 Agenda .......................................................................................................................................... 17 Ejercicio 06 Texto y RTF .................................................................................................................................... 18 Ejercicio 07 Leer datos desde un archivo ......................................................................................................... 19 Ejercicio 08 Usar output para grabar un archivo .............................................................................................. 21 Ejercicio 09 Usando APPEND para agregar informacion al archivo.................................................................. 22 Ejercicio 10 Creando archivos de configuracion para aplicaciones .................................................................. 24 Ejercicio 11 Usando Write e Input .................................................................................................................... 26 Ejercicio 12 Usando archivos aleatorios ........................................................................................................... 29 PRACTICA 4 Convertir Agenda VB6 a VB.NET (con Arch. Aleatorios) ............................................................... 32 Ejercicio 13 Editor de texto con RTF ................................................................................................................. 39 PRACTICA 5 Editor de texto con Menus o formularios MDI ............................................................................ 42 PRACTICAS 6-8 ......................................................................................................................................................... 43 EJERCICIOS SOBRE EL BASES DE DATOS .................................................................................................................. 44 Ejercicio 14 Formulario de Datos...................................................................................................................... 45 Ejercicio 15 Conectar y Navegar con BD por codigo......................................................................................... 59 Ejercicio 16 Agregando, Eliminando y Actualizando por Codigo ..................................................................... 63 Ejercicio 17 Usando DataGrid en modo simple ................................................................................................ 68 Ejercicio 18 Grid por Codigo ............................................................................................................................. 72 PRACTICA 9 DataGridView con Color ............................................................................................................... 74 PRACTICA 10 DataGridView con relaciones ..................................................................................................... 75 PRACTICA 11 DataGridView Maestro-Detalle en 2 Grids ................................................................................. 76 PRACTICA 12 DataGridView con Filtro.............................................................................................................. 77 PRACTICA 13 DataGridView con Ordenacion. .................................................................................................. 78 Cuaderno de Trabajo Visual Basic.NET con Base de Datos Pgina 2
PRACTICA 14 Archivos de Excel ........................................................................................................................ 79 PRACTICA 15 Base de Datos con Imgenes Vinculadas .................................................................................... 81 PRACTICA 16 BD con Imgenes Vinculadas en campo ...................................................................................... 84 PRACTICA 17 Base de Datos OLE DB con MySQL.............................................................................................. 85 PRACTICAS 18 22 .................................................................................................................................................. 85
Pgina 3
INTRODUCCION
Visual Basic.NET ha mejorado en cuanto al manejo de archivos y bases de datos relacionales externas, tanto locales, cliente/servidor como de aplicaciones web (internet). Para este curso, se han tomado los ejercicios del Cuaderno de Trabajo de Visual Basic 6.0 con Base de Datos y se han adaptado al nuevo entorno del framework .NET que ofrece mas robustez y nuevos modelos de programacion. Se trato de respetar en lo posible la programacion de las versiones anteriores de Visual Basic, pero tambien se incluyen ejercicios y practicas con el nuevo entorno de desarrollo para que este sea el lenguaje base de programacion. No hay que olvidar que este Cuaderno va de la mano con sus lecciones teoricas, tanto en el portal como en clase, asi como es recomendable leer la bibliografia que acompaa al curso. Bienvenido al mundo de la programacion.
Pgina 4
Pgina 5
Haga clic en la caja de texto y en la ventana propiedades establezca los siguientes valores: a) En la propiedad MultiLine establezca True. b) En la propiedad ScrollBars establezca el valor 2 Vertical. En el evento Click del botn Guardar escriba:
On Error GoTo ErrorDesconocido Dim iNumArchivo As Integer 'obtener numero de manipulador de archivo libre iNumArchivo = FreeFile() 'Abrir archivo para escritura FileOpen(iNumArchivo, "datos.doc", OpenMode.Output) PrintLine(iNumArchivo, Text1.Text) FileClose(iNumArchivo) MsgBox("Los datos han sido guardado.") Exit Sub
Pgina 6
En el evento Click del botn Salir escriba: End Corra la aplicacin. Despus que la aplicacin este corriendo escriba algo en la caja de texto. Cuando halla escrito algo en la caja, haga clic en el botn guardar, y a continuacin, aparecer una ventana diciendo que Los datos han sido guardado., esto es sino ocurre un error. Al hacer clic en el botn guardar, automticamente se crear un archivo llamado DATOS.DOC en el disco C:. PARA VER SI EL ARCHIVO SE HA CREADO REALMENTE EN EL DISCO C: HAGA LO SIGUIENTE: A) Haga doble clic en MY PC. B) Haga doble clic en Disco C:\ C) Explore todos los archivos que aparecen en el disco C:\ y ver que entre todos esos archivos se encuentra el que creamos desde Visual Basic llamado DATOS.DOC. NOTA: El archivo aparecer como documento de WORD porque lo hemos creado con la extensin .DOC que representan los archivos de WORD.
Corra la aplicacin. Despus que la aplicacin este corriendo escriba algo en la caja de texto. Explicacin del programa lnea por lnea:
Pgina 7
Esta lnea de cdigo permite controlar cualquier error que ocurra a partir desde donde se escribe. En este caso la hemos utilizado para verificar si al grabar los datos ocurre algn error. Traducida al castellano esta lnea de cdigo quiere decir lo siguiente: SI OCURRE UN ERROR SALTA A LA LINEA LLAMADA ErrorDesconocido
- La segunda lnea:
Dim oWrite As System.IO.StreamWriter
Esta lnea declara una variable para ser el objeto que tome el metodo de la clase System.IO y pueda grabar en el archivo Traducida al castellano esta lnea quiere decir: DECLARA UNA VARIABLE COMO LA CLASE STREAMWRITER PARA GRABAR EN UN ARCHIVO
- La tercera lnea:
oWrite = System.IO.File.CreateText("datos.doc")
Ahora el objeto declarado permitira asociarse a la creacion de un archivo de texto con el metodo CreateText y como parametro el nombre y ubicacin del archivo a crear Traducida al castellano esta lnea quiere decir: CREA UN ARCHIVO DE TEXTO LLAMADO DATOS.DOC USANDO LA CLASE SYSTEM.IO.FILE PARA EL OBJETO OWRITE Esta linea es la que permite grabar todo el texto introducido en el control TEXTBOX de nuestro formulario, es decir, lo que el usuario ha introducido Traducida al castellano esta lnea quiere decir: GRABAR TODAS LAS LINEA INTRODUCIDAS POR EL USUARIO
- La cuarta lnea:
oWrite.WriteLine(Text1.Text)
Finalmente, esta linea indica que el objeto debe cerrarse para proceder con la grabacion final del archivo y que no se quede abierto Traducida al castellano esta linea quiere decir: CIERRA EL ARCHIVO Esta lnea muestra una ventana con el mensaje escrito entre los parntesis y la comilla. En este caso hemos especificado un mensaje que informa al usuario si los datos se han grabado correctamente. Esta lnea de cdigo permite separar un bloque de cdigo con otro bloque de cdigo. Se ha utilizado para separar las ltimas dos lneas de cdigo que muestran el mensaje de error en caso de que este ocurra. Si esta lnea de cdigo no se escribe, entonces el mensaje
Pgina 8
de error aparecera aun los datos se hallan guardado correctamente, esto es, porque no habra nada que separe el cdigo principal que almacena los datos, del cdigo que muestra el error en caso de que ocurra. Es lgico que el error solamente deba aparecer si ocurre algn error. Y debe de existir algo que separe un bloque de cdigo de otro cdigo y para esto se utiliza Exit Sub. 8 - La octava lnea: ErrorDesconocido: Esta lnea de cdigo se ha declarado como una etiqueta que va a permitir desde el punto de vista lgico asignarle un nombre a una lnea. Al establecer la etiqueta ErrorDesconocido: en una lnea, es posible acceder al bloque de cdigo que se encuentra despus de la etiqueta utilizando la sentencia Goto como se especifico en la primera lnea. Esto es, porque es la nica forma de acceder a la codificacin que reside despus de la sexta lnea de cdigo que corresponde a la codificacin Exit Sub. 9 - La novena lnea: Msgbox(Ha ocurrido un error al intentar guardar el archivo.) Muestra un mensaje diciendo que ha ocurrido un error al intentar guardar el archivo en el disco.
Pgina 9
Pgina 10
Linea8 = LineInput(iNumArchivo) FileClose(iNumArchivo) Text1.Text = Linea1 & Chr(10) & Chr(13) & Linea2 & Chr(10) & Chr(13) & Linea3 & Chr(10) _ & Chr(13) & Linea4 & Chr(10) & Chr(13) & Linea5 & Chr(10) & Chr(13) & Linea6 & Chr(10) _ & Chr(13) & Linea7 & Chr(10) & Chr(13) & Linea8
Notemos que el codigo de Guardar es el mismo que en el ejercicio numero 1a. En el caso del boton de leer, usamos las funciones de FreeFile, FileOpen y FileClose para determinar el numero del manejador disponible, abrir el archivo segn su modo y cerrar el archivo. Usamos la funcion LineInput para leer linea por linea el archivo de texto. Tome nota que se han declarado solo 8 variables para leer 8 lineas de un archivo. Al finalizar, pondremos lo que hemos leido dentro del control de caja de texto para mostrarlo en la pantalla. ADVERTENCIA: Cuando lo ejecute es probable que encuentre algunos errores. Identifiquelos e investigue porque sucedieron. Comente en clase o con su profesor que fue lo que sucedi.
Ahora, sustituye la linea que esta documentada por todas las lineas que leen el archivo linea por linea dejando la ultima (Text1.text = EntireFile) intacta. Esto es, pon como comentario cada una de las lineas que se leen y quita el comentario a la que esta marcada. Ve la diferencia. Discute en clase cual de las opciones es mejor y porque.
Pgina 11
Pgina 12
Establezca los siguientes valores en las propiedades de los controles utilizados: Control Form1 Propiedad Caption BorderStyle Height Width Text MultiLine ScrollBars Heigth Width Top Left Caption Valor Editor 1- Fixed Single 5460 7635 (Vaci) True 2- Vertical 4215 7215 120 120 &Abrir
Text1
cmdAbrir
Pgina 13
Explicacin del cdigo anterior: - Primera lnea: Text1.Text = Permite limpiar la caja de texto. Esto es en caso de que anteriormente se encontrar algn archivo abierto. Es normal que si se va a mostrar el contenido de algn archivo el lugar donde se mostrar debe de estar limpio. - Segunda lnea: On Error GoTo NoSeleccionoArchivo Esta lnea se ha declarado en caso de que ocurra un error al intentar abrir el archivo. Esto es muy importante porque en ocasiones pueden ocurrir errores desconocidos y estos errores deben ser controlados desde la aplicacin. Esta lnea la he declarado principalmente porque siempre que no se selecciona algn archivo en el cuadro de dialogo abrir ocurrir un error, es decir, cuando se haga clic en el botn Cancelar del cuadro de dialogo Abrir. No intente averiguar porque este error ocurre, simplemente especifique siempre esta lnea de cdigo cuando intente abrir un archivo. - Tercera lnea: OpenFileDialog1.Filter = "Archivos de texto (TXT)" & Chr(32) & Chr(124) & "*.txt" Esta lnea es muy importante. Permite especificar el tipo de archivo que permitir visualizar el cuadro de dialogo abrir.
Pgina 14
La propiedad Filter te permite especificar el tipo de archivo que el cuadro de dialogo podr visualizar a la ahora que este sea activado. Estructura de la lnea anterior: OpenFileDialog1.Filter = "Archivos de texto (TXT)" & Chr(32) & Chr(124) & Entre comillas se especifica el texto que aparecer en Tipo de archivo del cuadro de dilogo Abrir. Esta combinacin permite obtener el carcter . "*.txt" Extensin de los archivos que se mostrarn.
En este caso se ha especificado que el cuadro de dialogo Abrir solo visualice los tipos de archivos de texto. Si corre la aplicacin y hace clic en el botn Abrir aparecer la pantalla de Abrir con la siguiente configuracin:
Puede observar que en la caja Files of type (Tipo de archivos) aparece el texto que especificamos en la propiedad Filter de control Common Dialog. Se pueden especificar ms tipos de archivos pero esto lo veremos ms adelante. - Cuarta lnea: OpenFileDialog1.ShowDialog() Esta lnea de cdigo no tiene mucha novedad simplemente muestra el cuadro de dialogo abrir. El mtodo ShowDialog significar Mostrar Abrir, es decir, Mostrar el cuadro Abrir. - Quinta lnea: Dim Linea As String
Pgina 15
Esta lnea de cdigo declara una variable llamada Linea donde se almacenar cada lnea de datos del archivo abierto.
- Octava lnea:
FileOpen(iNumArchivo, OpenFileDialog1.FileName, OpenMode.Input)
La nica novedad que vemos en esta lnea de cdigo es OpenFileDialog1.FileName. Antes especificbamos el archivo directamente pero en esta ocasin dejamos que la ventana de dilogo Abrir tome el control del nombre del archivo. El archivo que se seleccione en la ventana de dialogo Abrir, este ser el archivo que se muestre en el Editor. La propiedad FileName almacena el PATH o la ruta completa del archivo seleccionado. - Ultimas lneas:
Do While Not EOF(iNumArchivo) Linea = LineInput(iNumArchivo) Text1.Text = Text1.Text + Linea + Chr(13) + Chr(10) Loop FileClose(iNumArchivo) Exit Sub NoSeleccionoArchivo:
Estas ultimas lneas las hemos visto ya anteriormente que se utilizan para la lectura de un archivo completo utilizando un bucle. Ms arriba ya habamos trabajado con esto. La sentencia de bloqueo Exit Sub tambin la vimos anteriormente. En el vento Click del botn Guardar escriba:
On Error GoTo NoSeleccionoArchivo SaveFileDialog1.Filter = "Archivos de texto (TXT)" & Chr(32) & Chr(124) & "*.txt" SaveFileDialog1.ShowDialog() Dim iNumArchivo As Integer iNumArchivo = FreeFile() FileOpen(iNumArchivo, SaveFileDialog1.FileName, OpenMode.Output) Print(iNumArchivo, Text1.Text) FileClose(iNumArchivo) MsgBox("Archivo Guardado.") Exit Sub NoSeleccionoArchivo:
Explicacin del cdigo anterior: Lo nico nuevo que vemos en este bloque de cdigo es el mtodo ShowDialog que permite mostrar el cuadro de dialogo Guardar. En esta ocasin utilizamos este mtodo para guardar el archivo en el disco duro. ShowDialog significa Mostrar Guardar, es decir, Mostrar el cuadro de dilogo Guardar.
Pgina 16
Lo dems lo hemos visto anteriormente. Por ejemplo, utilizamos en esta ocasin el mtodo Output para guardar y especificamos SaveFileDialog1.FileName en vez de especificar un nombre fijo o un nombre constante. Ya explique eso anteriormente. En el evento Click del botn de comando Nuevo escriba: Text1.Text = "" Text1.Focus() Explicacin del cdigo anterior: - Primera lnea: La primera lnea quita cualquier texto que se halla mostrado o escrito en la caja de texto. - Segunda lnea: Hace que la caja de texto reciba el enfoque, es decir, que el cursor se posiciones en la caja. En el evento Click del botn de comando Salir escriba: Sale de la aplicacin. End
Corra la aplicacin y ver que tiene un pequeo Editor. Puede perfeccionarlo agregando negrita, cursiva, subrayado, tipo de letra, justificaciones de texto, etc.
PRACTICA 3 Agenda
Ahora, recrea el ejercicio 05, utilizando la clase System.IO con las caracteristicas de los metodos Stream. Las caracteristicas son similares.
Pgina 17
Tenemos dos controles para desplegar el texto: un TextBox1 y un RichTextBox1, y dos botones en cuyos eventos Click se desplegarn por cdigo los archivos mencionados en los controles de texto. Primero debemos crear un archivo en el NotePad o en el Word y grabarlo como TXT y otro con variacines en el tipo, color y tamao de la letra y grabarlo como rtf. Luego abrimos visual y en creamos un nuevo proyecto grabandolo en el mismo directorio y carpeta que tenemos los archivos: txt y rtf. El cdigo de cada botn es el siguiente:
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim EntireFile As String
Pgina 18
Dim oRead As System.IO.StreamReader oRead = System.IO.File.OpenText("archivotexto.txt") EntireFile = oRead.ReadToEnd() TextBox1.Text = EntireFile End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click RichTextBox1.LoadFile("archivortf.rtf") 'como podemos 'ver con el Control RichTextBox es ms sencillo el manejo de 'archivos, con la sentencia LoadFile se carga el archivo 'indicando el camino para encontrarlo. End Sub End Class
La cual contiene una caja de texto, botones de comando y un frame para enmarcar el diseo. La caja de texto tiene la propiedad Multiline = true, y la propiedad Scrollbars como 2 Vertical. Ahora he aqu el codigo a teclear: En el boton de salir: End En el boton de Borrar TextBox
Pgina 19
Pgina 20
2 Cajas de texto 1 boton de comando Etiquetas Frame Un control de timer para que muestre la hora del sistema actual en tiempo real
Pgina 21
' Utilizamos un Control Timer para mostrar en los text el dia y la _ 'hora del sistema. La propiedad intervalo del control timer esta en 1000 milisegundos TextBox1.Text = TimeOfDay() TextBox2.Text = DateValue(Now()) End Sub
Pgina 22
archivo = My.Application.Info.DirectoryPath + "\" + "Prueba.txt" ' Asignamos a texto el contenido de texto = TextBox1.Text text1
' Abrimos el archivo en modo aPPend para agregar datos al _ 'archivo que ya contiene datos FileOpen(1, archivo, OpenMode.Append) ' Escribimos un salto de carro y el contenido de la variable texto Print(1, vbCrLf + texto) ' Cerramos el archivo FileClose(1) ' Creamos un mensaje para dar la opcin de ver o no los cambios en el archivo _ 'con los nuevos datos agregados mensaje = MsgBox(" Deseas ver ahora el contenido del archivo con,los datos agregados", vbYesNo + vbInformation, "Consulta") ' Evaluamos la condicion. Si es verdadera abrimos el archivo para leerlo _ 'con la sentencia input If mensaje = vbYes Then FileOpen(1, archivo, OpenMode.Input) TextBox1.Text = "" ' Borramos el contenido de text1 para que no vuelva 'a imprimir lo que estaba escrito While Not EOF(1) texto = LineInput(1) TextBox1.Text = TextBox1.Text + texto + vbCrLf End While Else Exit Sub End If FileClose(1) End Sub Private Sub cmdLimpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLimpiar.Click TextBox1.Text = "" End Sub Private Sub cmdSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSalir.Click End End Sub
Pgina 23
Necesitaras crear un proyecto con 2 formas, donde la primera es la pantalla de bienvenida (form1) y la segunda es la aplicacin (form2) CONTROLES PARA FORM1 a) b) c) d) Etiqueta Frame CheckBox Boton de comando
Pgina 24
CONTROLES PARA FORM2 a) Etiqueta b) Frame c) Boton de comando CODIGO PARA FORM1 ' Esta variable almacena el path del archivo "Config.dat" Dim archivo As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' Establecemos el path archivo = My.Application.Info.DirectoryPath & "\" & "Config.dat" ' Comprobamos si est presionado el control check1. Si lo est _ 'crea un archivo igual "config.dat" y escribe la cadena "noAbrir" _ ', para que la prxima vez no muetre el formulario de bienvenida. If CheckBox1.Checked = True Then FileOpen(1, archivo, OpenMode.Output) Print(1, "noAbrir") FileClose(1) ' Cierra el archivo End If Me.Visible = False ' descarga este formulario Form2.Show() ' muestra el otro form End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim archivo As String Dim MiVAriable As String ' Variable para almacenar la cadena que se lea _ 'del archivo "config.dat" archivo = My.Application.Info.DirectoryPath & "\" & "Config.dat" FileOpen(1, archivo, OpenMode.Input) ' Abre el archivo para leerlo MiVAriable = LineInput(1) ' Almacenamos el valor FileClose(1) ' Cerramos el archivo If MiVAriable = "noAbrir" Then ' Hacemos la comprobacin Me.Visible = False Form2.Show() End If End Sub
Pgina 25
CONTROLES 1) 2) 3) 4) 5) 5 cajas de texto Etiquetas Botones de comando Frame Caja de lista (listbox)
CODIGO
Public Class Form1 ' Variables globales para almacenar los datos cuando grabemos o leamos _ ' los mediante las sentencias write e input Dim apellido As String Dim nombre As String Dim telefono As String Dim direccion As String Dim dni As String Dim archivo As String '********************************************************* _ 'procedimientos '*********************************************************
Pgina 26
' Procedimiento para agregar datos separados por comas con la _ 'sentencia Write Private Sub agregarEntrada(ByVal apellido As String, ByVal nombre As String, ByVal telefono As String, ByVal direccion As String, ByVal dni As String) ' Las variables que van en los parmetros del procedimiento _ 'contienen el valor de los textBox archivo = My.Application.Info.DirectoryPath + "\" + "datos.dat" ' variable que almacena el path del archivo datos.dat FileOpen(1, archivo, OpenMode.Append) ' Abrimos el archivo en modo Append para agregar datos al final del archivo Write(1, apellido, nombre, telefono, direccion, dni) 'Write #1, apellido, nombre, telefono, direccion, dni ' Grabamos los datos pasandole como parmetro a la sentencia Write las ' variables se paradas por comas FileClose(1) ' Cerramos el archivo End Sub ' Procedimiento para leer los datos del archivo y mostrarlos en los _ 'textBox cuando hacemos click en un nombere del list1 Private Sub mostrarDatos() Dim contador As Integer ' variable que almacena un valor que _ 'luego se comparar con la propiedad listindex del list1, para _ 'saber cuales son los datos que tenemos que recupera y mostrar _ 'las cajas de texto archivo = My.Application.Info.DirectoryPath + "\" + "datos.dat" FileOpen(1, archivo, OpenMode.Input) ' Abrimos el archivo para leer los datos mediante la sentencia Input While Not EOF(1) ' Comenzamos a leer el archivo Input(1, apellido) Input(1, nombre) Input(1, telefono) Input(1, direccion) Input(1, dni) 'Input #1, apellido, nombre, direccion, telefono, dni 'If contador = ListBox1.ListIndex Then If contador = ListBox1.SelectedIndex Then ' if contador es igual al elemento que seleccionamos en el list, ' entonces imprimimos los valores y salimos de la rutina con Exit Sub. ' Si no es igual el contador se va incrementando en 1 hasta que en ' algun punto coincide con el numero del elemento seleccionado txtApellido.Text = apellido txtNombre.Text = nombre txtDireccion.Text = direccion txtDocumento.Text = dni txtTelefono.Text = telefono FileClose(1) Exit Sub
Pgina 27
Private Sub cargarDatos() ListBox1.Items.Clear() ' Borramos los datos previos para que no vuelva a duplicar los datos archivo = My.Application.Info.DirectoryPath + "\" + "datos.dat" FileOpen(1, archivo, OpenMode.Input) 'Open archivo For Input As #1 While Not EOF(1) ' Mientras no se llegue al fin de archivo que valla recuperando los ' datos y agregue solo el apellido en el Control(List) Input(1, apellido) Input(1, nombre) Input(1, direccion) Input(1, telefono) Input(1, dni) 'Input #1, apellido, nombre, direccion, telefono, dni ListBox1.Items.Add(apellido) End While FileClose(1) End Sub Private Sub cmdSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSalir.Click End End Sub Private Sub cmdCargar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCargar.Click On Error GoTo mensaje cargarDatos() ' Llamamos a la rutina para cargar los datos Exit Sub mensaje: MsgBox("No hay datos para cargar", vbInformation + vbOKOnly, "Mensaje") End Sub Private Sub cmdAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAgregar.Click ' Esta rutina es para que no se puedan grabar datos si el _ 'campo "Apellido" est vaco, mostrando un mensaje y luego saliendo ' de la rutina. Si esta todo bien ignora lo anterior y se ejecuta la ' rutina "agregarEntrada", que lleva como parmetros el conenido de las ' cajas de texto If txtApellido.Text = "" Then MsgBox("El campo Apellido no puede estar vacio", vbInformation + vbOKOnly, "Advertencia")
Pgina 28
Exit Sub End If agregarEntrada(txtApellido.Text, txtNombre.Text, txtDireccion.Text, txtTelefono.Text, txtDocumento.Text) End Sub Private Sub ListBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.Click mostrarDatos() 'Llamamos a la rutina que recupera los datos cada vez que seleccio _ ' namos un elemento del control List1 End Sub
Pgina 29
CONTROLES 1) 2) 3) 4) 5) Cajas de texto Etiquetas Caja combo (combobox) Frame Boton de comando
CODIGO
Public Class Form1 'Aqu declaramos una estructura de datos con tres campos de longi _ 'tud fija. O sea que cada registro que grabemos tendr el tamao de _ '50 bytes. Private Structure T_personas <VBFixedString(20)> Public Apellido As String <VBFixedString(20)> Public Nombre As String <VBFixedString(10)> Public edad As String End Structure 'Esta variable est asociada a la estructura T_personas, que luego _ 'nos servir para grabar o leer datos en el archivo datos.dat Dim persona As T_personas 'Esta variable almacenar el valor del combo para obtener el n de regis _ 'tro donde grabar o leer datos Dim nRegistro As Integer Private Sub cmdGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdGrabar.Click ' Pasamos los parmetros de los textBox al procedimiento que grabar los(datos) grabarDatos(txtA_Apellido.Text, txtA_Nombre.Text, txtA_Edad.Text) End Sub Private Sub cmdLeer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLeer.Click 'Llamamos al procedimiento para leer los datos del archivo leerDatos() End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load ' Aqu cargamos los combos con valores del 1 al 100 cuando inicia el form Dim x As Integer For x = 1 To 100 cboA_Seleccion.Items.Add(x) cboL_Seleccion.Items.Add(x) Next x End Sub ' Procedimiento para grabar registros
Pgina 30
Private Sub grabarDatos(ByVal Apellido As String, ByVal Nombre As String, ByVal edad As String) 'Abrimos el archivo en modo aleatorio y le pasamos el tamao de la _ 'estructura() FileOpen(1, My.Application.Info.DirectoryPath + "\" + "datos.dat", OpenMode.Random, , , Len(persona)) 'Asignamos a los campos de la extructura Type los valores que recibe _ 'de los parmetros del procedimiento y que contiene los valores de los textBox persona.Apellido = Apellido persona.Nombre = Nombre persona.edad = edad ' Almacenamos aqu el numero de registro donde grabar los datos nRegistro = CLng(cboA_Seleccion.Text) ' Grabamos los datos FilePut(1, persona, nRegistro) ' Cerramos el archivo FileClose(1) End Sub Private Sub leerDatos() 'Abrimos el archivo en modo aleatorio y le pasamos el tamao de la FileOpen(1, My.Application.Info.DirectoryPath + "\datos.dat", OpenMode.Random, , , Len(persona)) ' Almacenamos aqu el numero de registro de donde leer los datos nRegistro = CLng(cboL_Seleccion.Text) ' Leemos los datos y los almacenamos en la variable "Persona" FileGet(1, persona, nRegistro) 'Cerramos el archivo FileClose(1) ' Mostramos en los labels los valores leidos txtL_Apellido.Text = persona.Apellido txtL_Nombre.Text = persona.Nombre txtL_Edad.Text = persona.edad End Sub Private Sub cmdCantReg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCantReg.Click Dim tamao As Integer tamao = FileLen(My.Application.Info.DirectoryPath & "\" + "datos.dat") / Len(persona) MsgBox("El archivo datos.dat contiene: " & tamao & " registros", vbInformation + vbOKOnly) End Sub
Pgina 31
Para manipular los datos se utiliza una estructura o UDT que tiene las siguientes variables:
1. ' Estructura para los datos de los contactos de la agenda 2. Private Type Contacto 3. Nombre As String * 40 4. Apellido As String * 50 5. Telefono As String * 40 6. Mail As String * 70 7. Nota As String * 250
Pgina 32
8. End Type
Como se puede ver en la imagen, tiene una opcin para buscar un registro y especificar por que campo buscar, ya sea por el nombre del contacto, el Apellido, el telefono o el correo electrnico.
Luego agregar 7 CommandButton con los siguientes nombres: 1. CmdAnterior : Botn para ir al anterior registro 2. cmdSiguiente : Botn para ir al siguiente registro 3. cmdGuardar : Botn para guardar los cambios cuando se seleccion previamente la opcin Nuevo Registro 4. cmdEliminar: Elimina el registro actual 5. cmdNuevo : Aade un nuevo reg 6. cmdBuscar : Para buscar 7. Cmdsalir : Descarga el Form Ahora, agregar un control ComboBox llamado Combo1. A este combo, establecerle en la propiedad Style el valor 2 ( DropDownList ) y agregarle los siguientes valores en la propiedad List: Nombre, Apellido, Telefono e Mail en ese orden Nota: Para agregar datos en la propiedad List desde la ventana de propiedades, debes mantener la tecla Ctrl presionada y presionar la tecla Enter para aadir un nuevo dato o Item. Por ltimo, agregar un control Label llamado lblStatus que servir para poder mostrar cuando nos desplazamos por los registros, con los botones anterior y siguiente, el nmero del registro actual y la cantidad de registros que hay en el archivo. Este Label lo puedes situar en la parte inferior del formulario o donde quieras. Colocar el cdigo fuente en el formulario:
1. Option Explicit 2. 3. 'Variables 4. '################################################## 5. 6. ' Estructura para los datos de los contactos de la agenda 7. Private Type Contacto 8. Nombre As String * 40 9. Apellido As String * 50 10. Telefono As String * 40
Pgina 33
11. Mail As String * 70 12. Nota As String * 250 13. End Type 14. 15. 'Variables para utilizar la estructura anterior 16. Dim Datos As Contacto 17. Dim DatosTemp As Contacto 18. 19. 'Variables para el archivo de los datos de contacto y temporal 20. Dim FileFree As Integer 21. Dim FileTemp As Integer 22. 23. 'Variables para la posicin del primer y ltimo registro 24. Dim RegActual As Long 25. Dim RegUltimo As Long 26. ' Variable para la posicin Temporal del registro 27. Dim RegActualTemp As Long 28. 29. Dim Pos As Integer, p As Integer 30. 31. 32. 33. 34. '###################################################### 35. 'Funciones y procedimientos 36. '###################################################### 37. 38. 39. 40. ' Subrutina que guarda los datos en el archivo 41. '############################################# 42. 43. Private Sub GuardarDatos() 44. 45. 'Asignamos los datos de la estructura con el contenido de los textBox 46. With Datos 47. 48. .Nombre = txtNombre.Text 49. .Apellido = txtApellido 50. .Telefono = txtTelefono.Text 51. .Nota = txtNota.Text 52. .Mail = Trim(txtMail) 53. 54. End With 55. 56. 'Escribimos los datos en el archivo y en la posicin 57. Put #FileFree, RegActual, Datos 58. End Sub 59. 60. ' Subrutina que Visualiza los datos en los textBox 61. '################################################## 62. 63. Private Sub VisualizarDatos() 64. 65. 'Lee del fichero en el registro posicionado y almacena los datos_ _ 66. en la la variable UDT 67. Get #FileFree, RegActual, Datos 68. 69. ' Mostramos los datos en las cajas de texto 70. With Datos 71. txtApellido = Trim(.Apellido)
Pgina 34
72. txtNombre = Trim(.Nombre) 73. txtTelefono = Trim(.Telefono) 74. txtMail = Trim(.Mail) 75. txtNota.Text = Trim(.Nota) 76. End With 77. 78. 'Mostramos en el control Label la posicin del registro actual _ 79. y la cantidad o Total de registros que hay en el archivo 80. lblStatus.Caption = "Registro Actual: " & CStr(RegActual) & vbNewLine _ 81. & " Total de registros: " & CStr(RegUltimo) 82. 83. End Sub 84. 85. 'Botn que elimina un registro del archivo 86. '############################################ 87. 88. Private Sub cmdEliminar_Click() 89. 90. Pos = RegActual 91. 92. If MsgBox(" Est seguro de eliminar el contacto ? ", vbYesNo) = vbNo Then 93. 94. txtNombre.SetFocus 95. 96. Exit Sub 97. End If 98. 99. ' Verificamos que el archivo temporal no exista, si existe se elimina 100. If Dir("Temporal.tmp") = "Temporal.tmp" Then 101. Kill "Temporal.tmp" 102. End If 103. 104. FileTemp = FreeFile 105. 'Abrimos y creamos un nuevo fichero temporal 106. Open "Temporal.tmp" For Random As FileTemp Len = Len(DatosTemp) 107. 108. RegActual = 1 109. RegActualTemp = 1 110. 111. 'Se recorren los registros del archivo 112. 113. For p = 1 To RegUltimo - 1 114. 115. Get #FileFree, RegActual, Datos 116. 117. 'Este es el registro que se elimina 118. If RegActualTemp = Pos Then 119. RegActual = RegActual + 1 120. End If 121. 122. Get #FileFree, RegActual, Datos 123. 124. 125. With DatosTemp 126. .Apellido = Trim(Datos.Apellido) 127. .Nombre = Trim(Datos.Nombre) 128. .Telefono = Trim(Datos.Telefono) 129. .Mail = Trim(Datos.Mail) 130. .Nota = Trim(Datos.Nota) 131. End With 132.
Pgina 35
133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193.
'Escribe en el archivo temporal los datos Put #FileTemp, RegActualTemp, DatosTemp RegActual = RegActual + 1 RegActualTemp = RegActualTemp + 1 Next
Close FileFree 'Elimina el archjivo con los datos Kill "Datos.dat" Close FileTemp 'Renombra el archivo temporal a datos.dat Name "Temporal.tmp" As "Datos.dat"
' Mostramo los datos en los textbox Cargar RegActual = Pos VisualizarDatos End Sub Private Sub cmdGuardar_Click() GuardarDatos End Sub Private Sub Cmdsalir_Click() 'Guarda los cambios en el archivo antes de salir GuardarDatos 'cierra el archivo abierto Close #FileFree End End Sub Private Sub form_load() 'Carga el primer registro del archivo Cargar 'Selecciona en el combo para la bsqueda de datos Combo1 = Combo1.List(0) Cargarcaptions End Sub Private Sub Cargar() FileFree = FreeFile Open "Datos.dat" For Random As FileFree Len = Len(Datos) RegActual = 1 ' Almacenamos la posicin del ltimo registro RegUltimo = LOF(FileFree) / Len(Datos) If RegUltimo = 0 Then RegUltimo = 1 End If
Pgina 36
194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. _ 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253.
'Cargamos los datos en los Textbox VisualizarDatos End Sub 'Botn que agrega un nuevo registro '##################################### Private Sub cmdNuevo_click() RegUltimo = RegUltimo + 1
'Limpia los datos de la estructura para poder agregar un nuevo registro With Datos .Apellido = "" .Nombre = "" .Telefono = "" .Mail = "" .Nota = "" End With ' Graba datos vacios en el nuevo registro hasta que se presione el botn Guardar que graba los verdaderos datos Put #FileFree, RegUltimo, Datos RegActual = RegUltimo
Private Sub cmdSiguiente_click() If RegActual = RegUltimo Then MsgBox " Ultimo registro ", vbInformation Else 'Incrementa la posicin RegActual = RegActual + 1 'Cargamos los datos en el textbox del siguiente registro VisualizarDatos End If txtNombre.SetFocus End Sub 'Botn para posicionar en el Anterior registro '############################################## Private Sub CmdAnterior_click() If RegActual = 1 Then MsgBox " Primer registro ", vbInformation Else
Pgina 37
254. al 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. r 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312.
'Decrementamos la variable que mantiene la posicin del registro actu RegActual = RegActual - 1 'Mostramos los datos en las cajas de texto VisualizarDatos End If txtNombre.SetFocus End Sub 'Botn para Buscar datos '############################################## Private Sub cmdBuscar_click() Dim Encontrado As Boolean, PosReg As Long, tmp As Contacto If txtBuscar = "" Then txtNombre.SetFocus: Exit Sub Encontrado = False 'Recorremos desde el primer hasta el ltimo en busca del registro a busca
For PosReg = 1 To RegUltimo 'Leemos el registro Get #FileFree, PosReg, tmp 'Si es el dato es igual salimos del bucle If UCase(txtBuscar) = UCase(Trim(BuscarPor(tmp))) Then Encontrado = True Exit For End If Next If Encontrado Then RegActual = PosReg 'Cargamos los datos en los text VisualizarDatos Else MsgBox "Nombre: " & txtBuscar & " No se ha encontrado el registro" End If txtNombre.SetFocus End Sub 'Funcin que retorna el valor de la bsqueda '############################################# Private Function BuscarPor(t As Contacto) Select Case Combo1.ListIndex Case 0: BuscarPor = t.Nombre Case 1: BuscarPor = t.Apellido Case 2: BuscarPor = t.Telefono
Pgina 38
313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330.
Case 3: BuscarPor = t.Mail End Select End Function ' Establece los captions de los controles Command del formulario Private Sub Cargarcaptions() Me.Caption = " Agenda simple utilizando archivos aleatorios " CmdAnterior.Caption = " Anterior " cmdSiguiente.Caption = " Siguiente " cmdGuardar.Caption = " Guardar " cmdEliminar.Caption = " Eliminar " cmdNuevo.Caption = " Nuevo " cmdBuscar.Caption = " Buscar " Cmdsalir.Caption = " Salir " End Sub
Pgina 39
Nota: Colocar los controles en cualquier posicin de la pantalla y no colocarles nada en el Caption ni el tamao ni nada, ya que se hace por cdigo, es decir se les asigna el caption y se redimensionan en tiempo de ejecucin . Pegar el cdigo en el formulario
Public Class Form1 Const FILTRO_EXTENSIONES As String = "Archivos de texto (txt)|*.txt|" & _ "Rich Text Formato (RTF)|*.rtf|" & _ "Archivos INI|*.ini|Archivos HTML|" & _ "*.htm|Todos los archivos|*.*" Private Sub cmdNegrita_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNegrita.Click If Not RichTextBox1.SelectionFont Is Nothing Then Dim currentFont As System.Drawing.Font = RichTextBox1.SelectionFont Dim newFontStyle As System.Drawing.FontStyle If RichTextBox1.SelectionFont.Bold = True Then newFontStyle = FontStyle.Regular Else newFontStyle = FontStyle.Bold End If RichTextBox1.SelectionFont = New Font(currentFont.FontFamily, currentFont.Size, newFontStyle) End If End Sub Private Sub cmdNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNuevo.Click RichTextBox1.Text = "" End Sub Private Sub cmdGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdGuardar.Click 'Guardar el archivo Dim res As DialogResult Dim fname As String SaveFileDialog1.Filter = FILTRO_EXTENSIONES 'SaveFileDialog1.InitialDirectory = "C:\" res = SaveFileDialog1.ShowDialog() If res = Windows.Forms.DialogResult.OK Then fname = SaveFileDialog1.FileName If SaveFileDialog1.FilterIndex = 2 Then RichTextBox1.SaveFile(fname) Else RichTextBox1.SaveFile(fname, RichTextBoxStreamType.PlainText) End If End If End Sub Private Sub cmdAbrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Pgina 40
Handles cmdAbrir.Click Dim res As DialogResult OpenFileDialog1.Filter = FILTRO_EXTENSIONES 'OpenFileDialog1.InitialDirectory = "C:\" res = OpenFileDialog1.ShowDialog If res = Windows.Forms.DialogResult.OK Then If OpenFileDialog1.FilterIndex = 2 Then RichTextBox1.LoadFile(OpenFileDialog1.FileName) Else RichTextBox1.LoadFile(OpenFileDialog1.FileName, RichTextBoxStreamType.PlainText) End If End If End Sub Private Sub cmdCortar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCortar.Click RichTextBox1.Cut() End Sub Private Sub cmdPegar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPegar.Click RichTextBox1.Paste() End Sub Private Sub cmdItalica_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdItalica.Click If Not RichTextBox1.SelectionFont Is Nothing Then Dim currentFont As System.Drawing.Font = RichTextBox1.SelectionFont Dim newFontStyle As System.Drawing.FontStyle If RichTextBox1.SelectionFont.Bold = True Then newFontStyle = FontStyle.Regular Else newFontStyle = FontStyle.Italic End If RichTextBox1.SelectionFont = New Font(currentFont.FontFamily, currentFont.Size, newFontStyle) End If End Sub Private Sub cmdSubrayado_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSubrayado.Click If Not RichTextBox1.SelectionFont Is Nothing Then Dim currentFont As System.Drawing.Font = RichTextBox1.SelectionFont Dim newFontStyle As System.Drawing.FontStyle If RichTextBox1.SelectionFont.Bold = True Then newFontStyle = FontStyle.Regular Else newFontStyle = FontStyle.Underline End If RichTextBox1.SelectionFont = New Font(currentFont.FontFamily, currentFont.Size,
Pgina 41
newFontStyle) End If End Sub Private Sub cmdImprimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdImprimir.Click PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub End Class
Pgina 42
PRACTICAS 6-8
6.- Hacer una aplicacin que permita abrir un archivo de texto y mostrarlo en una caja de texto. La aplicacin debe permitir seleccionar el archivo de la unidad de disco mediante el cuadro de dilogo Abrir. 7.- Hacer una aplicacin que permita almacenar en un archivo con estructura de base de datos los campos: Nombre, Apellido, Edad y lugar de nacimiento. El programa debe permitir visualizar los registros agregados en un control ListView. Tambin debe permitir borrar un registro almacenado en el archivo de base de datos. 8.- Hacer una aplicacin que permita borrar un archivo de una unidad de disco. El nombre de este archivo y la unidad donde este se encuentra debe ser especificado en una caja de texto y mediante un botn de Borrar el programa debe permitir borrarlo. Si el archivo no se encuentra se debe mostrar un mensaje informando al usuario que ese archivo no existe. (Tip: Ver Leccion 2 en apartado sobre funciones de archivo)
Pgina 43
Pgina 44
Vemos que hemos dado como llave primaria el primer campo de ID (Identificacion) para que nuestros pacientes sean unicos. A continuacion llenamos con algunos datos de muestra en la Hoja de Datos:
Los datos pueden ser otros ya que necesitamos algunos para poder trabajar en nuestro ejercicio inicial.
Cuaderno de Trabajo Visual Basic.NET con Base de Datos Pgina 45
Despues de esto, ya podemos cerrar nuestra tabla y nuestra base de datos, asi como salir de Access 2007. PASO 2 Abrimos Visual Basic.NET 2010 Express (o la version de Visual Studio que tengamos). Y creamos un nuevo proyecto. Comenzaremos con un formulario en blanco.
Lo primero que debemos de revisar es que tengamos la barra de herramientas de DISEO DE DATOS en la parte superior.
Pgina 46
Ahora, comenzaremos dando un click en el icono (Crear origenes de datos) para crear nuestra conexin con la base de datos. A partir de aqu se nos mostrara un asistente que nos indicara desde donde obtendremos la conexin, el tipo y algunos otros parametros). Comienza mostrandonos una ventana de ASISTENTE como esta:
Pgina 47
Aqu, seleccionamos BASE DE DATOS, como el origen de los datos. Pulsamos SIGUIENTE.
Ahora nos pregunta por el modelo que usaremos, el mas comun es el primero. Pulsamos SIGUIENTE.
Pgina 48
Ahora, en esta pantalla nos pregunta por la conexin de datos. Esta seccion es MUY IMPORTANTE porque le diremos al asistente como se configura la conexin. Al inicio, aparece una caja de lista vacia, para que indiquemos el nombre de la conexin. Esto es asi, porque es posible que en nuestro sistema ya tengos una conexin previamente grabada en el sistema Windows y la queramos utilizar. De lo contrario, tendremos que crear una nueva conexin. Observamos tambien, que en la parte inferior hay un recuadro con la cadena de conexin (y al principio esta vacia). Esto es hasta que no se seleccione un nombre de conexin. Ademas, vemos que el boton de siguiente esta desactivado por la misma razon. Al no tener un nombre de conexin debemos crear una. Pulsamos en el boton NUEVA CONEXIN
Ahora, nos aparece una ventana de dialogo que nos indica el tipo de conexin a usar. Por defecto, Visual Basic.NET nos proporciona MS SQL Server (ya sea que lo tengamos instalado en nuestro equipo o que nos conectemos a un servidor real). Nos indica ademas desde donde viene dicha conexin. Para nuestro caso utilizaremos ACCESS. Por lo tanto es necesario cambiar la conexin. Pulsamos en el boton de CAMBIAR.
Pgina 49
Ahora se nos presenta otra ventana de dialogo para seleccionar nuestro proveedor de base de datos. Seleccionamos el primero y pulsamos ACEPTAR.
Vuelve a regresar a nuestra pantalla anterior, pero ligeramente diferente. Nos pregunta por nuestro archivo y si lo habiamos protegido el nombre del usuario y contrasea. Usamos el boton de EXAMINAR para poder seleccionar mas facilmente nuestro archivo de ACCESS y que nos muestre la ruta completa.
Pgina 50
Pulsamos el boton de abrir y veremos que nos mostrara la ubicacin y nombre del archivo. Generalmente los archivos de ACCESS no tiene usuario y contrasea, pero para asegurarnos podemos usar el boton inferior izquierdo PROBAR CONEXIN:
Pgina 51
Esto nos indicara que pudo accesar al archivo sin ningun problema. Pulsamos ACEPTAR para cerrar la ventana de mensaje y ACEPTAR para cerrar la ventana de CONEXIN.
Pgina 52
Ahora veremos que ya tenemos una conexin o nombre de conexin, asi como la cadena que nos indica donde esta el archivo, el proveedor de acceso a datos y otros (si hubiera). El boton se ha activado, asi que pulsamos SIGUIENTE.
En el caso de que el archivo de Access estuviera en alguna otra ubicacin en donde no este nuestro proyecto, Visual Basic.NET nos lo hace saber y nos pregunta si copia este archivo a la ubicacin de resultados o lo dejamos donde mismo. En algunos casos de desarrollo, no es conveniente copiarlo porque dicho archivo se encuentra por ejemplo en otra computadora, servidor y desde ah se utilizara por nuestro programa, ya que el archivo
Pgina 53
se encuentra compartido. Para el ejemplo que estamos realizando, le diremos que SI COPIE el archivo al directorio del proyecto para que su manejo sea mas sencillo.
Ahora nos pregunta si queremos guardar la cadena de conexin que nos ha creado el asistente en un archivo de configuracion. Este es importante porque de esa manera VB.NET permite ubicar nuestro archivo de manera facil y rapida, y si hubiera un cambio de ubicacin del archivo de manera fisica (copiarlo a otra carpeta o equipo), editar este archivo seria mucho mas sencillo que realizar todos los pasos del asistente nuevamente. Por lo tanto, dejamos la marca en la casilla de verificacion junto con el nombre propuesto y pulsamos SIGUIENTE.
Pgina 54
Ahora, ha que construir el DATASET, para ello necesitamos decirle al asistente cual o cuales seran las tablas (o vistas) que queremos utilizar. Para nuestro sencillo ejemplo, solo tenemos una tabla (sin relaciones) asi que seleccionamos PACIENTES. Ya solo nos queda el boton de FINALIZAR. Pulsamos para terminar la configuracion. PASO 3 Todavia no tenemos nada en nuestro formulario pero ya tenemos nuestra conexin a la base de datos como lo podemos ver en la siguiente imagen:
Pgina 55
Ahora, necesitamos construir nuestro formulario enlazado a base de datos. Se puede usar un DataGrid o en su caso, tambien podemos usar los campos de manera directa y VB.NET nos creara las propiedades y controles necesarios para nuestro formulario. Comenzamos desplegano la informacion de la tabla de pacientes (izquierda) y seleccionamos el primer campo ID. Despues, sin dejar de oprimir el boton del raton arrastramos el campo hasta nuestro formulario.
Pgina 56
Y Voila! Ademas de ponernos el control de caja de texto del campo ID, nos muestra su etiqueta y nos coloca una barra de navegacion en la parte superior (que es la que se encargar de navegar por los distintos campos). Tambien, vemos que en la parte inferior nos coloca todos los controles necesarios relacionados con nuestra conexin de datos como DATASET, BINDINGSOURCE, TABLEADAPTER y el BINDINGNAVIGATOR. Todos ellos sin mas esfuerzo que el haber arrastrado el campo. Podemos acomodarlo a nuestra conveniencia y comenzar a arrastrar el resto de los campos a nuestro formulario.
Pgina 57
Listo, hemos arrastrado los campos del panel izquierdo a nuestro formulario para que se adapte a nuestras necesidades. Ahora grabamos todo el proyecto y lo ejecutamos.
Podemos ver, que ya tenemos la informacion vista en la pantalla de nuestro ejemplo. La barra superior nos permite navegar entre los registros, agregar nuevos, borrarlos y actualizar la informacion. Todo de manera sencilla.
Pgina 58
Observamos que no tiene un campo llave definido, pero el primer campo PERSONID es del tipo autonumerico. De preferencia se recomienda capturar al menos 3 registros dentro de Access a modo de prueba.
Ahora, cerramos nuestra base de datos en Access y vamos MS Visual Basic.NET. Creamos un nuevo proyecto y en nuestro formulario pondremos los siguientes controles:
Pgina 59
Observamos que hemos colocado controles LABEL, TEXTBOX y BOTONES. Quedara mas o menos asi los nombres: txtNombre, txtApellido, txtUbicacion. Para los botones de comando: cmdFill, cmdFirst, cmdPrevious, cmdNext, cmdLast. Recordemos que son opcionales y podemos darles los nombres que queramos. En este caso no usamos ningun otro control ni conexin visual ya que utilizaremos codigo. Comenzamos importando el nombre de espacio y demas. Esto se hace antes de la clase de la forma:
Con esto estamos indicando que crearemos un nuevo conjunto de datos, y tendremos que utilizar una variable entera como marcador o puntero para saber en que registro estamos dentro de nuestra tabla. Ahora, tecleamos el siguiente codigo en nuestro primer boton cmdFILL, que es el que se encargara de conectarse con nuestro archivo de base de datos y obtener los datos de la tabla:
Private Sub cmdFill_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFill.Click Try Dim oConexion As New OleDbConnection()
Pgina 60
oConexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =G:\Cys\Cys - Manuales\UM05 - Visual Basic Net con BD\Ejercicios\ParteII\Ejercicio25_BDNavegarXCodigo\PersonDatabase.mdb; User Id=admin;Password=;" oConexion.Open() 'MessageBox.Show("Conectado") Dim strSQL As String = "Select FirstName, LastName, City From PersonTable" Dim da As New OleDbDataAdapter(strSQL, oConexion) da.Fill(ds) 'Checar que la tabla no este vacia If ds.Tables(0).Rows.Count > 0 Then txtNombre.Text = ds.Tables(0).Rows(0).Item("FirstName").ToString() txtApellido.Text = ds.Tables(0).Rows(0).Item("LastName").ToString() txtUbicacion.Text = ds.Tables(0).Rows(0).Item("City").ToString()
End If
Catch oExcep As OleDbException 'Si se produce algun error MessageBox.Show("Error arl conectar con datos" & _ ControlChars.CrLf & _ oExcep.Message & ControlChars.CrLf & _ oExcep.Source()) End Try End Sub
Recordemos que la primer y ultima linea no la tecleamos, ya que VB.NET se encarga de ello segun nuestro boton. Usamos la instruccin TRY CATCH, para asegurarnos que no tendremos errores de conexin y que si los hubiera, nos muestra el codigo de error de dicho problema. Declaramos una conexin con New OleDbConnection. E indicamos mediante esta conexin una cadena que contiene el nombre del proveedor de base de datos (en este caso es MS Access, que esta representado como Microsoft.Jet.OleDB.4.0 que es el motor que utiliza), la fuente de datos; es decir, la ubicacin completa de donde se encuentra nuestro archivo, es muy importante que el archivo permanezca en esa ruta, de lo contrario no podremos conectarnos si lo movemos de ah; el usuario y el password asociado. MS Access 2007 permite poner un usuario y una contrasea a nuestro archivo, pero regularmente no se utiliza. Sin embargo , en nuestra declaracion de la cadena debemos incluirlo aunque como vemos con un valor nulo para la contrasea. Lo siguiente es abrir la conexin con el metodo OPEN() y declarar una sentencia SQL para que obtenga los datos que deseamos de dicha tabla (para ello, se utiliza la sintaxis del lenguale SQL estandar). Finalmente, usando el metodo FILL, obtenemos los datos y se cargan en el adaptador (una copia de la base de datos solamente con los resultados deseados para verse en nuestro programa). Por ultimo, mostramos la primer fila de dicho cursor pasando los valores a nuestros controles de caja de texto. Cuaderno de Trabajo Visual Basic.NET con Base de Datos Pgina 61
Ahora pondremos el codigo para navegar y recorrer toda nuestra tabla, comenzando con el boton de inicio o primero:
Private Sub cmdFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFirst.Click 'Como es 0 sera la primera fila txtNombre.Text = ds.Tables(0).Rows(0).Item("FirstName").ToString() txtApellido.Text = ds.Tables(0).Rows(0).Item("LastName").ToString() txtUbicacion.Text = ds.Tables(0).Rows(0).Item("City").ToString() End Sub
De manera sencilla usamos el objeto ds declarado anteriormente (nuestro DATASET), y obtenemos de la tabla 0, fila 0, los elementos deseados pasandolos a una cadena. El boton de PREVIO para navegar hacia atrs en nuestros registros lleva este codigo:
Private Sub cmdPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPrevious.Click 'Nos movemos hacia atras si no estamos en la primera fila If intCurrentIndex > 0 Then 'Substraer uno del indice actual intCurrentIndex = intCurrentIndex - 1 txtNombre.Text = ds.Tables(0).Rows(intCurrentIndex).Item("FirstName").ToString() txtApellido.Text = ds.Tables(0).Rows(intCurrentIndex).Item("LastName").ToString() txtUbicacion.Text = ds.Tables(0).Rows(intCurrentIndex).Item("City").ToString() Else MessageBox.Show("Ya esta en el registro inicial") End If End Sub
Aqu vemos, porque es importante tener una variable que nos almacene el puntero o posicion en la que nos encontramos dentro de nuestra tabla para ir recorriendo hacia atrs. El boton SIGUIENTE tiene este codigo:
Private Sub cmdNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNext.Click 'ds.tables(0).rows.count-1 es el indice de la ultima fila If intCurrentIndex < ds.Tables(0).Rows.Count - 1 Then 'Agregar uno al indice actual intCurrentIndex = intCurrentIndex + 1 txtNombre.Text = ds.Tables(0).Rows(intCurrentIndex).Item("FirstName").ToString() txtApellido.Text = ds.Tables(0).Rows(intCurrentIndex).Item("LastName").ToString() txtUbicacion.Text = ds.Tables(0).Rows(intCurrentIndex).Item("City").ToString() Else MessageBox.Show("Ya esta en el ultimo registro") End If End Sub
Y por ultimo el boton FINAL: Cuaderno de Trabajo Visual Basic.NET con Base de Datos Pgina 62
Private Sub cmdLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLast.Click intCurrentIndex = ds.Tables(0).Rows.Count - 1 txtNombre.Text = ds.Tables(0).Rows(intCurrentIndex).Item("FirstName").ToString() txtApellido.Text = ds.Tables(0).Rows(intCurrentIndex).Item("LastName").ToString() txtUbicacion.Text = ds.Tables(0).Rows(intCurrentIndex).Item("City").ToString() End Sub
Ahora podremos ejecutar nuestro programa y veremos que nos mostrara los registros capturados y que podemos navegar entre los registros
Como podemos observar, hemos agregado 3 botones mas para hacer las operaciones con la tabla y uno para salir. Sin embargo, vamos a hacer algunas adecuaciones para que en lugar de que el codigo para mostrar los datos este en cada boton, esto se haga en una subrutina generica que se mande llamar. De esta forma, el codigo se reduce y se facilita su compresion. Por lo tanto es necesario tambien, modificar el codigo de los botones de navegacion: Primero, Atrs, Siguiente, Ultimo. Comencemos primero con el codigo anterior a la clase form, y lo que necesitamos dentro de la clase para que se vuelva generico.
Pgina 63
Imports System.Data.OleDb Public Class Form1 Dim ds As New DataSet() Dim intCurrentIndex As Integer = 0 Dim oConexion As New OleDbConnection() Dim da As New OleDbDataAdapter() Private Sub FillFields() txtID.Text = ds.Tables(0).Rows(intCurrentIndex).Item("PersonID").ToString() txtNombre.Text = ds.Tables(0).Rows(intCurrentIndex).Item("FirstName").ToString() txtApellido.Text = ds.Tables(0).Rows(intCurrentIndex).Item("LastName").ToString() txtCiudad.Text = ds.Tables(0).Rows(intCurrentIndex).Item("City").ToString() End Sub
Observamos que comenzamos de igual manera con la sentencia IMPORTS SYSTEM.DATA.OLEDB, pero ahora, dentro de nuestra clase Form, tenemos declarada la conexin y el adaptador ademas del DataSet y nuestra variable de posicion. Tambien, tenemos una subrutina propia llamada FILLFIELDS en la cual pasaremos los datos de la tabla a los controles de texto. Vemos que usamos nuestra variable de posicion para tal efecto. A continuacion, necesitamos cargar los datos en nuestro formulario, y no tenemos un boton para ello, por lo que usamos el evento LOAD del formulario:
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Try oConexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =G:\Cys\Cys - Manuales\UM05 - Visual Basic Net con BD\Ejercicios\ParteII\Ejercicio25_BDNavegarXCodigo\PersonDatabase.mdb; User Id=admin;Password=;" da.SelectCommand = New OleDbCommand("Select PersonID, FirstName, LastName, City From PersonTable") da.SelectCommand.Connection = oConexion da.Fill(ds) FillFields() Catch oExcep As OleDbException 'Si se produce algun error MessageBox.Show("Error arl conectar con datos" & _ ControlChars.CrLf & _ oExcep.Message & ControlChars.CrLf & _ oExcep.Source()) End Try da.UpdateCommand = New OleDbCommand("UPDATE PersonTable SET FirstName = @FirstName, LastName = @LastName, City = @City WHERE PersonID = @PersonID") da.UpdateCommand.Connection = oConexion da.UpdateCommand.Parameters.Add("@FirstName", OleDbType.VarChar, 40, "FirstName") da.UpdateCommand.Parameters.Add("@LastName", OleDbType.VarChar, 40, "LastName") da.UpdateCommand.Parameters.Add("@City", OleDbType.VarChar, 40, "City")
Pgina 64
da.UpdateCommand.Parameters.Add("@PersonID", OleDbType.Integer, 5, "PersonID") da.InsertCommand = New OleDbCommand("INSERT INTO PersonTable(PersonID, FirstName, LastName, City) VALUES(@PersonID, @FirstName, @LastName, @City)") da.InsertCommand.Connection = oConexion da.InsertCommand.Parameters.Add("@PersonID", OleDbType.Integer, 5, "PersonID") da.InsertCommand.Parameters.Add("@FirstName", OleDbType.VarChar, 40, "FirstName") da.InsertCommand.Parameters.Add("@LastName", OleDbType.VarChar, 40, "LastName") da.InsertCommand.Parameters.Add("@City", OleDbType.VarChar, 40, "City") da.DeleteCommand = New OleDbCommand("DELETE FROM PersonTable WHERE PersonID = @PersonID") da.DeleteCommand.Connection = oConexion da.DeleteCommand.Parameters.Add("@PersonID", OleDbType.Integer, 5, "PersonID") End Sub
Aqu vemos que la primer parte del codigo es semejante al ejercicio anterior en el cual definiamos una cadena de conexin, un conjunto de datos y llenabamos el adaptardor con los mismos. Tenemos la misma instruccon TRYCATCH para detectar los errores. Pero ademas, tenemos codigo para hacer las operaciones de actualizar, agregar y eliminar. ADO.NET da muchos objetos (y formas) para hacer esto. Puede usar procedimientos almacenados con el comando OledbCommand, o puede usar instrucciones SQL directamente con este mismo, o incluso usar el DataAdapter para realizar las actualizaciones. Hay diferentes razones para usar cada metodo, pero para el proposito del ejercicio usaremos el DataAdapter. Asi que la primera parte es para la actualizacion
da.UpdateCommand = New OleDbCommand("UPDATE PersonTable SET FirstName = @FirstName, LastName = @LastName, City = @City WHERE PersonID = @PersonID") da.UpdateCommand.Connection = oConexion da.UpdateCommand.Parameters.Add("@FirstName", OleDbType.VarChar, 40, "FirstName") da.UpdateCommand.Parameters.Add("@LastName", OleDbType.VarChar, 40, "LastName") da.UpdateCommand.Parameters.Add("@City", OleDbType.VarChar, 40, "City") da.UpdateCommand.Parameters.Add("@PersonID", OleDbType.Integer, 5, "PersonID")
Podemos ver, que es basicamente la estructura de nuestra tabla con algunos parametros acerca de los tipos de campo que se trata. Dentro del codigo del evento LOAD, vemos tambien para AGREGAR y para eliminar. Ahora, vemos el resto de los botones. Los pondremos de manera global y hay que poner atencion al inicio de cada subrutina donde indica el nombre del boton:
Pgina 65
Private Sub cmdFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFirst.Click FillFields() End Sub Private Sub cmdPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPrevious.Click 'Nos movemos hacia atras If intCurrentIndex > 0 Then intCurrentIndex = intCurrentIndex - 1 FillFields() Else MessageBox.Show("Ya esta en el primer registro") End If End Sub Private Sub cmdNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNext.Click 'Nos movemos hacia adelanta If intCurrentIndex < ds.Tables(0).Rows.Count - 1 Then intCurrentIndex = intCurrentIndex + 1 FillFields() Else MessageBox.Show("Ya esta en el ultimo registro") End If End Sub Private Sub cmdLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLast.Click intCurrentIndex = ds.Tables(0).Rows.Count - 1 FillFields() End Sub Private Sub cmdActualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdActualizar.Click Dim dr As DataRow 'Esta obtiene una referencia de la fila editada dr = ds.Tables(0).Rows(intCurrentIndex) dr.BeginEdit() dr("FirstName") = txtNombre.Text dr("LastName") = txtApellido.Text dr("City") = txtCiudad.Text dr.EndEdit() 'Preguntar al dataadapter y llamar el comando UpdateCommando y actualizar la BD da.Update(ds) ds.AcceptChanges() MessageBox.Show("Datos Actualizados") End Sub Private Sub cmdAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAgregar.Click Dim dr As DataRow dr = ds.Tables(0).NewRow() dr("PersonID") = ds.Tables(0).Rows.Count + 1 dr("FirstName") = txtNombre.Text dr("LastName") = txtApellido.Text dr("City") = txtCiudad.Text
Pgina 66
ds.Tables(0).Rows.Add(dr) da.Update(ds) ds.AcceptChanges() MessageBox.Show("Datos Agregados") End Sub Private Sub cmdEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdEliminar.Click Dim dr As DataRow dr = ds.Tables(0).Rows(intCurrentIndex) dr.Delete() da.Update(ds) ds.AcceptChanges() MessageBox.Show("Datos Eliminados") End Sub Private Sub cmdSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSalir.Click End End Sub End Class
Y ahora solo nos queda ejecutar nuestro programa para poder navegar, y realizar las operciones con los registros.
Pgina 67
Aqu vemos que tenemos varias tablas con sus campos y sus relaciones. Dejamos al alumno la tarea de asignar los tipos de campos que ve en la imagen, asi como su tamao; porque se pueden deducir facilmente.
Pgina 68
Pgina 69
Ahora creamos nuestro proyecto en VB.NET. Y necesitamos, conectar con esta base de datos. Usamos para ello el asistente de conexin a datos, como vimos en la leccion 14.
Notemos que hemos ocultado varios de los controles del cuadro de herramientas y hemos dejado a la vista la seccion de DATOS, ya que ah usaremos el control DATAGRIDVIEW. Simplemente damos click a este control y lo arrastramos hacia la forma.
Pgina 70
Ahora, justo al arrastrarlos nos preguntara sobre el origen de nuestros datos. De la caja combinable, seleccionamos nuestra tabla que queramos presentar en este control. Seleccionemos PELICULAS.
Pgina 71
Ahora vemos que nos muestra los campos de nuestra tabla, y en la parte inferior vemos el resto de los controles que se usan: DATASET, BINDINGSOURCE, TABLEADAPTER. Finalmente le damos el tamao adecuado al control y a nuestra forma, para mostrar las columnas que queremos y ejecutamos el programa.
Pgina 72
Imports System.Data Imports System.Data.OleDb Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim cnn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=peliculas.mdb; User Id=admin;Password=;") Dim da As New OleDbDataAdapter("SELECT * FROM Peliculas", cnn) Dim ds As New DataSet da.Fill(ds) DataGridView1.DataSource = ds.Tables(0) End Sub End Class
Vemos que el codigo del boton, es basicamente: 1. Crear la conexin con el proveedor, el archivo y su usuario 2. Crear un adaptador que contiene la consulta desde la tabla que queremos 3. Crear un DataSet 4. Llenar el Dataset 5. Mostrar en el grid los datos de dicho DataSet
Pgina 73
El Control DataGridView, es un control mas avanzado que el original DataGrid de VB6. Deberas buscar las propiedades correspondientes a este control para poder manipular el aspecto que presentara. Esto es ultil cuando tienes muchos datos que deseas visualizar, o para marcar alguna celda en especifica. Por ejemplo, imagina que tienes un listado de calificaciones en el cual, quieres que las calificaciones por debajo de 6, se vean en rojo. Es una forma facil de identificar a los alumnos que reprobaron. El control DataGridView es semejante a Excel, y permite agregarle otro tipo de controles en cada una de las celdas como combobox, imagenes, calendarios. En esta practica sin embargo solamente queremos conocer lo basico de su formato.
Pgina 74
Como ejemplo, en la imagen superior estamos usando una base de datos en Access 2007 (pero con una version en formato 2003, que es .MDB) de peliculas. Esta base de datos tiene una tabla de CATEGORIAS y una tabla de PELICULAS. En el formulario, vemos que tenemos un boton llamado LLENAR. Lo hacemos asi como demostracion para cargar los valores de la base de datos iniciales en el DataGridView (lo correcto es ponerlo en el LOAD del formulario). Ademas, tenemos una caja combo y un boton. En la caja combo, debemos llenar los datos de la tabla de categorias. En el grid, con la tabla peliculas. Cuando se selecciona una categoria de la caja combo y se da un click al boton derecho, este hace la relacion entre las 2 tablas y mostrara solamente las peliculas que corresponden a esta categoria. En tu practica, puedes utilizar cualquier base de datos que hayas creado, siempre y cuando tenga al menos 2 tablas para ser relacionadas.
Pgina 75
El programa debe contener en un Grid los datos de la tabla maestra y al moverse dentro de las filas del primero, automaticamente cambiar el contenido del segundo Grid.
En el ejemplo de la imagen, tenemos solamente 2 DataGridView y un boton para llenar los datos la primera vez que se usa el programa. En el primer DataGridView vemos la tabla de categorias de la base de datos de peliculas que estamos usando desde las practicas anteriores. Al posicionarnos en una de las filas de la categoria, automaticamente debera desplegar el listado de peliculas disponibles relacionadas. Aqu, deberas usar las relaciones y algunas propiedades del DataGridView.
Pgina 76
En la imagen de ejemplo vemos que tenemos 2 botones. El primero LLENAR, nos permite obtener los datos de una tabla de peliculas. Despues, tecleamos en la caja de texto la categoria que queremos filtrar y pulsando en el boton FILTRAR nos mostrara las peliculas de dicha categoria. Recuerda que puedes utilizar cualquier base de datos de proyectos anteriores.
Pgina 77
En la imagen de ejemplo, nuevamente tenemos una tabla desplegada en el DataGridView sobre peliculas. Primero usamos el boton llenar para obtener todos los datos de la base de datos. Despues, tecleamos el nombre del CAMPO por el cual queremos que nos ordene la informacion. En la imagen, vemos que seleccionamos el campo pelicula. Pulsamos el boton ORDENA y vemos todas las peliculas ordenadas de la A a la Z. Debe funcionar con cualquier campo de la tabla.
Pgina 78
Vemos en la parte superior estarn los nombres de los campos, y en la parte inferior los registros que contiene. Una vez grabado nuestro archivo de Excel en cualquier carpeta que queramos (pero de preferencia donde estes creando tus practicas), comienza con tu proyecto VB.NET.
Pgina 79
En la imagen de ejemplo, vemos que tenemos un control LABEL, TEXTBOX, DATAGRIDVIEW y un boton. Lo primero que tenemos que hacer es pulsar al boton SELECCIONAR ARCHIVO, para que aparezca una caja de dialogo (visto en ejercicios anteriores) para que ubiques tu archivos de excel. Una vez hecho esto, la ruta y el nombre se despliegan en la caja de texto a manera de informacion, y el contenido de tu archivo de excel en el DATAGRIDVIEW. Debes investigar cual es el codigo necesario para hacer esto.
Pgina 80
Las imgenes no se guardaran en la base de datos, sino que estarn separadas como archivos dentro de la carpeta del proyecto. Aunque tambin pueden estar en una subcarpeta donde la referencia de la imagen es igual al campo de cdigo. Asi por ejemplo:
Pgina 81
Imagen
A200
A200.jpg
A300
A300.jpg
Enlazaremos estas imgenes con su correspondiente registro de la base de datos. Vamos a comenzar. En primer lugar tendremos que tener nuestra base de datos. La llamamos INVENTARIO. Y dentro de esta esta una tabla llamada PRODUCTOS. Que contiene los siguientes campos: Campo Codigo Descripcion FechaEnt Cantidad Depto Tipo Text Text Date / Time Integer Text Tamao 15 50 8 2 50 Pgina 82
0 50 0
Y aunque tenemos 2 campos para fotos, no utilizaremos ninguna de ellas. En el primer campo de FOTO1, es del tipo binario (para almacenar la foto dentro de la base de datos que no haremos), y el segundo FOTO2 como tipo texto por si deseamos grabar la ruta de la foto y usarla en la presentacin. Tenemos que tener algunos datos de prueba, asi como algunas imgenes de los productos que queremos presentar. En el ejemplo, tenemos un boton LLENAR para obtener los datos de nuestra tabla Access, y los botones de siguiente y anterior para navegar entre los registros. Piensa como seria la mejor forma para que presentes los datos junto con las imgenes.
Pgina 83
En el ejemplo de la imagen, vemos una pantalla similar a la practica 15, pero con un campo de texto llamado ubicacin que contiene la ruta de la imagen. Si esta no se encuentra no podra desplegarla.
Pgina 84
En la imagen de ejemplo, vemos un sencillo formulario, que contiene varios botones para probar la conexin, navegar entre los registros y obtener los datos. Realiza una practica usando un SERVIDOR LOCAL primeramente para que hagas las pruebas. Despues, realiza otra practica similar pero con un SERVIDOR REMOTO. Pide a tu profesor que te de la informacion referente a este servidor para que puedas conectarte a el, y obtener los datos.
PRACTICAS 18 22
Estos mas que practicas, son RETOS para cumplir al finalizar el curso. 1.- Hacer una aplicacin que permite registrar en una base de datos los datos de los empleados de una empresa. Los campos son: Nombre, Apellido, Edad, Cargo, Sueldo, Direccin, Telfono y Fecha de contrato. El programa debe permitir al usuario obtener distintos tipos de reporte, como por ejemplo: los empleados que ganen ms de 10,000 pesos, los empleados mayores de 50 aos de edad, etc. 2.- Hacer una aplicacin que permita gestionar un almacn de un supermercado. 3.- Hacer una aplicacin que permita gestionar un sistema de inscripcin de una universidad o un colegio. 4.- Crear un pequeo punto de venta. Esto es un sistema que permita vender artculos, imprimir facturas y generar reportes de ventas. 5.- Crear una pequea aplicacin que permita gestionar el almacn de una farmacia.
Pgina 85
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: