EXTRAIR AS IMAGENS E DOC DO SQL/SERVER

ACROSSVISUAL 25/08/2011 16:44:02
#382494
Prezados Amigos,

Preciso extrair de um Banco SQL/Server todas as imagens (PDF, TIF, JPG, PNG), todos os arquivos Word (DOC) Excel (XLS) e E-mails (MSG) e gravá- los em disco.

Como faço?

Grato pela Ajuda
Miguel

PROFESSOR 24/10/2011 20:03:59
#387621
Arquivos gravados em banco devem possuir algumas informações complementares, pois todos são armazenados como matriz de bytes.

Assim, por exemplo, devem estar armazenados os dados do arquivo (no campo BLOB), o nome (com extensão) original, e podem estar armazenados ainda o tipo MIME e o tamanho, por exemplo.

Tendo ao menos o nome original do arquivo e os dados dele, é fácil, fácil.

A extração dos dados se dá com o uso da ADO, via Recordset. Os dados contidos no campo BLOB já estão em formato binário, e assim podem ser gravados em disco, pois representam um [Ô]fluxo de dados[Ô]. Para esse fim, a ADO conta, á partir da 2.5, com o objeto ADO Stream.

Assim, no seu SELECT atual, via Recordset, você inclui o campo onde está o documento, e para salvar o arquivo (extrair do banco), pode chamar uma função passando esse objeto Recordset. Seria algo como:

Public Function CarregaDoc(ByVal RS As ADODB.Recordset) As Boolean
On Error GoTo hell:
If RS Is Nothing Then
GoTo hell:
End If
Dim strStream = New ADODB.Stream
strStream.Type = adTypeBinary
strStream.Open
strStream.Write RS.Fields([Ô]NomeDoCampoDoDocumento[Ô]).Value
strStream.SaveToFile App.Path & [Ô]\[Ô] & RS.Fields([Ô]NomeDoArquivoOriginal[Ô]).Value, adSaveCreateOverWrite
hell:
CarregaDoc = False
Err.Clear
sai:
End Function


Observe que podem ocorrer vários problemas. Direitos de acesso á gravação dos arquivos, dados que foram mal gravados no banco ou com nomes incorretos, e outros fatores, podem comprometer o processo.

Mas basicamente, esse é o procedimento.
Tópico encerrado , respostas não são mais permitidas