Ola caros sqlnautas, gostaria de retornar aqui com mais uma dica importante sobre imagens no crystal reports. Imagine o seguinte cenario: voce esta montando um relatorio em crystal reports que devera exibir imagens que, ao inves de estarem armazenadas no banco de dados, estao em arquivos no disco rigido do servidor, e no banco de dados voce so tem a localizacao deste arquivo, o que e muito comum, pois armazenar arquivos em banco de dados e extremamente desaconselhavel quando se pensa em performance. O que precisamos fazer, e utilizar uma ferramenta muito simples, chamada BULK INSERT. Este comando e utilizado para importar dados em massa provenientes de arquivos para o banco de dados. Mas nos nao vamos armazenar esta imagens, e sim converter os arquivos de imagem em formato BLOB, ou image. O conceito e simples: realizo o bulk insert do arquivo dentro de uma tabela temporaria, que retorna um select ao crystal reports com a coluna image da tabela: Code Snippet -- exec spcAmplaPedidoCompraImagem 3, 2685 alter proc spcAmplaPedidoCompraImagem @cd_empresa int , @nr_pedido int as declare @nr_documento int declare @revisao int declare @vcd_item char(13) declare @vdocumento varchar(4000) declare @sql varchar(8000) -- *************** -- SQL Burger 2011 -- Procedure que retorna as imagens provenientes de arquivos -- para exibicao em relatorio crystal reports. -- *************** -- Inicio a montagem de uma query dinamica, necessaria para a execucao -- do comando bulkinsert com parametros dinamicos, provenientes da tabela -- que possui a localizacao dos arquivos. select @sql = ' create table #tmpImagem (imagem image) ' -- Insiro em uma tabela auxiliar todos os itens do pedido de compra -- para verificar quais possuem documentos que deverao ser impressos -- junto com o pedido. create table #tmpItem (cd_item char(13) collate database_Default null) insert into #tmpItem select cd_item from pedidocitem where cd_empresa = @cd_empresa and nr_pedido = @nr_pedido insert into #tmpItem select cd_item from AdhEPTRomaneioPedidoCompra where cd_empresa = @cd_empresa and nr_pedido = @nr_pedido -- Faco join da tabela temporaria de itens com a de documentos -- configurados a serem impressos nos pedidos de compra, e valido -- se o arquivo esta ativo e dentro da validade. declare cp1 cursor local fast_forward read_only for select distinct a.cd_item, b.documento from #tmpItem a, itemdocumentorev b where a.cd_item = b.cd_item and b.imprime_pc = 'S' and b.cd_situacao = 'A' -- ativos apenas and b.dt_validade >= convert(char(10), getdate(), 120) order by a.cd_Item open cp1 while 1 = 1 begin fetch next from cp1 into @vcd_item, @vdocumento if @@fetch_status <> 0 break -- Para cada arquivo retornado, monto na query dinamica o comando bulk insert -- que ira inserir o stream da imagem na tabela #tmpImagem, criada no comeco -- do procedimento. select @sql = @sql + ' insert into #tmpImagem (imagem) select Bulkcolumn from OPENROWSET( BULK N''' + rtrim(@vdocumento) + ''', SINGLE_BLOB ) as picture ' end close cp1 deallocate cp1 -- No final, retorno as imagens. select @sql = @sql + ' select imagem from #tmpImagem ' -- Executo a query dinamica exec (@sql) A string que contem a query dinamica (@sql) foi executada da seguinte forma: Code Snippet create