Вы находитесь на странице: 1из 30

Hugo Becquer Paz Quintero

Acceso a datos desde Visual Basic a MySQL


Para lograr el acceso a datos de una base de datos construida en MySQL, desde un programa implementado en Visual Basic, debe tener en cuenta: Acceso a un Servidor con alguna versin de MySQL funcionando Haber diseado e implementado la base de datos en MySQL Tener instalado el controlador MySQL para conexin ODBC Realizar la configuracin del ODBC para preparar la conectividad desde Windows a MySQL Establecer la conexin desde el cdigo del lenguaje de Visual Basic 2005 segn se requiera.

Acceso a un Servidor con alguna versin de MySQL funcionando


En la ejecucin del Setup.exe DE MYSQL ESSENTIAL se mostrar un asistente que lo guiar a travs del proceso de instalacin, como se muestra en la .

Figura 1. Asistente de instalacin de MySQL Server 5.0

Hugo Becquer Paz Quintero

Ante la clic en Next.

Figura 2. Paso 2 del asistente de instalacin de MySQL Server

Para las pruebas realizadas se seleccion la opcin Complete, de la , que instala todas las opciones contenidas en el paquete pero exige mayor espacio en disco. Clic en Next y se mostrar la tercera ventana que muestra el camino donde se instalar el software. Clic en Install. Despus de esto se inicia el proceso. Al terminar el proceso de instalacin, se muestra una ventana de publicidad de MySQL Enterprise, desde donde se hace clic en el botn Next, e igualmente Next en la siguiente, hasta que aparezca la ventana de la .

Figura 3. Ventana de inicio de configuracin de MySQL Server

Al dejar seleccionada la opcin Configure the MySQL Server now, y presionar el botn Finish, se abrir la ventana para la configuracin de la instancia del servidor MySQL como se muestra en la . 2

Hugo Becquer Paz Quintero

Figura 4. Ventana inicial para configuracin de Instancia del Servidor MySQL

A la ventana de la tambin se puede llegar desde la opcin todos los programas del men de Inicio, la opcin MySQL y dentro de esta la opcin MySQL Server 5.0 que contiene las opciones que se muestran en la .

Figura 5. Opciones de MySQL Server 5.0

Se sugiere ejecutar MySQL Server Instance Configuration Wizard (Asistente de configuracin de la Instancia de Servidor MySQL) para tener acceso a la opcin MySQL Command Line Client, desde donde podr crear y manipular bases de datos de MySQL, cuando as se requiera.

Figura 6. Paso 2 del asistente de configuracin de Instancia del Servidor MySQL

Hugo Becquer Paz Quintero

De la , seleccione la opcin Reconfigure Instance. Clic en Next.

Figura 7. Paso 3 del asistente de configuracin de Instancia del Servidor MySQL

De la , se supone se usar para desarrollo, entonces seleccione la opcin Developer Machine. Clic en Next

Figura 8. Paso 4 del asistente de configuracin de instancia del servidor MySQL

De la , seleccione Multifunctional Database. Clic en Next.

Figura 9. Paso 5 del asistente de Configuracin de Instancia del Servidor MySQL

Hugo Becquer Paz Quintero

La , le permitir seleccionar otro drive, si se dispone. De otra forma se deja por defecto. Clic en Next.

Figura 10.

Paso 6 del asistente de Configuracin de Instancia del Servidor MySQL

En la seleccione Decision Support (DSS)/OLAP, porque a lo ms se presentarn 20 conexiones. Clic en Next.

Hugo Becquer Paz Quintero

Figura 11.

Paso 7 del asistente de Configuracin de Instancia del Servidor MySQL

La se puede dejar como se muestra, seleccionada la disposicin del TCP/ Networking y la activacin de la opcin Enable Strict Mode. Esta ltima forzar al equipo a comportarse como un servidor de base de datos. Clic en Next. Los pasos 8 y 9 los puede dejar como aparecen por defecto. Clic en Next, Next.

Figura 12.

Paso 6 del asistente de Configuracin de Instancia del Servidor MySQL

En la se debe digitar la clave que considere apropiada o la sugerida para este ejemplo. Clic en Next y en la prxima ventana clic en Execute, en donde deber esperar unos segundos segn la mquina en donde est realizando esta configuracin.

Hugo Becquer Paz Quintero

Diseo e implementacin de la base de datos en MySQL


Puede disear una base de datos de prueba, desde el punto indicativo, seleccionando, desde las opciones mostradas en la la primera, es decir: MySQL Command Line Client. La ventana que se abre le pedir el password, digite el que haya establecido en la configuracin, a lo cual observar la ventana de la .

Figura 13.

Ventana de la lnea de comando del cliente de MySQL

Por ejemplo, disee la base de datos que se llamar compras, con la estructura que se muestra en la .

Hugo Becquer Paz Quintero

Figura 14.

Estructura de tablas y relaciones de una base de datos para compras

Se recomienda revisar los comandos que se encuentran en MySQL Manual, como se muestra en la . En la lnea de comandos escriba las instrucciones que se muestran en la para crear la base de datos y las tablas correspondientes. Instrucciones de lnea de comandos usadas para crear las tablas de la base de datos compras Instruccin de lnea de comandos Efecto CREATE DATABASE compras; Crea la tabla compras USE compras; Pone en uso la base de datos compras CREATE TABLE proveedor( Crea la tabla con los nit VARCHAR(10), campos sugeridos en la . nombre VARCHAR(40), direccion VARCHAR(50), telefono VARCHAR(15)); SHOW TABLES; Muestra las tablas que se hayan creado en la base de datos compras DESCRIBE proveedor; Muestra los campos y sus caractersticas de la tabla proveedor DROP TABLE proveedor; Elimina la tabla proveedor creada previamente. CREATE TABLE proveedor( Crea la tabla con los nit VARCHAR(10) NOT NULL, campos sugeridos en la , nombre VARCHAR(40), estableciendo el nit direccion VARCHAR(50), como llave primaria. telefono VARCHAR(15), PRIMARY KEY (nit));

Hugo Becquer Paz Quintero

Continuacin de instrucciones de lnea de comandos tablas de la base de datos compras. Instruccin de lnea de comandos CREATE TABLE facturaCompra( numero VARCHAR(5) NOT NULL, fecha DATE, nitprov VARCHAR(10) NOT NULL REFERENCES proveedor(nit), PRIMARY KEY (numero)); CREATE TABLE productoComprado( referencia VARCHAR(5) NOT NULL REFERENCES producto(refeProducto), numfact VARCHAR(5) NOT NULL REFERENCES facturaCompra(numero), cantidad INT(4) UNSIGNED ZEROFILL DEFAULT 0000, vrund DOUBLE (16,2) NOT NULL DEFAULT 000); CREATE TABLE producto( refeProducto VARCHAR(5) NOT NULL, descripcion VARCHAR(30), unidad VARCHAR(15), PRIMARY KEY (refeProducto));

usadas para crear las Efecto Crea la table facturaCompra. Se define el campo numero como llave primaria y el campo nitprov como llave fornea. Los dos campos se definen no nulos. Se crea la tabla productoComprado. Se definen las variables referencia y numfact como llaves forneas. Se definen las variables cantidad y vrund como numricas. Crea la tabla producto. Se crea la refeProducto como campo llave.

Hugo Becquer Paz Quintero

Instalacin del controlador MySQL para conexin ODBC


Verifique la existencia del controlador ODBC, lo cual puede hacer desde el panel de control, herramientas administrativas, orgenes de datos (ODBC), DNS del sistema, clic en Agregar y observar la ventana de la , que le muestra, cuando no existe, el controlador, porque no aparece en orden alfabtico la opcin que inicia con MySQL.

Figura 15.

Ventana cuando se va crear un origen de datos ODBC

Para la instalacin del controlador ODBC de bases de datos MySQL es necesario el archivo mysql-connector-odbc-5.1.5-win64.msi, desde el sitio: http://dev.mysql.com/downloads/connector/odbc/5.1.html. Despus de la descarga del archivo, el cual utilic para escribir este documento, se ejecuta y se procede con la instalacin, como se indica desde la .

Figura 16. Ventana de apertura del archivo mysql-connector-odbc-5.1.5win32.msi, para instalacin del controlador ODBC para MySQL.

Al hacer clic en el botn Ejecutar de la ventana de la , se mostrar un asistente que lo guiar a travs del proceso de instalacin, como se muestra en la . Si no 10

Hugo Becquer Paz Quintero

se muestra la misma ventana de la figura en mencin, es porque tiene instalado este controlador, en este caso es bueno revisar desde el panel de control, herramientas administrativas, Orgenes de datos (ODBC), DNS del sistema, clic en Agregar y observar la ventana de la , que le muestra, cuando no existe, el controlador, porque no aparece la opcin MySQL ODBC 5.1 Driver.

Figura 17.

Asistente para la instalacin del controlador ODBC de MySQL

Al hacer clic en el botn Next de la , se observar la ventana de la .

Figura 18.

Paso 2 del asistente para la instalacin del controlador ODBC MySQL

Como se observa en la , se seleccion la opcin Complete, para instalar el controlador completamente, seguidamente clic en Next y en la ventana siguiente clic en Install.

11

Hugo Becquer Paz Quintero

Configuracin del ODBC para preparar la conectividad desde Windows a MySQL


Desde Windows XP: Clic en Inicio, Panel de control, Herramientas administrativas, Orgenes de datos (ODBC) se ver la ventana Administrador de orgenes de datos ODBC, como en la .

Figura 19.

Ventana del administrador de orgenes de datos ODBC

Seleccione la pestaa DNS del sistema. Clic en Agregar y ver la ventana como la .

Figura 20.

Ventana crear nuevo origen de datos

Desde la ventana Crear nuevo origen de datos seleccione MySQL ODBC 5.1 Driver, clic en Finalizar. Se abre la ventana de la .

12

Hugo Becquer Paz Quintero

Figura 21.

Ventana MySQL Connector/ODBC Data Source Configuration

Es opcional incluir el password o el user en la ventana de la . Si no se incluyen, deben indicarse en la cadena de conexin del cdigo dentro del programa que se realice el acceso a la base de datos. Puede hacer clic sobre el botn Test para probar si est bien la conexin a la base de datos, caso en el cual se mostrar el mensaje de la .

Figura 22.

Caja de dialogo resultante de la evaluacin de conectividad exitosa a la base de datos

Despus de haber comprobado la conexin, clic en Aceptar y clic en OK. Regresar a la ventana de la , en donde se aprecia que la conexin a la base de datos compras, creada en MySQL, qued establecida.

13

Hugo Becquer Paz Quintero

Figura 23. Ventana del administrador de orgenes de datos ODBC, incluye conexin a la base de datos compras de MySQL

Clic en el botn Aceptar y puede proceder con el acceso a la base de datos desde el lenguaje, en Windows, que se proponga utilizar.

14

Hugo Becquer Paz Quintero

Conexin desde el cdigo del lenguaje de Visual Basic 2005 a la base de datos compras creada en MySQL
Para el ejemplo, se crear un nuevo proyecto en Visual Basic 2005 que se llamar bdcompras. La muestra un posible diseo del formulario desde donde se entrarn los datos del proveedor.

Figura 24.

Formulario para entrada de datos del proveedor en la base de datos compras

El botn se puede programar inicialmente para guardar el registro de un proveedor que se digite en las cajas de textos del formulario, como se muestra a continuacin.
Public Class Form1 'Cadena de conexin a la base de datos compras por medio del ODBC Dim cadenaConexion As String = "DSN=compras" Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim cadenaConsulta As String Dim nit As String = "" Dim nombre As String = "" Dim direccion As String = "" Dim telefono As String = "" If TextBox1.Text <> "" And TextBox2.Text <> "" _ And TextBox3.Text <> "" Then nit = TextBox1.Text nombre = TextBox2.Text direccion = TextBox3.Text telefono = TextBox4.Text cadenaConsulta = "INSERT INTO proveedor(nit, nombre, & _ direccion, telefono) Values('" & nit & "', '" & _ nombre & "', '" & direccion & "','" & telefono & "')"

15

Hugo Becquer Paz Quintero

Dim command As New Odbc.OdbcCommand(cadenaConsulta) Using Conexion As New Odbc.OdbcConnection(cadenaConexion) command.Connection = Conexion Conexion.Open() command.ExecuteNonQuery() Conexion.Close() End Using TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox1.Focus() Else MsgBox("Debe digitar los datos") End If End Sub End Class

El anterior cdigo se puede mejorar para que valide si el nit existe, caso en el cual debe mostrar un cuadro de mensaje indicndolo. Esta mejora puede verse a continuacin:
Public Class Form1 'Cadena de conexin a la base de datos compras por medio del ODBC Dim cadenaConexion As String = "DSN=compras" Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim cadenaConsulta As String Dim nit As String = "" Dim nombre As String = "" Dim direccion As String = "" Dim telefono As String = "" Dim cadenaCons As String = "" If TextBox1.Text <> "" And TextBox2.Text <> "" And _ TextBox3.Text <> "" Then nit = TextBox1.Text nombre = TextBox2.Text direccion = TextBox3.Text telefono = TextBox4.Text cadenaCons = "SELECT * FROM proveedor WHERE nit = '" & _ nit & "'" If Not (registroExiste(cadenaCons, cadenaConexion)) Then cadenaConsulta = "INSERT INTO proveedor(nit, &_ nombre, direccion, telefono) Values('" & nit & _ "', '" & nombre & "', '" & direccion & "','" & _ telefono & "')" Dim command As New Odbc.OdbcCommand(cadenaConsulta) Using Conexion As New Odbc.OdbcConnection(cadenaConexion)

16

Hugo Becquer Paz Quintero

command.Connection = Conexion Conexion.Open() command.ExecuteNonQuery() Conexion.Close() End Using TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox1.Focus() Else MsgBox("El registro ya existe") TextBox1.SelectAll() TextBox1.Focus() End If

Else

MsgBox("Debe digitar los datos") End If End Sub Public Function registroExiste(ByVal cCn As String, _ ByVal cCx As String) As Boolean Dim sw As Boolean Dim command As New Odbc.OdbcCommand(cCn) Dim reg As Odbc.OdbcDataReader Using Conexion As New Odbc.OdbcConnection(cCx) command.Connection = Conexion Conexion.Open() reg = command.ExecuteReader() If reg.Read Then sw = True End If End Using Return sw End Function End Class

El cdigo anterior incluye una funcin llamada registroExiste, que se usa para buscar si existe o no el nit digitado por el usuario en la tabla proveedor. Esta funcin retorna True si el registro existe, False en caso contrario. Por otro lado podra querer editar el registro en el momento de recibir el mensaje que indica que el registro no existe; una manera de hacerlo puede ser mediante otro procedimiento que, para el efecto, se llamar recibeEdicion. Dicho procedimiento recibe como argumentos la cadena de consulta, la cadena de conexin y tres variables que devolvern los datos que se editarn, por esta razn dichas variables se declaran por referencia (ByRef). A continuacin se muestra la clase Form1 as implementada.
Public Class Form1

17

Hugo Becquer Paz Quintero

'Cadena de conexin a la base de datos compras por medio del ODBC Dim cadenaConexion As String = "DSN=compras" Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim cadenaConsulta As String Dim nit As String = "" Dim nombre As String = "" Dim direccion As String = "" Dim telefono As String = "" Dim cadenaCons As String = "" If TextBox1.Text <> "" And TextBox2.Text <> "" And _ TextBox3.Text <> "" Then nit = TextBox1.Text nombre = TextBox2.Text direccion = TextBox3.Text telefono = TextBox4.Text cadenaCons = "SELECT * FROM proveedor WHERE nit = '" & _ nit & "'" If Not (registroExiste(cadenaCons, cadenaConexion)) Then cadenaConsulta = "INSERT INTO proveedor(nit, " & _ "nombre, direccion, telefono) Values('" & nit & _ "', '" & nombre & "', '" & direccion & "','" & _ telefono & "')" Dim command As New Odbc.OdbcCommand(cadenaConsulta) Using Conexion As New Odbc.OdbcConnection(cadenaConexion) command.Connection = Conexion Conexion.Open() command.ExecuteNonQuery() Conexion.Close() End Using TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox1.Focus() Else If MsgBox("El cdigo existe. Desea editarlo?", _ MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then recibeEdicion(cadenaCons, cadenaConexion, nombre, _ direccion, telefono) TextBox2.Text = nombre TextBox3.Text = direccion TextBox4.Text = telefono Else TextBox1.SelectAll() TextBox1.Focus() End If End If Else MsgBox("Debe digitar los datos") End If End Sub Public Sub recibeEdicion(ByVal cCn As String, _ ByVal cCx As String, ByRef nom As String, _

18

Hugo Becquer Paz Quintero

ByRef dire As String, ByRef tele As String) Dim command As New Odbc.OdbcCommand(cCn) Dim reg As Odbc.OdbcDataReader Using Conexion As New Odbc.OdbcConnection(cCx) command.Connection = Conexion Conexion.Open() reg = command.ExecuteReader() If reg.Read Then nom = reg.Item("nombre") dire = reg.Item("direccion") tele = reg.Item("telefono") End If End Using End Sub Public Function registroExiste(ByVal cCn As String, _ ByVal cCx As String) As Boolean Dim sw As Boolean Dim command As New Odbc.OdbcCommand(cCn) Dim reg As Odbc.OdbcDataReader Using Conexion As New Odbc.OdbcConnection(cCx) command.Connection = Conexion Conexion.Open() reg = command.ExecuteReader() If reg.Read Then sw = True End If End Using Return sw End Function End Class

Se puede incluir un tercer botn para eliminar un registro en particular. Para el caso se eliminar el registro que coincida con el Nit que se digite. El botn se inactiva cuando se cargue el formulario (en Form1_Load) y cuando el registro se guarda (en el correspondiente segmento del procedimiento Button1_Click), asignando False a la propiedad Enabled y se activar cuando se haya editado algn registro (esto ocurre en el segmento que evala si el cdigo existe, en donde se debe adicionar la instruccin: Button2.Enabled = True). Veamos seguidamente los procedimientos adicionales implementados en la clase Form1.
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Button2.Enabled = False End Sub Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim nit As String = TextBox1.Text Dim cadenaConsulta As String = "DELETE FROM proveedor" & _ " WHERE nit = '" & nit & "'" Dim command As New Odbc.OdbcCommand(cadenaConsulta)

19

Hugo Becquer Paz Quintero

If MsgBox("Est seguro desea eliminar el registro?", _ MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Using Conexion As New Odbc.OdbcConnection(cadenaConexion) command.Connection = Conexion Conexion.Open() If command.ExecuteNonQuery() > 0 Then MsgBox("El registro fue eliminado") Else MsgBox("No se encontro registro") End If Conexion.Close() End Using End If End Sub

Tambin se puede insertar un botn adicional que se programar para hacer alguna modificacin a un registro editado, cuyo respectivo cdigo se muestra a continuacin.
Private Sub Button3_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button3.Click Dim nit As String = TextBox1.Text Dim nombre As String = TextBox2.Text Dim direccion As String = TextBox3.Text Dim telefono As String = TextBox4.Text Dim cadenaConsulta As String = "UPDATE proveedor SET nit = '" & _ nit & "', nombre = '" & nombre & "', direccion = '" & _ direccion & "', telefono = '" & telefono & "' WHERE nit = '" & _ nit & "'" Dim command As New Odbc.OdbcCommand(cadenaConsulta) If TextBox1.Text <> "" And TextBox2.Text <> "" And _ TextBox3.Text <> "" Then Using Conexion As New Odbc.OdbcConnection(cadenaConexion) command.Connection = Conexion Conexion.Open() If command.ExecuteNonQuery() > 0 Then MsgBox("el registro fue actualizado") Else MsgBox("No se encontr regirstro") End If End Using Else MsgBox("Debe digitar informacin a actualizar") End If End Sub

Un cuarto botn que limpie las cajas de texto y deje el cursor listo para entrar el nit, se muestra el procedimiento seguidamente.
Private Sub Button4_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button4.Click TextBox1.Text = ""

20

Hugo Becquer Paz Quintero

TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox1.Focus() Button2.Enabled = False Button3.Enabled = False End Sub

El formulario del diseo anteriormente explicado se podr ver como en la .

Figura 25.

Ventana del formulario proveedor de la base de datos compras

Existen algunos mtodos que pueden disearse para que sean utilizados desde otros formularios o clases. En este caso habra que definirlos en una clase en particular. Estos mtodos son fcilmente identificables, los cuales pueden ser: el mtodo para insertar un registro, el que evala si el registro existe, el que elimina y el que actualiza un registro. Lo anterior se ilustrar creando una clase llamada AccesoDatos que contendr los mtodos mencionados adaptados a la clase. Desde cada formulario que lo requiera, se instanciar esta clase para hacer uso de dichos procedimientos. La clase mencionada podr disearse e implementarse de la manera como se muestra a continuacin.
Public Class AccesoDatos Private cCx As String Public Sub New(ByVal conex As String) Me.cCx = conex End Sub Public Function insertarRegistro(ByVal cCn As String) As Integer Dim resp As Integer = -1 Dim command As New Odbc.OdbcCommand(cCn) Try Using Conexion As New Odbc.OdbcConnection(cCx) command.Connection = Conexion Conexion.Open() command.ExecuteNonQuery()

21

Hugo Becquer Paz Quintero

resp = 1 Conexion.Close() End Using Catch ex As Exception MsgBox(ex.ToString) End Try Return resp End Function Public Function registroExiste(ByVal cCn As String) As Boolean Dim sw As Boolean Dim command As New Odbc.OdbcCommand(cCn) Dim reg As Odbc.OdbcDataReader Using Conexion As New Odbc.OdbcConnection(cCx) command.Connection = Conexion Conexion.Open() reg = command.ExecuteReader() If reg.Read Then sw = True End If Conexion.Close() End Using Return sw End Function Public Function eliminar(ByVal cCn As String) As Integer Dim resp As Integer = -1 Dim command As New Odbc.OdbcCommand(cCn) If MsgBox("Est seguro desea eliminar el registro?", _ MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Using Conexion As New Odbc.OdbcConnection(cCx) command.Connection = Conexion Conexion.Open() resp = command.ExecuteNonQuery() Conexion.Close() End Using End If Return resp End Function Public Function actualizar(ByVal cCn As String) As Integer Dim resp As Integer = -1 Dim command As New Odbc.OdbcCommand(cCn) Using Conexion As New Odbc.OdbcConnection(cCx) command.Connection = Conexion Conexion.Open() resp = command.ExecuteNonQuery() Conexion.Close() End Using Return resp End Function End Class

22

Hugo Becquer Paz Quintero

La clase AccesoDatos se implement con un procedimiento constructor que recibiera la cadena de conexin a una sola base de datos. Tambin se implementaron cuatro funciones, cada una con un fin explcito indicado por el respectivo nombre: insertarRegistro, registroExiste, eliminar, actualizar. A continuacin se muestra la clase Form1 diseada anteriormente, modificada para que haga uso de la clase AccesoDatos. Le corresponde el mismo formulario de la .
Public Class Form1 'Cadena de conexin a la base de datos compras por medio del ODBC Dim cadenaConexion As String = "DSN=compras" 'instancia a la clase DBManejo que recibe la cadena de conexin Dim dbm As AccesoDatos = New AccesoDatos(cadenaConexion) Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim cadenaConsulta As String Dim nit As String = "" Dim nombre As String = "" Dim direccion As String = "" Dim telefono As String = "" Dim cadenaCons As String = "" If TextBox1.Text <> "" And TextBox2.Text <> "" And _ TextBox3.Text <> "" Then nit = TextBox1.Text nombre = TextBox2.Text direccion = TextBox3.Text telefono = TextBox4.Text cadenaCons = "SELECT * FROM proveedor WHERE nit = '" & _ nit & "'" If Not dbm.registroExiste(cadenaCons) Then cadenaConsulta = "INSERT INTO proveedor(nit, " & _ "nombre, direccion, telefono) Values('" & nit & _ "', '" & nombre & "', '" & direccion & "','" & _ telefono & "')" If dbm.insertarRegistro(cadenaConsulta) > 0 Then TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox1.Focus() Button2.Enabled = False Button3.Enabled = False End If Else If MsgBox("El cdigo existe. Desea editarlo?", _ MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then recibeEdicion(cadenaCons, cadenaConexion, nombre, _ direccion, telefono) TextBox2.Text = nombre TextBox3.Text = direccion TextBox4.Text = telefono Button2.Enabled = True

23

Hugo Becquer Paz Quintero

Button3.Enabled = True TextBox1.SelectAll() TextBox1.Focus() End If End If Else

Else

MsgBox("Debe digitar los datos") End If End Sub Public Sub recibeEdicion(ByVal cCn As String, _ ByVal cCx As String, ByRef nom As String, _ ByRef dire As String, ByRef tele As String) Dim command As New Odbc.OdbcCommand(cCn) Dim reg As Odbc.OdbcDataReader Using Conexion As New Odbc.OdbcConnection(cCx) command.Connection = Conexion Conexion.Open() reg = command.ExecuteReader() If reg.Read Then nom = reg.Item("nombre") dire = reg.Item("direccion") tele = reg.Item("telefono") End If Conexion.Close() End Using End Sub Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Button2.Enabled = False Button3.Enabled = False End Sub Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim nit As String = TextBox1.Text Dim cadenaConsulta As String = "DELETE FROM proveedor" & _ " WHERE nit = '" & nit & "'" If dbm.eliminar(cadenaConsulta) > 0 Then MsgBox("El registro fue eliminado") Else MsgBox("No se encontro registro") End If End Sub Private Sub Button3_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button3.Click Dim nit As String = TextBox1.Text Dim nombre As String = TextBox2.Text Dim direccion As String = TextBox3.Text Dim telefono As String = TextBox4.Text

24

Hugo Becquer Paz Quintero

Dim cadenaConsulta As String = "UPDATE proveedor SET nit = '" & _ nit & "', nombre = '" & nombre & "', direccion = '" & _ direccion & "', telefono = '" & telefono & "' WHERE nit = '" & _ nit & "'" Dim command As New Odbc.OdbcCommand(cadenaConsulta) If TextBox1.Text <> "" And TextBox2.Text <> "" And _ TextBox3.Text <> "" Then If dbm.actualizar(cadenaConsulta) > 0 Then MsgBox("el registro fue actualizado") Else MsgBox("No se encontr regirstro") End If Else MsgBox("Debe digitar informacin a actualizar") End If End Sub Private Sub Button4_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button4.Click TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox1.Focus() Button2.Enabled = False Button3.Enabled = False End Sub End Class

Se agregar un nuevo formulario para la entrada de productos que supuestamente adquiere la organizacin que dispondr de la base de datos llamada compras. El formulario se disear con caractersticas similares al formulario proveedor. La clase Form2, que corresponde a este segundo formulario, reutilizar la clase AccesoDatos para la manipulacin de los respectivos datos de la tabla producto. La muestra dicho formulario y el cdigo subsiguiente contiene los procedimientos del Form2, que no varan mucho respecto los procedimientos utilizados para el Form1. Lo nico nuevo en este formulario es el uso de un ComboBox para la seleccin de la unidad del producto

Figura 26.

Formulario para captura de productos

25

Hugo Becquer Paz Quintero

Public Class Form2 Dim cadenaConexion As String = "DSN=compras" Dim dbm As AccesoDatos = New AccesoDatos(cadenaConexion) Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim cadenaConsulta As String Dim referencia As String = "" Dim descripcion As String = "" Dim unidad As String = "" Dim telefono As String = "" Dim cadenaCons As String = "" If TextBox1.Text <> "" And TextBox2.Text <> "" Then referencia = TextBox1.Text descripcion = TextBox2.Text unidad = ComboBox1.Text cadenaCons = "SELECT * FROM producto" & _ " WHERE refeProducto = '" & referencia & "'" If Not dbm.registroExiste(cadenaCons) Then cadenaConsulta = "INSERT INTO producto" & _ "(refeProducto, " & _ "descripcion, unidad) Values('" & referencia & _ "', '" & descripcion & "', '" & unidad & "')" If dbm.insertarRegistro(cadenaConsulta) > 0 Then limpiar() End If Else If MsgBox("El cdigo existe. Desea editarlo?", _ MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then recibeEdicion(cadenaCons, cadenaConexion, _ descripcion, unidad) TextBox2.Text = descripcion ComboBox1.Text = unidad Button2.Enabled = True

26

Hugo Becquer Paz Quintero

Button3.Enabled = True TextBox1.SelectAll() TextBox1.Focus() End If End If Else

Else

MsgBox("Debe digitar los datos") End If End Sub Public Sub recibeEdicion(ByVal cCn As String, _ ByVal cCx As String, ByRef desc As String, ByRef und As String) Dim command As New Odbc.OdbcCommand(cCn) Dim reg As Odbc.OdbcDataReader Using Conexion As New Odbc.OdbcConnection(cCx) command.Connection = Conexion Conexion.Open() reg = command.ExecuteReader() If reg.Read Then desc = reg.Item("descripcion") und = reg.Item("unidad") End If Conexion.Close() End Using End Sub Private Sub Button4_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button4.Click limpiar() End Sub Private Sub limpiar() TextBox1.Text = "" TextBox2.Text = "" ComboBox1.SelectedIndex = -1 ComboBox1.Text = "Seleccione la unidad" Button2.Enabled = False Button3.Enabled = False TextBox1.Focus() End Sub Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim referencia As String = TextBox1.Text Dim cadenaConsulta As String = "DELETE FROM producto" & _ " WHERE refeProducto = '" & referencia & "'" If dbm.eliminar(cadenaConsulta) > 0 Then MsgBox("El registro fue eliminado") Else MsgBox("No se encontro registro") End If End Sub

27

Hugo Becquer Paz Quintero

Private Sub Button3_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button3.Click Dim referencia As String = TextBox1.Text Dim descripcion As String = TextBox2.Text Dim unidad As String = ComboBox1.Text Dim cadenaConsulta As String = "UPDATE producto " & _ "SET refeProducto = '" & referencia & "', descripcion = '" & _ descripcion & "', unidad = '" & unidad & _ "' WHERE refeProducto = '" & referencia & "'" Dim command As New Odbc.OdbcCommand(cadenaConsulta) If TextBox1.Text <> "" And TextBox2.Text <> "" Then If dbm.actualizar(cadenaConsulta) > 0 Then MsgBox("el registro fue actualizado") Else MsgBox("No se encontr regirstro") End If Else MsgBox("Debe digitar informacin a actualizar") End If End Sub End Class

28

Hugo Becquer Paz Quintero

Inserte un formulario adicional en donde mostrar un listado del contenido en una de las tablas. Como ejemplo se mostrarn los datos de la tabla proveedor. Los datos se mostrarn en un objeto DataGridView que se configurar con cuatro columnas, para los respectivos datos, como se muestra en la figura. El objeto DataGridView se puede configurar desde el modo de edicin o desde cdigo. Para configurar desde el modo edicin se hace clic en la flecha del extremo superior derecho. Si lo hace por cdigo deber insertar un procedimiento con las instrucciones correspondientes, que se deber invocar al principio del procedimiento Load.

El siguiente cdigo se deber insertar en el procedimiento Reporte_Load, al cual se llega haciendo doble clic en el fondo del formulario. Public Class Reporte Dim cadenaConexion As String = "DSN=compras" Private Sub Reporte_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim fil As Integer Dim cadenaConsulta As String = "SELECT * FROM proveedor" Dim command As New Odbc.OdbcCommand(cadenaConsulta) Dim reg As Odbc.OdbcDataReader Using Conexion As New Odbc.OdbcConnection(cadenaConexion) command.Connection = Conexion Conexion.Open() reg = command.ExecuteReader() 'TextBox3.Clear()

29

Hugo Becquer Paz Quintero

While reg.Read DataGridView1.Rows.Add() 'Inserta una nueva fila DataGridView1.Item("nit", fil).Value = reg.Item("nit") DataGridView1.Item("nombre", fil).Value = reg.Item("nombre") DataGridView1.Item("direccion", fil).Value = reg.Item("direccion") DataGridView1.Item("telefono", fil).Value = reg.Item("telefono") fil = fil + 1 End While End Using End Sub End Class

El siguiente procedimiento permitira ejecutar cualquier evento desde alguna fila del DataGridView, en este caso al hacer doble clic en una celda.
Private Sub DataGridView1_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick If e.RowIndex > -1 And e.ColumnIndex > -1 Then Dim codigo As String = e.ColumnIndex Dim nombre As String = DataGridView1.Item(1, e.RowIndex).Value Dim resp As Integer = MsgBox("Desea eliminar el registro de " & nombre & "?", MsgBoxStyle.YesNo + MsgBoxStyle.Critical, "Warning") If resp = vbYes Then MsgBox("Se invoca el proc. eliminar" & DataGridView1.Item(e.ColumnIndex, e.RowIndex).Value) End If End If End Sub

30

Вам также может понравиться