Академический Документы
Профессиональный Документы
Культура Документы
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 .
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
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 .
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.
De la , se supone se usar para desarrollo, entonces seleccione la opcin Developer Machine. Clic en Next
La , le permitir seleccionar otro drive, si se dispone. De otra forma se deja por defecto. Clic en Next.
Figura 10.
Figura 11.
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.
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.
Figura 13.
Por ejemplo, disee la base de datos que se llamar compras, con la estructura que se muestra en la .
Figura 14.
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));
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.
Figura 15.
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
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.
Figura 18.
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
Figura 19.
Seleccione la pestaa DNS del sistema. Clic en Agregar y ver la ventana como la .
Figura 20.
Desde la ventana Crear nuevo origen de datos seleccione MySQL ODBC 5.1 Driver, clic en Finalizar. Se abre la ventana de la .
12
Figura 21.
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.
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
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
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.
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
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
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
'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
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
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
TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox1.Focus() Button2.Enabled = False Button3.Enabled = False End Sub
Figura 25.
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
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
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
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
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.
25
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
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
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
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
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