none
Como agregar o jalar imagenes a un Crystal Reports, cuando sus direcciones (de las imagenes) se alojan en un campo texto de una BD Acces 2010 RRS feed

  • Debate general

  • Inicialmente tengo esto:

    Un dataset

            Dim sql_imagen As String = "SELECT ID , Nombre As Nombre, Ruta FROM Imagen"
            Dim imagen_da As New OleDbDataAdapter
            Dim imagen_ds As New DataSet
            Dim dr As DataRow

            Dim cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source= H:\Catalogo.accdb;")

            Dim comando As OleDbCommand = New OleDbCommand(sql_imagen, cn)
            imagen_da.SelectCommand = comando
            imagen_da.Fill(imagen_ds, "Imagen")

            Dim dt as new datatable

            dt = imagen_ds.Tables(0)

    -----------------------------------para el analisis----------------------------

            cn.Open()
            Dim lector As OleDbDataReader = comando.ExecuteReader
            While lector.Read()
                  dr("NuevaColuma") = Imagen_to_bytes(Image.FromFile(lector.GetString("Ruta"))) 

                 ''Referencia a objeto no establecida como instancia de un objeto.            

           dt.Rows.Add(dr)
            End While
            dr = dt.NewRow()

    --------------------------------------------------------------------

    Lo que intento hacer es que mientras el es leido el campo Direccion de tipo String a traves de  Un While se entregue una esa Cadena como Parametro a una funcion que jalara la imagen de dicha Cadena y la anhadira al Dataset para emitir el reporte.

    Es decir: Necesito salvar esa String en la medida que es leida y recorrida por el While.
    La funcion que me lleva la imagen al reporte es esta, y jala cada imagen PERFECTAMENTE "creando un Dataset totalmente manual", pero cuando lo creo a partir de una Consulta me da error:

     

     Public Function Imagen_to_bytes (ByVal Foto As Image) As Byte()
            If Not Foto Is Nothing Then
                Dim Codi As New IO.MemoryStream
                Foto.Save(Codi, Imaging.ImageFormat.Jpeg)
                Return Codi.GetBuffer
            Else
                Return Nothing
            End If
      End Function

    domingo, 15 de abril de 2012 21:36

Todas las respuestas

  • HE AQUI COMO FUNCIONA MANUALMENTE :

    Private Sub btnReporte_Click(ByVal ....... System.EventArgs) Handles btnReporte.Click
            Try
                Dim iReporte As New VisorReporte

                Dim rpt As New crImagenes

                rpt.Load()
                rpt.SetDataSource(ReturnDataSet)
                rpt.Refresh()

                iReporte.Reporte = rpt
                iReporte.ShowDialog()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub

     

    Private Function ReturnDataSet() As DataSet

            Dim dt As New DataTable
            Dim dr As DataRow
            Dim ds As New DataSet

            dt.Columns.Add(New DataColumn("Codigo", GetType(Short)))
            dt.Columns.Add(New DataColumn("Descripcion", GetType(String)))
            dt.Columns.Add(New DataColumn("Imagen", GetType(Byte())))

            dr = dt.NewRow()
            dr("Codigo") = 1
            dr("Descripcion") = "Imagen 1"
            dr("Imagen") = ImageToByte(Image.FromFile("..\Imagen1.jpg"))
            dt.Rows.Add(dr)

            dr = dt.NewRow()
            dr("Codigo") = 2
            dr("Descripcion") = "Imagen 2"
            dr("Imagen") = ImageToByte(Image.FromFile("..\Imagen2.jpg"))
            dt.Rows.Add(dr)

            dr = dt.NewRow()
            dr("Codigo") = 3
            dr("Descripcion") = "Imagen 3"
            dr("Imagen") = ImageToByte(Image.FromFile("..\Imagen3.jpg"))
            dt.Rows.Add(dr)

            ds.Tables.Add(dt)
            ds.Tables(0).TableName = "Imagenes"

            Dim iDS As New dsImagenes 'objeto dataset
            iDS.Merge(ds, False, System.Data.MissingSchemaAction.Ignore)
            Return iDS

        End Function

    domingo, 15 de abril de 2012 21:41