Recuperando imagens de bancos MDB com ASP
Veja neste artigo: Recuperando imagens de bancos MDB com ASP.
Autor: Dennes Torres – dennestorres@bufaloinfo.com.br
Recuperando imagens de bancos MDB com ASP
No último artigo vimos como exbir em páginas web imagens contidas em bancos de dados. Muitos porém devem ter se decepcionado ao descobrir que a solução proposta no artigo anterior só funciona com SQL Server e não com Access.
A questão em relação ao Access é que seu campo Objeto OLE é diferente do campo Image do SQL Server. O campo image do SQL Server grava a imagem de forma binária, bit a bit, enquanto que o campo Objeto OLE do Access guarda a imagem dentro de um objeto OLE. Assim sendo, além de guardar os bits da imagem o access envolve esses bits com um objeto OLE. Desta forma, se simplesmente pegarmos o conteúdo do campo e exibirmos em uma página web o browser não entenderá esse conteúdo como uma imagem.
Para resolver o problema precisamos, antes de exibir a imagem, retirar dela o cabeçalho OLE inserido pelo Access, cabeçalho este que tem um total de 78 bytes. Retirado o cabeçalho, teremos em mãos a imagem original, esta sim poderá ser exibida no Browser.
Vejamos um exemplo com o banco Northwind do Access. Esse banco tem um campo chamado Photo na tabela Employees. Este campo contém uma imagem BMP (Vocês não sabiam que pode-se colocar BMP na Web ? IE 5 aceita, netscape não).
Para podermos fazer a leitura byte a byte de uma imagem iremos utilizar um método chamado GetChunk, método do objeto Field que permite acessarmos um campo tipo objeto. O GetChunk possui um "ponteiro" interno que determina em que ponto da imagem ele está. Assim sendo, primeiramente fazermos a leitura dos 78 bytes iniciais. Na leitura seguinte o ponteiro já estará posicionado no byte 79 e poderemos fazer a leitura a partir dai. Vejam o resultado :
<%
response.Expires = 0
response.Buffer = TRUE
response.clear
response.contenttype = "image/bmp"
Set db = CreateObject("ADODB.Connection")
set rs=createobject("adodb.recordset")
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\ultradev\northwind.mdb;Persist Security Info=False"
rs.open "SELECT photo as imagem FROM employees where employeeid=" & request.querystring("cod") ,db
t=rs.fields("imagem").actualsize
img=rs.fields("imagem").getchunk(78)
img=rs.fields("imagem").getchunk(t -78)
response.binarywrite img
rs.close
db.Close
Set rs = nothing
Set db = nothing
%>
Para chamar essa página precisaremos de outra igual a criada no artigo anterior, que chame esta página a partir do SRC de uma tag image. Veja um exemplo :
<html>
<body>
<img src="imagemaccess.asp?cod=<%=request.querystring("cod") %>">
</body>
</html>
Mais uma vez vocês se decepcionarão se tentarem gravar gif's em arquivos MDB e executar esta página. Simplesmente não funcionará. O cabeçalho OLE inserido pelo Access para arquivos .gif é diferente do cabeçalho OLE inserido para arquivos .BMP, fazendo com que essa solução não funcione para Gif's inseridas através de forms no Access.
Mas observem que eu disse "inseridas através de forms no access". Nós temos como gravar uma gif em um campo objeto OLE sem que o access faça a inserção dos 78 bytes de cabeçalho e essa será a solução que utilizaremos no próximo artigo.
Obs : Se alguém descobrir qual cabeçalho o access insere em gif's, por favor me conte.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo