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:
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
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:
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.MySqlClienty declaramos una variable como global:
Dim encontro As IntegerLuego, 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.Loadconectarme() 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()
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
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
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)
'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
'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:
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
'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
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
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
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)
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.
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)
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)
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
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)
direccion = (Me.grilla_lista.Rows(sel).Cells(4).Value)
Catch ex As Exception End Try