25
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:

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

Embed Size (px)

Citation preview

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

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:

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

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

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

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:

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

Imports MySql.Data.MySqlClientModule 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()

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

        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

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

            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

        sql = "SELECT * FROM usuarios"

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

        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)

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

                      '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)

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

            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:

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

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

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

     '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

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

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        Dim nombre, apellido, direccion, email As String

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

        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 lineaMe.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

Saludos

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

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)

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

            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 = RUTAcomo 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.

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

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)

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

           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;"

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

               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)               modificar.ExecuteNonQuery()               MsgBox("Periodo Modificado Correctamente", MsgBoxStyle.OkOnly, "Modificacion de Cliente")               CN.Close()

           End If

           'MENSAJE DE ACTUALIZACION           MsgBox("Modificacion Exitosa")       End If

    End SubSaludos..

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"

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

            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

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

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

                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)  

apellidos= (Me.grilla_lista.Rows(sel).Cells(3).Value)  

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.

bueno, espero y puedas solucionar tu inquietud, gracias por tu pregunta, saludos!.