none
Error al Guardar Registros e Imágenes RRS feed

  • Pregunta

  • Estimados, buenas tardes

    Tengo un problema al tratar de guardar el registro que contiene texto y/o numeros con 3 imagenes. Trabajo con access, los campos txt son de tipo "Texto Corto" y las imagenes de tipo "Objeto OLE"

    Este es el codigo que tengo para guardar.

    Try

                    sql = ""

                    sql = "INSERT INTO registros VALUES(@nregistro,@cliente,@npresupuesto,@fotoprincipal,@acomponente,@afalla,@atrabajo,@aobservacion,@afoto1,@afoto2)"

                    cmd = New OleDbCommand(sql, cnn)

                    cmd.Parameters.Add(New OleDbParameter("@nregistro", NregistroLabel1.Text))

                    cmd.Parameters.Add(New OleDbParameter("@cliente", ClienteTextBox.Text))

                    cmd.Parameters.Add(New OleDbParameter("@npresupuesto", NpresupuestoTextBox.Text))

                   

                    'IMAGEN PRINCIPAL

                    If Foto_principalPictureBox.Image Is Nothing Then

                        cmd.Parameters.AddWithValue("@fotoprincipal", DBNull.Value)

                    Else

                        Dim arrImage() As Byte

                        Dim ms As New IO.MemoryStream

                        Foto_principalPictureBox.Image.Save(ms, Foto_principalPictureBox.Image.RawFormat)

                        arrImage = ms.GetBuffer()

                        cmd.Parameters.Add("@fotoprincipal", OleDbType.Binary).Value = arrImage

                    End If

     

                    cmd.Parameters.Add(New OleDbParameter("@acomponente", A_componenteTextBox.Text))

                    cmd.Parameters.Add(New OleDbParameter("@afalla", A_fallaTextBox.Text))

                    cmd.Parameters.Add(New OleDbParameter("@atrabajo", A_trabajoTextBox.Text))

                    cmd.Parameters.Add(New OleDbParameter("@aobservacion", A_observacionTextBox.Text))

                    'IMAGEN A1

     

                    If A_foto1PictureBox.Image Is Nothing Then

                        cmd.Parameters.AddWithValue("@afoto1", DBNull.Value)

                    Else

                        Dim arrImage() As Byte

                        Dim msa1 As New IO.MemoryStream

                        A_foto1PictureBox.Image.Save(msa1, A_foto1PictureBox.Image.RawFormat)

                        arrImage = msa1.GetBuffer()

                        cmd.Parameters.Add("@afoto1", OleDbType.Binary).Value = arrImage

                    End If

     

                    'IMAGEN A2

     

                    If A_foto2PictureBox.Image Is Nothing Then

                        cmd.Parameters.AddWithValue("@afoto2", DBNull.Value)

                    Else

                        Dim arrImage() As Byte

                        Dim msa2 As New IO.MemoryStream

                        A_foto2PictureBox.Image.Save(msa2, A_foto2PictureBox.Image.RawFormat)

                        arrImage = msa2.GetBuffer()

                        cmd.Parameters.Add("@afoto2", OleDbType.Binary).Value = arrImage

                    End If

                     Dim comando As New OleDbCommand(sql, cnn)

                    cnn.Open()

                    Dim resultados As OleDbDataReader = comando.ExecuteReader

                    resultados.Close()

     

                    MsgBox("Registrado " & NregistroLabel1.Text & " asociado a :" & "" & NpresupuestoTextBox.Text & " , Exitosamente", MsgBoxStyle.Information, "AVISO" + “ ” & ProductVersion & “”)

                   

                    Me.RegistrosBindingSource.MoveLast()

                    cnn.Close()

     

     

                Catch ex As Exception

                    MsgBox(ex.Source & "; " & ex.Message, "AVISO" + “ ” & ProductVersion & “”)

     

                End Try

    Me indica que la "Información adicional: La conversión de la cadena "PROGRAMA" en el tipo 'Integer' no es válida."

    La cadena de entrada no tiene el formato correcto.

    aqui me arroja el error

    MsgBox(ex.Source & "; " & ex.Message, "AVISO" + “ ” & ProductVersion & “”)

    Favor de su apoyo para solucionar este problema


    • Editado Error_007 sábado, 16 de marzo de 2019 21:04
    sábado, 16 de marzo de 2019 21:02

Respuestas

  • Hola, en que línea te arroja el error,

    deberías tener una lista de los campos en los que vas insertar , algo como

    sql="INSERT INTO registros (nregistro,cliente,npresupuesto,....) VALUES (@nregistro,@cliente,@npresupuesto....)"

    lo otro es que deberías utilizar ExecuteNonQuery el ExecuteReader se utiliza generalmente cuando necesitas recuperar registros de la base de datos.


    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    • Marcado como respuesta Error_007 miércoles, 20 de marzo de 2019 11:41
    domingo, 17 de marzo de 2019 0:14
  • Hola:
    Prueba esto

    Try
       Using loConexion As New OleDbConnection(msCadenaACCESS)
           Dim lsQuery As String = "INSERT INTO registros(campo1, campo2, .... campon) VALUES(@nregistro,@cliente,@npresupuesto,@fotoprincipal,@acomponente,@afalla,@atrabajo,@aobservacion,@afoto1,@afoto2)"
           ' crear comando
           Using loComando As New OleDbCommand(lsQuery, loConexion)
               loComando.Parameters.Add(New OleDbParameter("@nregistro", NregistroLabel1.Text))
               loComando.Parameters.Add(New OleDbParameter("@cliente", ClienteTextBox.Text))
               loComando.Parameters.Add(New OleDbParameter("@npresupuesto", NpresupuestoTextBox.Text))
               'IMAGEN PRINCIPAL
               If Foto_principalPictureBox.Image Is Nothing Then
                   loComando.Parameters.AddWithValue("@fotoprincipal", DBNull.Value)
               Else
                   Dim arrImage() As Byte
                   Dim ms As New IO.MemoryStream
                   Foto_principalPictureBox.Image.Save(ms, Foto_principalPictureBox.Image.RawFormat)
                   arrImage = ms.GetBuffer()
                   loComando.Parameters.Add("@fotoprincipal", OleDbType.Binary).Value = arrImage
               End If 
               loComando.Parameters.Add(New OleDbParameter("@acomponente", A_componenteTextBox.Text))
               loComando.Parameters.Add(New OleDbParameter("@afalla", A_fallaTextBox.Text))
               loComando.Parameters.Add(New OleDbParameter("@atrabajo", A_trabajoTextBox.Text))
               loComando.Parameters.Add(New OleDbParameter("@aobservacion", A_observacionTextBox.Text))
               'IMAGEN A1
               If A_foto1PictureBox.Image Is Nothing Then
                   loComando.Parameters.AddWithValue("@afoto1", DBNull.Value)
               Else
                   Dim arrImage() As Byte
                   Dim msa1 As New IO.MemoryStream
                   A_foto1PictureBox.Image.Save(msa1, A_foto1PictureBox.Image.RawFormat)
                   arrImage = msa1.GetBuffer()
                   loComando.Parameters.Add("@afoto1", OleDbType.Binary).Value = arrImage
               End If
              'IMAGEN A2
              If A_foto2PictureBox.Image Is Nothing Then
                  loComando.Parameters.AddWithValue("@afoto2", DBNull.Value)
              Else
                  Dim arrImage() As Byte
                  Dim msa2 As New IO.MemoryStream
                  A_foto2PictureBox.Image.Save(msa2, A_foto2PictureBox.Image.RawFormat)
                 arrImage = msa2.GetBuffer()
                  loComando.Parameters.Add("@afoto2", OleDbType.Binary).Value = arrImage
              End If
              loConexion.Open()   ' abrir conexión
              loComando.ExecuteNonQuery()
          End Using
       End Using
       MsgBox("Registrado " & NregistroLabel1.Text & " asociado a :" & "" & NpresupuestoTextBox.Text & " , Exitosamente", MsgBoxStyle.Information, "AVISO" + “ ” & ProductVersion & “”)
    Catch ex As Exception
          MsgBox(ex.Source & "; " & ex.Message, "AVISO" + “ ” & ProductVersion & “”)
    End Try

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta Error_007 miércoles, 20 de marzo de 2019 11:40
    domingo, 17 de marzo de 2019 7:32

Todas las respuestas

  • Hola, en que línea te arroja el error,

    deberías tener una lista de los campos en los que vas insertar , algo como

    sql="INSERT INTO registros (nregistro,cliente,npresupuesto,....) VALUES (@nregistro,@cliente,@npresupuesto....)"

    lo otro es que deberías utilizar ExecuteNonQuery el ExecuteReader se utiliza generalmente cuando necesitas recuperar registros de la base de datos.


    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    • Marcado como respuesta Error_007 miércoles, 20 de marzo de 2019 11:41
    domingo, 17 de marzo de 2019 0:14
  • Hola:
    Prueba esto

    Try
       Using loConexion As New OleDbConnection(msCadenaACCESS)
           Dim lsQuery As String = "INSERT INTO registros(campo1, campo2, .... campon) VALUES(@nregistro,@cliente,@npresupuesto,@fotoprincipal,@acomponente,@afalla,@atrabajo,@aobservacion,@afoto1,@afoto2)"
           ' crear comando
           Using loComando As New OleDbCommand(lsQuery, loConexion)
               loComando.Parameters.Add(New OleDbParameter("@nregistro", NregistroLabel1.Text))
               loComando.Parameters.Add(New OleDbParameter("@cliente", ClienteTextBox.Text))
               loComando.Parameters.Add(New OleDbParameter("@npresupuesto", NpresupuestoTextBox.Text))
               'IMAGEN PRINCIPAL
               If Foto_principalPictureBox.Image Is Nothing Then
                   loComando.Parameters.AddWithValue("@fotoprincipal", DBNull.Value)
               Else
                   Dim arrImage() As Byte
                   Dim ms As New IO.MemoryStream
                   Foto_principalPictureBox.Image.Save(ms, Foto_principalPictureBox.Image.RawFormat)
                   arrImage = ms.GetBuffer()
                   loComando.Parameters.Add("@fotoprincipal", OleDbType.Binary).Value = arrImage
               End If 
               loComando.Parameters.Add(New OleDbParameter("@acomponente", A_componenteTextBox.Text))
               loComando.Parameters.Add(New OleDbParameter("@afalla", A_fallaTextBox.Text))
               loComando.Parameters.Add(New OleDbParameter("@atrabajo", A_trabajoTextBox.Text))
               loComando.Parameters.Add(New OleDbParameter("@aobservacion", A_observacionTextBox.Text))
               'IMAGEN A1
               If A_foto1PictureBox.Image Is Nothing Then
                   loComando.Parameters.AddWithValue("@afoto1", DBNull.Value)
               Else
                   Dim arrImage() As Byte
                   Dim msa1 As New IO.MemoryStream
                   A_foto1PictureBox.Image.Save(msa1, A_foto1PictureBox.Image.RawFormat)
                   arrImage = msa1.GetBuffer()
                   loComando.Parameters.Add("@afoto1", OleDbType.Binary).Value = arrImage
               End If
              'IMAGEN A2
              If A_foto2PictureBox.Image Is Nothing Then
                  loComando.Parameters.AddWithValue("@afoto2", DBNull.Value)
              Else
                  Dim arrImage() As Byte
                  Dim msa2 As New IO.MemoryStream
                  A_foto2PictureBox.Image.Save(msa2, A_foto2PictureBox.Image.RawFormat)
                 arrImage = msa2.GetBuffer()
                  loComando.Parameters.Add("@afoto2", OleDbType.Binary).Value = arrImage
              End If
              loConexion.Open()   ' abrir conexión
              loComando.ExecuteNonQuery()
          End Using
       End Using
       MsgBox("Registrado " & NregistroLabel1.Text & " asociado a :" & "" & NpresupuestoTextBox.Text & " , Exitosamente", MsgBoxStyle.Information, "AVISO" + “ ” & ProductVersion & “”)
    Catch ex As Exception
          MsgBox(ex.Source & "; " & ex.Message, "AVISO" + “ ” & ProductVersion & “”)
    End Try

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta Error_007 miércoles, 20 de marzo de 2019 11:40
    domingo, 17 de marzo de 2019 7:32