Acceso a Datos Desde Visual Basic a MySQL by DARKE1

39
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 versión de MySQL funcionando Haber diseñado e implementado la base de datos en MySQL Tener instalado el controlador MySQL para conexión ODBC Realizar la configuración del ODBC para preparar la conectividad desde Windows a MySQL Establecer la conexión desde el código del lenguaje de Visual Basic 2005 según se requiera. Acceso a un Servidor con alguna versión de MySQL funcionando En la ejecución del Setup.exe DE MYSQL ESSENTIAL se mostrará un asistente que lo guiará a través del proceso de instalación, como se muestra en la Figura 1.. Figura 1. Asistente de instalación de MySQL Server 5.0 1

Transcript of Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Page 1: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

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 versión de MySQL funcionando Haber diseñado e implementado la base de datos en MySQL Tener instalado el controlador MySQL para conexión ODBC Realizar la configuración del ODBC para preparar la conectividad desde Windows a MySQL Establecer la conexión desde el código del lenguaje de Visual Basic 2005 según se requiera.

Acceso a un Servidor con alguna versión de MySQL funcionando

En la ejecución del Setup.exe DE MYSQL ESSENTIAL se mostrará un asistente que lo guiará a través del proceso de instalación, como se muestra en la Figura 1.

Figura 1. Asistente de instalación de MySQL Server 5.0

1

Page 2: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

Ante la Figura 1 clic en Next.

Figura 2. Paso 2 del asistente de instalación de MySQL Server

Para las pruebas realizadas se seleccionó la opción Complete, de la Figura 2, 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. Después de esto se inicia el proceso. Al terminar el proceso de instalación, se muestra una ventana de publicidad de MySQL Enterprise, desde donde se hace clic en el botón Next, e igualmente Next en la siguiente, hasta que aparezca la ventana de la Figura 3.

Figura 3. Ventana de inicio de configuración de MySQL Server

Al dejar seleccionada la opción Configure the MySQL Server now, y presionar el botón Finish, se abrirá la ventana para la configuración de la instancia del servidor MySQL como se muestra en la Figura 4.

2

Page 3: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

Figura 4. Ventana inicial para configuración de Instancia del Servidor MySQL

A la ventana de la Figura 4 también se puede llegar desde la opción todos los programas del menú de Inicio, la opción MySQL y dentro de esta la opción MySQL Server 5.0 que contiene las opciones que se muestran en la Figura 5.

Figura 5. Opciones de MySQL Server 5.0

Se sugiere ejecutar MySQL Server Instance Configuration Wizard (Asistente de configuración de la Instancia de Servidor MySQL) para tener acceso a la opción 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 configuración de Instancia del Servidor MySQL

3

Page 4: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

De la Figura 6, seleccione la opción Reconfigure Instance. Clic en Next.

Figura 7. Paso 3 del asistente de configuración de Instancia del Servidor MySQL

De la Figura 7, se supone se usará para desarrollo, entonces seleccione la opción Developer Machine. Clic en Next

Figura 8. Paso 4 del asistente de configuración de instancia del servidor MySQL

De la Figura 8, seleccione Multifunctional Database. Clic en Next.

Figura 9. Paso 5 del asistente de Configuración de Instancia del Servidor MySQL

4

Page 5: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

La Figura 9, 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 Configuración de Instancia del Servidor MySQL

En la Figura 10 seleccione Decision Support (DSS)/OLAP, porque a lo más se presentarán 20 conexiones. Clic en Next.

5

Page 6: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

Figura 11. Paso 7 del asistente de Configuración de Instancia del Servidor MySQL

La Figura 11 se puede dejar como se muestra, seleccionada la disposición del TCP/ Networking y la activación de la opción 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 Configuración de Instancia del Servidor MySQL

En la Figura 12 se debe digitar la clave que considere apropiada o la sugerida para este ejemplo. Clic en Next y en la próxima ventana clic en Execute, en donde deberá esperar unos segundos según la máquina en donde esté realizando esta configuración.

6

Page 7: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

Diseño e implementación de la base de datos en MySQL

Puede diseñar una base de datos de prueba, desde el punto indicativo, seleccionando, desde las opciones mostradas en la Figura 5 la primera, es decir: MySQL Command Line Client. La ventana que se abre le pedirá el password, digite el que haya establecido en la configuración, a lo cual observará la ventana de la Figura 13.

Figura 13. Ventana de la línea de comando del cliente de MySQL

Por ejemplo, diseñe la base de datos que se llamará compras, con la estructura que se muestra en la Figura 14.

7

Page 8: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

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 Figura 5. En la línea de comandos escriba las instrucciones que se muestran en la Tabla 1 para crear la base de datos y las tablas correspondientes.

Tabla 1. Instrucciones de línea de comandos usadas para crear las tablas de la base de datos compras

Instrucción de línea de comandos EfectoCREATE DATABASE compras; Crea la tabla comprasUSE compras; Pone en uso la base de datos

comprasCREATE TABLE proveedor( nit VARCHAR(10), nombre VARCHAR(40), direccion VARCHAR(50), telefono VARCHAR(15));

Crea la tabla con los campos sugeridos en la Figura 14.

SHOW TABLES; Muestra las tablas que se hayan creado en la base de datos compras

DESCRIBE proveedor; Muestra los campos y sus características de la tabla proveedor

DROP TABLE proveedor; Elimina la tabla proveedor creada previamente.

CREATE TABLE proveedor( nit VARCHAR(10) NOT NULL, nombre VARCHAR(40), direccion VARCHAR(50), telefono VARCHAR(15), PRIMARY KEY (nit));

Crea la tabla con los campos sugeridos en la Figura 14, estableciendo el nit como llave primaria.

8

Page 9: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

Tabla 2. Continuación de instrucciones de línea de comandos usadas para crear las tablas de la base de datos compras.

Instrucción de línea de comandos EfectoCREATE TABLE facturaCompra( numero VARCHAR(5) NOT NULL, fecha DATE, nitprov VARCHAR(10) NOT NULL REFERENCES proveedor(nit), PRIMARY KEY (numero));

Crea la table facturaCompra. Se define el campo numero como llave primaria y el campo nitprov como llave foránea. Los dos campos se definen no nulos.

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’);

Se crea la tabla productoComprado. Se definen las variables referencia y numfact como llaves foráneas. Se definen las variables cantidad y vrund como numéricas.

CREATE TABLE producto( refeProducto VARCHAR(5) NOT NULL, descripcion VARCHAR(30), unidad VARCHAR(15), PRIMARY KEY (refeProducto));

Crea la tabla producto. Se crea la refeProducto como campo llave.

9

Page 10: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

Instalación del controlador MySQL para conexión ODBC

Verifique la existencia del controlador ODBC, lo cual puede hacer desde el panel de control, herramientas administrativas, orígenes de datos (ODBC), DNS del sistema, clic en Agregar y observará la ventana de la Figura 15, que le muestra, cuando no existe, el controlador, porque no aparece en orden alfabético la opción que inicia con MySQL.

Figura 15. Ventana cuando se va crear un origen de datos ODBC

Para la instalación 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. Después de la descarga del archivo, el cual utilicé para escribir este documento, se ejecuta y se procede con la instalación, como se indica desde la Figura 16.

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

Al hacer clic en el botón Ejecutar de la ventana de la Figura 16, se mostrará un asistente que lo guiará a través del proceso de instalación, como se muestra en la Figura 17. Si no se muestra la misma ventana de la figura en mención, es porque tiene instalado este controlador, en este caso es bueno revisar desde el panel de control, herramientas administrativas, Orígenes de datos

10

Page 11: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

(ODBC), DNS del sistema, clic en Agregar y observará la ventana de la Figura 15, que le muestra, cuando no existe, el controlador, porque no aparece la opción MySQL ODBC 5.1 Driver.

Figura 17. Asistente para la instalación del controlador ODBC de MySQL

Al hacer clic en el botón Next de la Figura 17, se observará la ventana de la Figura 18.

Figura 18. Paso 2 del asistente para la instalación del controlador ODBC MySQL

Como se observa en la Figura 18, se seleccionó la opción Complete, para instalar el controlador completamente, seguidamente clic en Next y en la ventana siguiente clic en Install.

11

Page 12: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

Configuración del ODBC para preparar la conectividad desde Windows a MySQL

Desde Windows XP: Clic en Inicio, Panel de control, Herramientas administrativas, Orígenes de datos (ODBC) se verá la ventana Administrador de orígenes de datos ODBC, como en la Figura 19.

Figura 19. Ventana del administrador de orígenes de datos ODBC

Seleccione la pestaña DNS del sistema.

Clic en Agregar y verá la ventana como la Figura 20.

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 Figura 21.

12

Page 13: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

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 Figura 23. Si no se incluyen, deben indicarse en la cadena de conexión del código dentro del programa que se realice el acceso a la base de datos. Puede hacer clic sobre el botón Test para probar si está bien la conexión a la base de datos, caso en el cual se mostrará el mensaje de la Figura 22.

Figura 22. Caja de dialogo resultante de la evaluación de conectividad exitosa a la base de datos

Después de haber comprobado la conexión, clic en Aceptar y clic en OK. Regresará a la ventana de la Figura 23, en donde se aprecia que la conexión a la base de datos compras, creada en MySQL, quedó establecida.

13

Page 14: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

Figura 23. Ventana del administrador de orígenes de datos ODBC, incluye conexión a la base de datos compras de MySQL

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

14

Page 15: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

Conexión desde el código 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 Figura 24 muestra un posible diseño del formulario desde donde se entrarán los datos del proveedor.

Figura 24. Formulario para entrada de datos del proveedor en la base de datos compras

El botón 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 continuación.

Public Class Form1 'Cadena de conexión 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 & "')"

Dim command As New Odbc.OdbcCommand(cadenaConsulta)

15

Page 16: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

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 SubEnd Class

El anterior código se puede mejorar para que valide si el nit existe, caso en el cual debe mostrar un cuadro de mensaje indicándolo. Esta mejora puede verse a continuación:

Public Class Form1 'Cadena de conexión 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()

16

Page 17: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

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 FunctionEnd Class

El código anterior incluye una función llamada registroExiste, que se usa para buscar si existe o no el nit digitado por el usuario en la tabla proveedor. Esta función retorna True si el registro existe, False en caso contrario.

Por otro lado podría 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 conexión y tres variables que devolverán los datos que se editarán, por esta razón dichas variables se declaran por referencia (ByRef). A continuación se muestra la clase Form1 así implementada.

Public Class Form1 'Cadena de conexión 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, _

17

Page 18: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

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 código 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, _ ByRef dire As String, ByRef tele As String) Dim command As New Odbc.OdbcCommand(cCn) Dim reg As Odbc.OdbcDataReader

18

Page 19: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

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 FunctionEnd Class

Se puede incluir un tercer botón para eliminar un registro en particular. Para el caso se eliminará el registro que coincida con el Nit que se digite. El botón 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 algún registro (esto ocurre en el segmento que evalúa si el código existe, en donde se debe adicionar la instrucción: 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) 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()

19

Page 20: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

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

También se puede insertar un botón adicional que se programará para hacer alguna modificación a un registro editado, cuyo respectivo código se muestra a continuación.

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 información a actualizar") End If End Sub

Un cuarto botón 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 = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox1.Focus() Button2.Enabled = False Button3.Enabled = False

20

Page 21: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

End Sub

El formulario del diseño anteriormente explicado se podrá ver como en la Figura 25.

Figura 25. Ventana del formulario proveedor de la base de datos compras

Existen algunos métodos que pueden diseñarse para que sean utilizados desde otros formularios o clases. En este caso habría que definirlos en una clase en particular. Estos métodos son fácilmente identificables, los cuales pueden ser: el método para insertar un registro, el que evalúa 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 métodos 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á diseñarse e implementarse de la manera como se muestra a continuación.

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() resp = 1 Conexion.Close() End Using Catch ex As Exception MsgBox(ex.ToString) End Try Return resp End Function

21

Page 22: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

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 FunctionEnd Class

La clase AccesoDatos se implementó con un procedimiento constructor que recibiera la cadena de conexión a una sola base de datos. También se implementaron cuatro funciones, cada una con un fin explícito indicado por el respectivo nombre: insertarRegistro, registroExiste, eliminar, actualizar. A continuación se muestra la clase Form1 diseñada anteriormente, modificada para que haga uso de la clase AccesoDatos. Le corresponde el mismo formulario de la Figura 25.

Public Class Form1 'Cadena de conexión a la base de datos compras por medio del ODBC

22

Page 23: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

Dim cadenaConexion As String = "DSN=compras" 'instancia a la clase DBManejo que recibe la cadena de conexión 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 código 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 Button3.Enabled = True 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, _

23

Page 24: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

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

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

24

Page 25: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

MsgBox("No se encontró regirstro") End If Else MsgBox("Debe digitar información 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 SubEnd Class

Se agregará un nuevo formulario para la entrada de productos que supuestamente adquiere la organización que dispondrá de la base de datos llamada compras. El formulario se diseñará con características similares al formulario proveedor. La clase Form2, que corresponde a este segundo formulario, reutilizará la clase AccesoDatos para la manipulación de los respectivos datos de la tabla producto. La Figura 26 muestra dicho formulario y el código subsiguiente contiene los procedimientos del Form2, que no varían mucho respecto los procedimientos utilizados para el Form1. Lo único nuevo en este formulario es el uso de un ComboBox para la selección de la unidad del producto

Figura 26. Formulario para captura de productos

Public Class Form2 Dim cadenaConexion As String = "DSN=compras" Dim dbm As AccesoDatos = New AccesoDatos(cadenaConexion)

25

Page 26: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

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 código existe. ¿Desea editarlo?", _ MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then recibeEdicion(cadenaCons, cadenaConexion, _ descripcion, unidad) TextBox2.Text = descripcion ComboBox1.Text = unidad Button2.Enabled = True Button3.Enabled = True 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 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

26

Page 27: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

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

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 información a actualizar") End If End SubEnd Class

27

Page 28: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

Hugo Becquer Paz Quintero

Inserte un formulario adicional en donde mostrará un listado del contenido en una de las tablas. Como ejemplo se mostrarán los datos de la tabla proveedor. Los datos se mostrarón 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 edición o desde código. Para configurar desde el modo edición se hace clic en la flecha del extremo superior derecho. Si lo hace por código deberá insertar un procedimiento con las instrucciones correspondientes, que se deberá invocar al principio del procedimiento Load.

El siguiente código 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()

28

Page 29: Acceso a Datos Desde Visual Basic a MySQL by DARKE1

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 SubEnd Class

El siguiente procedimiento permitiría 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 IfEnd Sub

29