GRAVAR PDF DENTRO DO SQLSERVER

RODEOLIVEIRA 26/03/2010 10:29:01
#337960
Bom dia a todos....


Estou desenvolvendo um sistema que vai gerenciar [Ô]Arquivo Morto[Ô], só que todos os documentos do arquivo morto serão digitalizados, ocorre que muitos já estão digitalizados mas salvos como PDF no cliente.

A princípio eu iria salvar no banco somente o Path do arquivo e o arquivo em si em uma pasta da rede, mas estou seriamente preocupado em fazer dessa forma, pois assim ficaria muito fácil alguém acessa a pasta e apagar alguns arquivos e comprometer o sistema, outro problema que estou preocupado é quando ao backup, pois se estiver tudo dentro do banco eu mando ele rodar um backup e pronto, tudo salvado, caso contrário tenho que criar uma rotina para compactar os arquivos e fazer o backup dele também.

Como eu faço então para salvar um pdf dentro de um banco sqlserver 2000


Rodrigo
MADMAX 26/03/2010 10:57:28
#337962
Resposta escolhida
Tem que gravar em um campo do tipo binario , segue abaixo um codigo de Exemplo .... de como Abrir e Gravar Binario no banco de Dados, espero que te ajude .. o tipo de dados e o tipo e BLOB ..
Aqui um link sobre este tipo.
http://www.macoratti.net/08/11/asp_blobs.htm

Gravando dados no banco .

Dim buffer() As Byte
Dim FileLenght As Long
Dim FileId As Long
Dim Qr As New ADODB.Command
FileId = FreeFile
Open sCaminhoDoArquivo For Binary Access Read As FileId
FileLenght = LOF(FileId)
ReDim buffer(FileLenght)
Get FileId, , buffer()

Qr.CommandText = [Ô]insert into TBPDF (TBPDF_ARQUIVO) VALUES (?)[Ô]
Qr.Parameters(0).AppendChunk buffer()
Qr.Execute


Para Pegar os dados do Banco e tranformar novamente em arquivo
Dim AuxV As Variant
Dim AuxV2 As Variant
Dim buffer() As Byte
Dim FileId As Long
FileId = FreeFile
Open sCaminhoTemp For Binary Access Write As FileId
AuxV = Null
AuxV2 = Null
AuxV = Re([Ô]TBPDF_ARQUIVO[Ô]).GetChunk(1024)
Do While Not IsNull(AuxV)
AuxV2 = AuxV2 & AuxV
AuxV = Re([Ô]TBPDF_ARQUIVO[Ô]).GetChunk(1024)
Loop
If Not IsNull(AuxV2) Then
ReDim buffer(Len(AuxV2))
buffer = AuxV2
Put FileId, , buffer
Close FileId
End If
Close FileId
Screen.MousePointer = vbDefault
MDIMain.Status.Panels(1).Text = [Ô][Ô]
FABIO.PIZA 26/03/2010 11:58:09
#337971
Uma ideia seria gravar o arquivo pdf em um diretorio especifico, e na base sql somente onde esta o arquivo e o que se trata, pois a gravação binaria dentro de uma base de dados tem a comprometer o tamanho e performance, fora o risco que se corromper a base voce perder todos os registros importados do pdf.

Fabio
RODEOLIVEIRA 29/03/2010 14:40:21
#338127
MADMAX

Estou usando o SQLServer 2000.

No tipo de campo estou colocando Image, se entendi bem na linha Qr.CommandText = [Ô]insert into TBPDF (TBPDF_ARQUIVO) VALUES (?)[Ô]
eu tenho que trocar TBPDF pelo nome de minha tabela e em TBPDL_Arquivo pelo nome de meu campo, mas ele me reporta um erro na linhda Qr.Parameters(0).AppendChunk buffer() dizendo que [Ô]O intem não pode ser encontrado no coleção correspondente ou ao ordinal solicitado.

MADMAX 29/03/2010 17:29:27
#338151
RODEOLIVEIRA não sei pode ser Tipo Image ... como citei e o Tipo [Ô]Blob[Ô] ... ou acho que pode ate ser o Tipo [Ô]Text[Ô] que e o que uso aqui ,E Isso mesmo TBPDF e o nome da tabela e o TBPDF_ARQUIVO .Lembrando que se voce colocar mais campos no insert o indice muda por exemplo... [txt-color=#e80000]Agora que vi ops desculpa falta um comando mesmo se não não funciona......[/txt-color]
Set Qr.ActiveConnection = CN
Aonde CN. e sua conexão com o banco .Isso tem que ficar antes do insert ou update so para complementar vou passar um exemplo de update


insert into TBPDF (TBPDF_ID,TBPDF_ARQUIVO) VALUES (?,?)[Ô]
Qr.Parameters(0).Value = 1
Qr.Parameters(1).AppendChunk buffer()
Qr.execute

Update
Qr.SQL = [Ô]update TBPDF Set TBPDF_ID = ? ,TBPDF_ARQUIVO = ? WHERE CONDICAO[Ô]
Qr.Parameters(0).Value = 1
Qr.Parameters(1).AppendChunk buffer()
Qr.execute


Qualquer coisa estamos ai..
MADMAX 31/03/2010 16:12:15
#338335
Deu certo ?
RODEOLIVEIRA 31/03/2010 22:24:19
#338350
Deu sim... valeu...
Tópico encerrado , respostas não são mais permitidas