GESTIÓN DE USUARIOS DE UNA BASE DE DATOS CON VB.NET+MYSQL

20  24  Descargar (0)

Texto completo

(1)

GESTIÓN DE USUARIOS DE UNA BASE DE DATOS CON VB.NET+MYSQL

Hola amigos de tecnohackers, en este post he decidido ilustrar con una simple y pequeña aplicacion como

gestionar infromacion de una base de datos en mysql realizando operaciones basicas como insert,

update, select, delete para guardar, actualizar, buscar, y eliminar datos.

Para la realizacion de esta aplicacion haremos uso de visual basic.net 2008 express y mysql 5.0

Bien una vez tengamos todo listo es necesario agregar el conector de mysql con .net al proyecto (lo

puedes descargar de:

http://dev.mysql.com/downloads/connector/net/

), el conector se debe alojar en la

carpeta debug del proyecto (ya se encuentra alli para este ejemplo) tal y como se ve en la siguiente

imagen:

Bien, despues de esto, pasamos a registrar la libreria, para ello nos vamos al explorador de soluciones

(ubicado en la parte derecha de la interfaz de vb.net), presionamos clic derecho sobre la carpeta

references y seleccionamos la opcion agregar referencia del menu contextual que aparece, luego, en el

cuadro nuevo que se genera te diriges a la pestaña examinar y entras a la carpeta debug del proyecto,

luego seleccionas el archivo dll llamado: MySql.Data.dll y presionas el boton aceptar para que la

referencia quede correctamente agregada, puedes constatar los pasos a traves de la siguiente imagen:

(2)

Posteriormente a este paso realizamos un diseño similar al que se ve en la siguiente imagen:

agregamos 5 botones, 5 textbox y 5 labels para especificar cada campo.

Bien hasta aqui nuestra aplicacion esta preparada para aceptar una conectividad con la base de datos, sin

embargo aun no hemos creado dicha bd, para ello abrimos nuestro administrador de base de datos

preferido, yo en mi caso opto por usar phpmyadmin del appserv para crear la base de datos, la cual se

llamara prueba_validar_dato, tendra una tabla llamada usuarios y dicha tabla tendra los siguientes

(3)

campos: id, cedula, nombre, apellidos, direccion, email. En la siguiente imagen puedes ver la estructura

de la tabla:

puedes crear dicha tabla con el asistente, pero si desean hacerlo a codigo aqui tienen

las sentencias sql:

CREATE TABLE `usuarios` (

`id` int(11) NOT NULL auto_increment, `cedula` varchar(10) NOT NULL, `nombre` varchar(60) NOT NULL, `apellidos` varchar(50) NOT NULL, `direccion` varchar(80) NOT NULL, `email` varchar(100) NOT NULL, PRIMARY KEY (`id`)

)

Listo, ahora pasemos nuevamente a nuestro entorno de programacion vb.net y vamos a crear un nuevo

modulo en el cual se van a establecer los parametros de conexion con la base de datos, alli se indica el

nombre o ip del servidor que posee la base de datos, el usuario de mysql, la contraseña y el nombre de la

base de datos, el codigo del modulo es el siguiente:

(4)

Imports MySql.Data.MySqlClient Module Modulo_conexion

Public cadena As String

Public conexion As New MySqlConnection Public sql As String

Public mycommand As New MySqlCommand Public myAdapter As New MySqlDataAdapter Public Sub conectarme()

'realizo la conexion' Try

'localhost

cadena = "server='localhost'; user id=root; pwd=12345; database=prueba_validar_dato" conexion.ConnectionString = cadena

conexion.Open()

MsgBox("conexion establecida!!!") Catch ex As Exception

MsgBox("No es Posible Establecer Conexion con la Base de Datos Debido a Problemas de Configuracion, Verifique los Parametros de Conexion Por Favor!", MsgBoxStyle.Critical, "Advertencia") End Try

End Sub End Module

A continuacion, nos dirigimos a nuestro formulario, hacemos el llamado a la libreria de mysql importandola

Imports MySql.Data.MySqlClient

y declaramos una variable como global:

Dim encontro As Integer

Luego, pasamos al evento load del formulario para hacer el llamado a la funcion conectarme:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

conectarme() encontro = 0 End Sub

Muy bien, de esa manera siempre que ejecutemos nuestra aplicacion se intentara conectar con la base de

datos; ahora creamos algunas funciones para gestionar los datos y el formulario.

vamos a crear a la funcion limpiar_cajas_de_texto() que se encargara de colocar en blanco cada uno de

los text del formulario al presionar el boton nuevo.

Sub limpiar_cajas_de_texto() Me.TextBox_cedula.Clear() Me.TextBox_nombre.Clear() Me.TextBox_apellido.Clear() Me.TextBox_direccion.Clear()

(5)

Me.TextBox_email.Clear() End Sub

llamamos a dicha funcion o subrutina en el boton nuevo:

Private Sub Button_nuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_nuevo.Click

limpiar_cajas_de_texto() End Sub

Ahora vamos a programar en el boton buscar, a traves del cual encontraremos usuarios registrados en la

base de datos mediante la cedula, en esta funcion vamos a utilizar una variable indicadora llamada

encontro para saber si la busqueda tuvo exito o no, si hay coincidencia, la variable encontro pasara al

estado 1 y si no hay coincidencia permanecera en 0, aqui esta el codigo a utilizar:

Private Sub Button_buscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_buscar.Click

encontro = 0

Dim nombre, apellido, direccion, email As String nombre = ""

apellido = "" direccion = "" email = ""

If conexion.State = ConnectionState.Closed Then conexion.Open()

End If

mycommand = New MySqlCommand("select *from usuarios where cedula='" & Me.TextBox_cedula.Text & "'", conexion)

mycommand.Connection = conexion Dim drcampo As MySqlDataReader

drcampo = mycommand.ExecuteReader() Try Do While drcampo.Read encontro = 1 nombre = drcampo.GetString(2) apellido = drcampo.GetString(3) direccion = drcampo.GetString(4) email = drcampo.GetString(5) Loop Catch ex As Exception

MsgBox("Ha ocurrido un Error!", MsgBoxStyle.Critical, "Error") End Try

conexion.Close() If (encontro = 1) Then

Me.TextBox_nombre.Text = nombre Me.TextBox_apellido.Text = apellido

(6)

Me.TextBox_direccion.Text = direccion Me.TextBox_email.Text = email

MsgBox("Usuario encontrado!", MsgBoxStyle.Information, "Notificacion") Else

MsgBox("el usuario que usted esta buscando no se encuentra en la base de datos, verifique!", MsgBoxStyle.Exclamation, "Notificacion")

End If End Sub

muy bien amigos ahora vamos a codificar el boton guardar, alli vamos a validar que la cedula del usuario

no se repita, es decir que no aparezca mas de 1 vez en la base de datos, para ello vamos a crear una

subrutina llamada validar asi:

Sub validar() encontro = 0

If conexion.State = ConnectionState.Closed Then conexion.Open()

End If

mycommand = New MySqlCommand("select *from usuarios where cedula='" & Me.TextBox_cedula.Text & "'", conexion)

mycommand.Connection = conexion Dim drcampo As MySqlDataReader

drcampo = mycommand.ExecuteReader() Try Do While drcampo.Read encontro = 1 Loop Catch ex As Exception

MsgBox("Ha ocurrido un Error!", MsgBoxStyle.Critical, "Error") End Try

conexion.Close() If (encontro = 1) Then

MsgBox("no se puede Guardar, ya hay un registro con la misma cedula!", MsgBoxStyle.Exclamation, "Notificacion")

Else

guardar() End If End Sub

en caso tal de que el usuario no este registrado en la base de datos procedemos a guardarlo haciendo el

llamado a la funcion o procedimiento guardar:

Sub guardar()

If conexion.State() = ConnectionState.Closed Then conexion.Open()

End If

(7)

mycommand.Connection = conexion mycommand.CommandText = sql

'--- 'procedo a pasar los datos de los textbox a la variable para guardar

mycommand.Parameters.Clear() mycommand.Parameters.AddWithValue("?ced", Me.TextBox_cedula.Text) mycommand.Parameters.AddWithValue("?nombre", Me.TextBox_nombre.Text) mycommand.Parameters.AddWithValue("?apellido", Me.TextBox_apellido.Text) mycommand.Parameters.AddWithValue("?dire", Me.TextBox_direccion.Text) mycommand.Parameters.AddWithValue("?email", Me.TextBox_email.Text)

mycommand.CommandText = "insert into usuarios values(NULL,?ced,?nombre,?apellido,?dire,?email)" Try

mycommand.ExecuteNonQuery()

MsgBox("Los datos se han guardado Correctamente! ", MsgBoxStyle.Information, "Notificacion") Catch ex As Exception

MsgBox("No es posible Guardar, Verifique! " & ex.Message, MsgBoxStyle.Critical, "Error") End Try

conexion.Close() End Sub

de esta manera en nuestro boton guardar solo debemos invocar al procedimiento validad de la siguiente

manera:

Private Sub Button_guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_guardar.Click

validar() End Sub

Pasemos ahora al modificar, este proceso es muy sencillo, aqui solamente debemos consultar los datos

del usuario a traves de la cedula (en primer lugar), luego en los datos que son visualizados en los text,

modificar los que desees excepto la cedula y presionar dicho boton, las sentencias e instrucciones de

vb.net a utilizar son:

Private Sub Button_modificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_modificar.Click

If conexion.State() = ConnectionState.Closed Then conexion.Open()

End If

sql = "SELECT * FROM usuarios" mycommand.Connection = conexion mycommand.CommandText = sql Try mycommand.Parameters.Clear() mycommand.Parameters.AddWithValue("?ced", Me.TextBox_cedula.Text) mycommand.Parameters.AddWithValue("?nombre", Me.TextBox_nombre.Text) mycommand.Parameters.AddWithValue("?ape", Me.TextBox_apellido.Text) mycommand.Parameters.AddWithValue("?direccion", Me.TextBox_direccion.Text) mycommand.Parameters.AddWithValue("?email", Me.TextBox_email.Text)

(8)

'si actualizo

mycommand.CommandText = "Update usuarios set nombre=?nombre,apellidos=?ape,direccion=? direccion,email=?email WHERE cedula=?ced"

mycommand.ExecuteNonQuery()

MsgBox("Los datos del usuario han sido actualizados con exito!...", MsgBoxStyle.Information, "Notificacion")

Refresh()

Catch ex As Exception

MsgBox("No es posible Actualizar, Verifique! " & ex.Message) End Try

conexion.Close() End Sub

Por ultimo, pasamos al boton eliminar, alli nos cersioramos que se haya digitado alguna cedula que

realmente aparezca en la base de datos, de ser asi procedemos a borrarlo de forma permanente de la

base de datos:

Private Sub Button_eliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_eliminar.Click

If (Me.TextBox_cedula.Text.Trim = "") Then

MsgBox("Primero Busque al usuario que desea eliminar escribiendo su cedula y presionando el boton buscar!", MsgBoxStyle.Exclamation, "Notificacion")

Else

'realizo la eliminacion

If conexion.State() = ConnectionState.Closed Then conexion.Open()

End If

mycommand.Parameters.Clear()

mycommand.Parameters.AddWithValue("?ced", Me.TextBox_cedula.Text) sql = "delete FROM usuarios where cedula=?ced"

mycommand.Connection = conexion mycommand.CommandText = sql Try

mycommand.ExecuteNonQuery()

MsgBox("Usuario eliminado con exito de la base de datos!", MsgBoxStyle.Information, "Notificacion")

Refresh()

limpiar_cajas_de_texto() Catch ex As Exception

MsgBox("Imposible Eliminar porque...:" & ex.Message) End Try

(9)

'Por Ultimo Cierro La conexion conexion.Close()

End If

End Sub

Podemos poner en marcha la aplicacion y ver que tal funciona:

*inicialmente si los parametros de conexion a la bd son correctos veremos un mensaje como el de la

imagen siguiente:

*posteriormente si lo deseamos podemos ejecutar cualquier opcion, he deseado hacer una consulta asi

que ingrese la cedula 123 y presione el boton buscar, miren el resultado:

*Luego registramos un usuario, ingresamos los datos y presionamos el boton guardar y veremos el

siguiente mensaje de confirmacion:

(10)

Bueno, se le pueden hacer todas las pruebas que deseen, el programa solo realiza las operaciones de

gestion basicas le hacen falta muchas validaciones para establecer algunas normas de integridad en la

base de datos, espero y les pueda resultar de guia y orientacion a aquellos que esten interesados en

aprender a trabajar con bases de datos.

si desean descargar la aplicacion aqui les dejo el link:

http://www.4shared.com/archive/Ygd-G86Y/Ejemplo_Gestion_de_Usuarios_Bd.html

http://www.tecnohackers.net/programacion-a-alto-nivel-visual-basic-java-delphi-etc/gestion-de-usuarios-de-una-base-de-datos-con-vb-netmysql-(op-sql-basicas)/

Hola System32, si lo que quieres es guardar fotos en una base de datos, debes crear

un campo en la tabla de la base de datos de tipo BLOB o LONGBLOG que es para

almacenar datos binarios y para registrar dicha operacion de guardado, antes debes

convertir la foto de tipo image a binario, para ello debes elaborar una funcion en tu

programa de vb.net de la siguiente manera:

'convertir imagen a binario

Private Function Imagen_Bytes(ByVal Imagen As Image) As Byte() 'si hay imagen

If Not Imagen Is Nothing Then

'variable de datos binarios en stream(flujo) Dim Bin As New MemoryStream

(11)

'convertir a bytes Imagen.Save(Bin, Imaging.ImageFormat.Jpeg) 'retorna binario Return Bin.GetBuffer Else Return Nothing End If End Function

Luego, tu funcion guardar te quedara de la siguiente manera:

Sub guardar()

If conexion.State() = ConnectionState.Closed Then conexion.Open()

End If

sql = "SELECT * FROM usuarios" mycommand.Connection = conexion mycommand.CommandText = sql

'--- 'procedo a pasar los datos de los textbox a la variable para guardar

mycommand.Parameters.Clear() mycommand.Parameters.AddWithValue("?ced", Me.TextBox_cedula.Text) mycommand.Parameters.AddWithValue("?nombre", Me.TextBox_nombre.Text) mycommand.Parameters.AddWithValue("?apellido", Me.TextBox_apellido.Text) mycommand.Parameters.AddWithValue("?dire", Me.TextBox_direccion.Text) mycommand.Parameters.AddWithValue("?email", Me.TextBox_email.Text) img = Imagen_Bytes(Me.Picture_foto.Image) mycommand.Parameters.AddWithValue("?foto", img)

mycommand.CommandText = "insert into usuarios values(NULL,?ced,?nombre,?apellido,?dire,?email,? foto)"

Try

mycommand.ExecuteNonQuery()

MsgBox("Los datos se han guardado Correctamente! ", MsgBoxStyle.Information, "Notificacion") Catch ex As Exception

MsgBox("No es posible Guardar, Verifique! " & ex.Message, MsgBoxStyle.Critical, "Error") End Try

conexion.Close() End Sub

(12)

en la anterior funcion la variable img corresponde a una variable global de tipo byte que debe ser

declarada al comienzo del programa de la siguiente manera:

Dim img() As Byte

y como te puedes dar cuenta realizamos la conversion de imagen a bytes y luego la agregamos a la

cadena de texto para incluirla en el insert cuyo nombre es "?foto".

Por otra parte, para realizar una consulta, debes convertir los datos en binario que hay en la base de

datos a imagen, aqui debes usar la siguiente funcion:

'convertir binario a imagen

Private Function Bytes_Imagen(ByVal Imagen As Byte()) As Image Try

'si hay imagen

If Not Imagen Is Nothing Then

'caturar array con memorystream hacia Bin Dim Bin As New MemoryStream(Imagen)

'con el método FroStream de Image obtenemos imagen Dim Resultado As Image = Image.FromStream(Bin) 'y la retornamos Return Resultado Else Return Nothing End If Catch ex As Exception Return Nothing End Try End Function

entonces, invocas esta funcion en el buscar del programa, quedando el procedimiento de busqueda de

usuario de la siguiente manera:

Private Sub Button_buscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_buscar.Click

encontro = 0

(13)

nombre = "" apellido = "" direccion = "" email = ""

If conexion.State = ConnectionState.Closed Then conexion.Open()

End If

mycommand = New MySqlCommand("select *from usuarios where cedula='" & Me.TextBox_cedula.Text & "'", conexion)

mycommand.Connection = conexion Dim drcampo As MySqlDataReader

drcampo = mycommand.ExecuteReader() Try Do While drcampo.Read encontro = 1 nombre = drcampo.GetString(2) apellido = drcampo.GetString(3) direccion = drcampo.GetString(4) email = drcampo.GetString(5) Me.Picture_foto.Image = Bytes_Imagen(drusuario.GetValue(6)) Loop Catch ex As Exception

MsgBox("Ha ocurrido un Error!", MsgBoxStyle.Critical, "Error") End Try conexion.Close() If (encontro = 1) Then Me.TextBox_nombre.Text = nombre Me.TextBox_apellido.Text = apellido Me.TextBox_direccion.Text = direccion Me.TextBox_email.Text = email

MsgBox("Usuario encontrado!", MsgBoxStyle.Information, "Notificacion") Else

MsgBox("el usuario que usted esta buscando no se encuentra en la base de datos, verifique!", MsgBoxStyle.Exclamation, "Notificacion")

End If End Sub

en la ultima funcion, se puede notar la linea

Me.Picture_foto.Image = Bytes_Imagen(drusuario.GetValue(6))

que es donde convertimos los bytes a imagen y los pasamos a un picturebox.

Bueno, espero y te haya podido aclarar tu duda, haz el intento de realizar estas modificaciones al programa y de seguro obtendras un resultado positivo.... si gustas puedes ver un tutorial completo para registrar imagenes en una base de datos aqui: http://ingsistele.wordpress.com/2012/02/03/interactuar-con-webcam-y-base-de-datos/#more-247

(14)

Hola modifique el code solo por los campos, como no pones un code en el cual se debe insertar el

registro, pues pongo el code, yo prefiero tomar la imagen del directorio x y de ahi guardarle en mysql.

Podrias ayudarme el code ke me distes si lee la imagen pero cuando la inserto desde mysql, porque tal y

como esta el code no me deja insertrar ningun registro.

'Para abrir imagen

Código: [Seleccionar]

Private Sub BUTEXAM_Click(sender As System.Object, e As System.EventArgs) Handles BUTEXAM.Click Me.OPD.Filter = "Imagenes (jpg)|*.jpg" 'filtro de archivos del OpenFileDialog

OPD.ShowDialog()

'MessageBox.Show(NOMBRE) RUTA = OPD.FileName.ToString() 'MessageBox.Show(RUTA)

PB1.ImageLocation = RUTA End Sub

'Para guaradar registro

Código: [Seleccionar]

Private Sub BUTGUAR_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BUTGUAR.Click

'Llamada para validar el nuevo Registro antes de guardar. ' Call validar()

Try

sql = "SELECT * FROM empleados" mycommand.Connection = conexion mycommand.CommandText = sql 'Para Imagen en RUTA

RUTA = OPD.FileName.ToString() 'MessageBox.Show(RUTA)

PB1.ImageLocation = RUTA

If conexion.State() = ConnectionState.Closed Then conexion.Open()

End If

'--- 'procedo a pasar los datos de los textbox a la variable para guardar

mycommand.Parameters.Clear() mycommand.Parameters.AddWithValue("?Clave", Me.CBOID.Text) mycommand.Parameters.AddWithValue("?CEmpleado", Me.CBOCE.Text) mycommand.Parameters.AddWithValue("?Nombres", Me.TXTNOM.Text.Trim.ToString) mycommand.Parameters.AddWithValue("?Apellidos", Me.TXTAPES.Text.Trim.ToString) mycommand.Parameters.AddWithValue("?Departamento", Me.CBODEPTO.Text.Trim.ToString) mycommand.Parameters.AddWithValue("?Sexo", Me.CBOSEXO.Text.Trim.ToString) mycommand.Parameters.AddWithValue("?Telefono", Me.TXTTEL.Text.Trim.ToString) mycommand.Parameters.AddWithValue("?Email", Me.TXTEMAIL.Text.Trim.ToString) mycommand.Parameters.AddWithValue("?D_Trabajados", Me.TXTDTRAB.Text.Trim.ToString) mycommand.Parameters.AddWithValue("?Num_periodo", Me.TXTNPER.Text.Trim.ToString) mycommand.Parameters.AddWithValue("?Fecha", Me.DTP1.Text.Trim.ToString)

(15)

img = Imagen_Bytes(Me.PB1.Image)

mycommand.Parameters.AddWithValue("?imagen", img)

PB1.SizeMode = PictureBoxSizeMode.StretchImage

'no se va a programar la visita, entonces el establecimiento quedara en estado listo, que indica que aceptara cualquier visita nueva a programar

mycommand.CommandText = "INSERT INTO empleados(Clave, CEmpleado, Nombres, Apellidos, Departamento, Sexo, Telefono, Email, Dias_Trabajados, Num_Periodo, Fecha, imagen) VALUES (?NULL,? Clave,?CEmpleado,?Nombres,?Apellidos,?Departamento,?Sexo,?Telefono,?Email,?Dias_Trabajados,? Num_periodo,?Fecha,?imagen)"

'?CEmpleado, ?Nombres, ?Apellidos, ?Departamento, ?Sexo, ?Telefono, ?Email, ?Dias_Trabajados, ? Num_periodo, ?Fecha

Try

mycommand.ExecuteNonQuery()

MsgBox("Los datos se han guardado Correctamente! ", MsgBoxStyle.Information, "Notificacion") Catch ex As Exception

MsgBox("No es posible Guardar, Verifique! " & ex.Message, MsgBoxStyle.Critical, "Error") End Try

conexion.Close() Catch ex As Exception End Try

Hola System32, la razon de que al insertarla desde mysql si te este leyendo la imagen con tu programa y

desde tu codigo no lo este insertando es porque cuando lees el archivo con el open file dialog no estas

empleando la propiedad correcta del picturebox para asignar la imagen; te explico:

cuando leas la imagen a traves del openfiledialog deberas tener el codigo asi:

Código: [Seleccionar]

Private Sub BUTEXAM_Click(sender As System.Object, e As System.EventArgs) Handles BUTEXAM.Click Me.OPD.Filter = "Imagenes (jpg)|*.jpg" 'filtro de archivos del OpenFileDialog

OPD.ShowDialog() 'MessageBox.Show(NOMBRE) RUTA = OPD.FileName.ToString() 'MessageBox.Show(RUTA) Me.PB1.Image = Image.FromFile(ruta) End Sub

como te puedes dar cuenta se usa la propiedad image del picturebox en lugar de

Código: [Seleccionar]

PB1.ImageLocation = RUTA

como lo tienes en tu codigo.

y ya eso es todo, por eso es que no te guarda ya que la funcion

Código: [Seleccionar]

Imagen_Bytes(Me.PB1.Image)

esta convirtiendo en bytes la imagen de acuerdo a la propiedad "Image" del picturebox y no por la

ImageLocation.

(16)

Por otra parte, puedes resumir tu insert de la siguiente manera:

Código: [Seleccionar]

mycommand.CommandText = "insert into empleados values(NULL,?Clave,?CEmpleado,?Nombres,? Apellidos,?Departamento,?Sexo,?Telefono,?Email,?Dias_Trabajados,?Num_periodo,?Fecha,?imagen)"

Ten en cuenta que el parametro NULL no lleva ? al principio (este tambien puede ser una causa de tu

problema al guardar).

Bueno, eso es todo, espero y lo pruebes, te des cuenta de lo que te esta sucediendo y puedas solucionar

tu problema.

Saludos.

Correcto mira me guie y inserto la imagen pero para modificarla como seria, pondre el code de insertar ke

funciona muy bien:

Código: [Seleccionar]

Private Sub BUTGUARDAR_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BUTGUARDAR.Click

Try

Dim sql As String = "insert into imagenes(id,imagen,Clave,Nombres,Apellidos,Fec)values(?id,? imagen,?Clave,?Nombres,?Apellidos,?Fec)"

cnn = New MySqlConnection(StrConexion) Dim Comando As New MySqlCommand(sql, cnn) Dim Imag As Byte()

Dim id As String Dim Clave As String Dim Nombres As String Dim Apellidos As String Dim Fec As Date

id = TXTID.Text Clave = TXTCVE.Text Nombres = TXTNOM.Text Apellidos = TXTAPES.Text Fec = Now Imag = Imagen_Bytes(Me.PictureBox1.Image) Comando.Parameters.AddWithValue("?id", id) Comando.Parameters.AddWithValue("?imagen", Imag) Comando.Parameters.AddWithValue("?Clave", Clave) Comando.Parameters.AddWithValue("?Nombres", Nombres) Comando.Parameters.AddWithValue("?Apellidos", Apellidos) Comando.Parameters.AddWithValue("?Fec", Fec)

(17)

cnn.Open()

If cnn.State = ConnectionState.Open Then Comando.ExecuteNonQuery()

MsgBox("Se guardo correctamente la imagen en la BD") Else

MsgBox("No se pudo Guardar el registro de imagen, verifiquelo con el Administrador") End If cnn.Close() Catch ex As Exception MessageBox.Show(ex.Message) End Try 'ACTUALIZAR Y LIMPIAR Call subLimpiarTodo() Call subMOSTRAR() End Sub

'Aqui es para modificar, solo que no modifica la imagen osea no la cambia. Que necesito para cambiarle la

imagen?

Código: [Seleccionar]

Private Sub BUTMOD_Click(sender As System.Object, e As System.EventArgs) Handles BUTMOD.Click 'PARA MODIFICAR ELEMENTO

'Sub MODIFICAR()

If (FnBoolDatosCorrect()) Then 'Verifica que tenga haya datos en los campos. 'NUEVO CODIGO

Dim strMod As String strMod = "Actualiza"

If strMod = "Actualiza" Then Dim CN As MySqlConnection CN = New MySqlConnection

CN.ConnectionString = "Server=localhost;Database=aplicaciones;Uid=root;Pwd=root;" CN.Open()

Dim modificar As New MySqlCommand("UPDATE imagenes SET Clave='" & TXTCVE.Text &

"',Nombres='" & TXTNOM.Text & "',Apellidos='" & TXTAPES.Text & "',Fec='" & DTP1.Text & "' WHERE id='" & TXTID.Text & "'", CN)

(18)

MsgBox("Periodo Modificado Correctamente", MsgBoxStyle.OkOnly, "Modificacion de Cliente") CN.Close() End If 'MENSAJE DE ACTUALIZACION MsgBox("Modificacion Exitosa") End If

End Sub

Saludos..

Hola System32, para modificar te puedes guiar del ejemplo que hay en este post, basicamente es el

mismo proceso, solo debes de agregar la variable imagen en tu procedimiento modificar asi:

Código: [Seleccionar]

Private Sub Button_modificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_modificar.Click

If conexion.State() = ConnectionState.Closed Then conexion.Open()

End If

sql = "SELECT * FROM usuarios" mycommand.Connection = conexion mycommand.CommandText = sql Try mycommand.Parameters.Clear() mycommand.Parameters.AddWithValue("?ced", Me.TextBox_cedula.Text) mycommand.Parameters.AddWithValue("?nombre", Me.TextBox_nombre.Text) mycommand.Parameters.AddWithValue("?ape", Me.TextBox_apellido.Text) mycommand.Parameters.AddWithValue("?direccion", Me.TextBox_direccion.Text) mycommand.Parameters.AddWithValue("?email", Me.TextBox_email.Text) img = Imagen_Bytes(Me.PB1.Image) mycommand.Parameters.AddWithValue("?imagen", img) 'si actualizo

mycommand.CommandText = "Update usuarios set nombre=?nombre,apellidos=?ape,direccion=? direccion,email=?email,imagen=?imagen WHERE cedula=?ced"

mycommand.ExecuteNonQuery()

MsgBox("Los datos del usuario han sido actualizados con exito!...", MsgBoxStyle.Information, "Notificacion")

Refresh()

Catch ex As Exception

MsgBox("No es posible Actualizar, Verifique! " & ex.Message) End Try

(19)

End Sub

y con eso ya puedes modificar, adaptalo a tu programa y veras que vas a poder modificar...!

Hola JESUSB, muy buena tu pregunta la entiendo de 2 maneras:

1) si quieres ir actualizando un datagridview al cambiar algun dato independientemente de haberlo

efectuado en la grilla, lo que debes hacer es crear un procedimiento llamado actualizar_datos_grilla()

(que permita listar los datos de la base de datos en la lista) y luego llamarlo desde el evento que

desencadena dicha actualizacion en la base de datos, puede ser un boton o algun campo de texto, o

tambien puedes utilizar un timer que refresque la grilla cada cierto tiempo.

2) otra interpretacion que tengo acerca de tu pregunta es la siguiente, quieres modificar los datos en

la base de datos pero deseas hacerlo cambiando directamente los datos desde la grilla, es decir, te

dirijes a una celda del datagridview, haces clic sobre el texto lo borras y escribes otra cosa

(cambiando de esa manera el valor que tenia), para que puedas hacer dicho cambio sobre el registro

correcto de la base de datos debes tener en cuenta las siguientes recomendaciones:

*cuando vallas a agregar los datos a la grilla, incluye el campo id de la tabla que te ayudara a localizar

facilmente cualquier registro en dicha base de datos (puedes colocar ese campo de la grilla oculto o

invisible para que el usuario no lo vea).

*luego para poder determinar en que fila vas a hacer la modificacion de la informacion, debes trabajar

en el evento cellclick de la grilla que se activa al momento de hacer clic en una celda devolviendo la

fila y la columna seleccionada.

puedes ver el siguiente codigo:

Código: [Seleccionar]

Private Sub grilla_lista_CellClick(ByVal sender As Object, ByVal e As

System.Windows.Forms.DataGridViewCellEventArgs) Handles grilla_lista.CellClick Dim sel, sel2 As Integer

sel2 = grilla_lista.Rows.Count 'aqui obtienes la cantidad de filas de la grilla 'MsgBox(sel2)

Try

sel = Me.grilla_lista.CurrentRow.Index 'aqui obtienes en indice de la fila que se ha seleccionado es decir el numero de la fila

valor_id = (Me.grilla_lista.Rows(sel).Cells(1).Value) ' aqui obtenemos el valor del id de la fila seleccionada asociado al registro especifico de la tabla en la base de datos

'luego si se van a modificar varios datos pasas a varibles la informacion de cada celda de la grilla nombre = (Me.grilla_lista.Rows(sel).Cells(2).Value)

(20)

direccion = (Me.grilla_lista.Rows(sel).Cells(4).Value)

Catch ex As Exception End Try

bien una vez hayas hecho esto debes colocar un boton para que al presionarlo se efectuen los

cambios en la base de datos, ya conoces el id de la tabla y los datos a modificar que estan

almacenados en variables, solo debes crear el procedimiento para actualizar que sera similar al que

puedes observar en el ejemplo original de este tema.

Figure

Actualización...