none
Como Atulizar una imagen de un Picture Box dentro del Boton Actulizar RRS feed

  • Pregunta

  • Tengo una base de datos con Registros y la foto correpondiente a ese registro lo puedo guardar en Acces 2016 y navegar entre los

    registros sin problema la cuestion es como cambio la imagen en caso de que la quiera ACTUALIZAR. les dejo el codigo a ver si me pueden ayudar por su aportacion gracias de antemano.

     Dim actualizar As String

            actualizar = "UPDATE Inmobiliarios SET Empresa='" & TxtEmpresa.Text &
                "', Direccion='" & TxtDireccion.Text &
                 "', Colonia='" & TxtColonia.Text &
                 "', CPostal='" & TxtPostal.Text &
                "', Contacto='" & TxtContacto.Text &
                "', Contacto2='" & TxtContacto2.Text &
                "', Telefono='" & MaskTel1.Text &
                "', Extension='" & TxtExtension1.Text &
                "', Telefono2='" & MaskTel2.Text &
                "', Extension2= '" & TxtExtension2.Text &
                "', Mail='" & MaskMail1.Text &
                "', Mail2='" & MaskMail2.Text &
                "', Movil='" & TxtMovil.Text &
                "', Entidad='" & CboEntidad.Text &
                "', Estatus='" & CboEstatus.Text &
                "', Giro='" & CboGiro.Text &
                "', Segmento='" & CboSegmento.Text &
                "', Observacion='" & RichTextBox1.Text &
                "', Imagen='" & PictureBox1.Image = Image.FromFile("C:\Users\Solis\Documents\BDatos\ControlInmuebles\ImagenInmobiliarios\" & PictureBox1.Tag.ToString) &
                " ' WHERE IdInmob ='" & TxtClave.Text & "'"

            '"', Imagen='" & i &

            Comandos = New OleDbCommand(actualizar, Conexcion)
            Comandos.ExecuteNonQuery()
            MsgBox("Actulizado Correctamente", vbInformation, "Actulizado")

            Bloquearcajastexto()
            BtoActualizar.Enabled = False
            BtoAltas.Enabled = True
            BtoModificar.Enabled = True
            LlenarGrilla()

        End Sub

    miércoles, 19 de agosto de 2020 2:41

Respuestas

Todas las respuestas

  • Si pones esto:

     Imagen='" & PictureBox1.Image = (...algo...) & "'"

    el ejecutarlo eso se va a convertir en

     Imagen='False'

    El False viene de que la propiedad Image del Picturebox1 no es igual a lo que pones a su derecha.

    La forma de cambiar la image es poner

     Imagen='Aquí los bytes de la imagen codificados en un formato adecuado'

    Por desgracia, encontrar el formato exacto en modo texto de los datos binarios de la imagen para ponerlos en la Insert es complicado y varía según cada motor de base de datos. Para evitar este problema, la solución más sencilla es parametrizar la sentencia (cosa que deberías estar haciendo de todas maneras incluso aunque no quisieras grabar la imagen -- por razones que se han dicho ya demasiadas veces como para repetirlas aquí de nuevo, es una malísima práctica concatenar datos en la sentencia como estás haciendo).

    Una vez que tengas la sentencia parametrizada, basta con declarar el parámetro que le asignas a la imagen con el tipo "array de bytes", y en ese array de bytes le pasas los bytes de la imagen.

    Si la imagen la estás tomando de un fichero, entonces la forma más sencilla de obtener esos bytes es leerlos del fichero con File.ReadAllBytes. Eso es mucho más simple que primero llamar a Image.FromFile y después intentar extraer los bytes de dentro del Image.

    miércoles, 19 de agosto de 2020 7:31
  • Tengo las imagenes guardadas dentro de la carpeta y ruta :C:\Users\Solis\Documents\BDatos\ControlInmuebles\ImagenInmobiliarios hice una modificacion pero no....

    Nota: las imagenes ya estaban guardadas en acces en un campo imagen de valor "Objeto Ole" ya que recupere la Bd despues de una encriptacion de virus ransware en mi equipo x lo cual tuve que descragra nuevamente las imagenes y colocarlas en esa misma ruta y carpeta.

    Ya agergue estas 2 lineas pero nada :

     '"', Imagen='" & PictureBox1.values.Add(ms, System.Drawing.Imaging.ImageFormat.Jpeg) &                                                    PictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)

    Private Sub BtoActualizar_Click(sender As Object, e As EventArgs) Handles BtoActualizar.Click


            Dim ms As New IO.MemoryStream()
            PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat)
            Dim i() As Byte = ms.GetBuffer


            Dim actualizar As String

            actualizar = "UPDATE Inmobiliarios SET Empresa='" & TxtEmpresa.Text &
                "', Direccion='" & TxtDireccion.Text &
                "', Colonia='" & TxtColonia.Text &
                "', CPostal='" & TxtPostal.Text &
                "', Contacto='" & TxtContacto.Text &
                "', Contacto2='" & TxtContacto2.Text &
                "', Telefono='" & MaskTel1.Text &
                "', Extension='" & TxtExtension1.Text &
                "', Telefono2='" & MaskTel2.Text &
                "', Extension2= '" & TxtExtension2.Text &
                "', Mail='" & MaskMail1.Text &
                "', Mail2='" & MaskMail2.Text &
                "', Movil='" & TxtMovil.Text &
                "', Entidad='" & CboEntidad.Text &
                "', Estatus='" & CboEstatus.Text &
                "', Giro='" & CboGiro.Text &
                "', Segmento='" & CboSegmento.Text &
                "', Observacion='" & RichTextBox1.Text &
                "', Imagen='" & PictureBox1.Image.Save = ("C:\Users\Solis\Documents\BDatos\ControlInmuebles\ImagenInmobiliarios\") &
                " ' WHERE IdInmob ='" & TxtClave.Text & "'"

    Comandos = New OleDbCommand(actualizar, Conexcion)
            Comandos.ExecuteNonQuery()
            MsgBox("Actulizado Correctamente", vbInformation, "Actulizado")

            Bloquearcajastexto()
            BtoActualizar.Enabled = False
            BtoAltas.Enabled = True
            BtoModificar.Enabled = True
            LlenarGrilla()

        End Sub


    miércoles, 19 de agosto de 2020 14:26
  • Nota: las imagenes ya estaban guardadas en acces en un campo imagen de valor "Objeto Ole"

    ¡Agh! Eso peor. Normalmente cuando desde código .NET se guardan imágenes en base de datos, se suelen grabar los bytes de la imagen en binario. Pero cuando está en Access guardada como "objeto Ole", es mucho más complicado porque hay que convertir el formato suprimiendo las cabeceras. Eso lleva bastante código. Hay un ejemplo aquí:

    https://docs.microsoft.com/en-us/archive/blogs/pranab/removing-ole-header-from-images-stored-in-ms-access-db-as-ole-object

    Pero ese ejemplo sirve para leer un "Objeto Ole" desde la base de datos. Lo que tú quieres hacer es lo contrario: grabarlo. Pero para eso necesitarías hacer la operación contraria, convirtiendo desde imagen hacia objeto ole. No tengo ningún ejemplo de esto, pero me temo que puede ser bastante complicado. Si necesitas conservar las imágenes en formato Objeto Ole, me temo que no va a ser nada sencillo hacerlo desde .NET. Yo te sugeriría más bien escribir algo de código con VBA en Access. O volver a plantear una pregunta en el foro especificando que necesitas salvar imágenes en Access como objeto Ole, a ver si aparece alguien que tenga algún ejemplo.

    miércoles, 19 de agosto de 2020 18:14
  • Pues muchas gracias por tomarte el tiempo y responderme sensatamente te agradezo y seguire buscando

    otro lenguaje de programacion que se pueda hacer aplicaciones de escritorio. con esta alternativa para las imagenes

    Por tu atencion muchas Gracias.

    miércoles, 19 de agosto de 2020 23:44
  • Hola, ¿te fueron utiles las respuestas?

    Saludos

    viernes, 21 de agosto de 2020 0:03
    Moderador