GRAVAR ARQUIVO DOC EM BANCO DE DADOS

USUARIO.EXCLUIDOS 15/08/2007 09:57:45
#230958
Pessoal,

Como já mencionei anteriormente estou desenvolvendo um aplicativo em VBA Excel (Isso pq aqui não posso usar Visual Basic) para gerenciamento de projetos. Uma das etapas do cronograma é a espeficicação funcional e nesta etapa preciso que o sistema salve esta espeficicação (arquivo .doc) no banco de dados access, ou seja, no campo especificação.

Isso é possível?
USUARIO.EXCLUIDOS 15/08/2007 14:00:37
#231024
No Access?????

Amigo, sei lá... talvez com um Campo OLE vc consiga.


De uma olhada no link abaixo, crieo que vai lhe ajudar.
http://www.lula.pro.br/artigo.asp?codigo=464&autor=Magico
USUARIO.EXCLUIDOS 15/08/2007 21:41:27
#231114
Acho que vc tera problemas, pois o campo certo pra esse tipo de situação seria o VARBINARY (SQL Server) do Access eu desconheço, mas acho que não tem algo semelhante.
USUARIO.EXCLUIDOS 16/08/2007 06:51:29
#231122
Arquivos são (DOC, texto, imagens) armazenados em um BD desde que o mesmo ofereça algum suporte aos formatos BLOB (Binary Large OBject).

No caso do MS-Access, o tipo existe e é o OLE Object (ou adLongVarBinary, usando a enumeração da ADO). Para o MS SQL Server, o tipo é chamado de IMAGE, que na verdade é exatamente o mesmo adLongVarBinary, só que administrado de um modo um pouco diferente, já que o SQL Server é Client/Server de verdade.

Como o SQL Server é resultado de uma mixagem que a M$ fez com seus padrões de armazenamento de dados, não é de se estranhar que os tipos entre o MS-Access e o SQL Server sejam parecidos, quando não idênticos.

O campo VARBINARY (ou melhor, SQL_VARBINARY) é um tipo de campo que também aceita BLOB, com uma capacidade menor, mas é derivado do FOXPRO, e na prática serve mais para armazenar memorandos em formatos Texto / XML / HTML (e outros), que são normalmente menores em tamanho.


Finalizando, as mesmas rotinas utilizadas para gravar imagens em um campo de um registro de uma tabela do MS-Access é válida para quaisquer outros arquivos.

O conceito é carregar o conteúdo do arquico para uma matriz de bytes (guardando o tamanho do arquivo + 1) e salvar esse vetor no campo do recordset.

Para esse fim você pode fazer o trabalho "manualmente" (ou seja, abrindo o arquivo para leituna em forma binária e carregando-o para a matriz), ou usar um ADODB.Stream, que faz o mesmo trabalho.

O método manual é melhor (no caso do VB6 / ADO 2.0 á 2.8) porque permite que você gerencie o tamanho do arquivo, que vai ser utilizado no momento do AppendChunk do objeto Field.

Usar os ADODB.Stream é vantajoso no caso de se desejar gravar mais de um arquivo em um mesmo campo, por exemplo, ou de apenas carregar o conteúdo desde o campo até um PictureBox sem precisar gravar a imagem em disco antes (VB6 / DotNet).
USUARIO.EXCLUIDOS 10/09/2007 19:34:29
#234959
Desenvolvi o código abaixo que resolveu o problema.

Dim mystream As ADODB.Stream
Dim rs As New ADODB.Recordset
Dim strNomeArq As String
Dim strSql As String

If txtCaminhoOrigem.Text = "" Then
MsgBox "Selecione o caminho de origem!", vbCritical + vbOKOnly, "Controle de Aplicativo"
Exit Sub
End If

strNomeArq = Inverte(txtCaminhoOrigem.Text)

If sConn.State = 0 Then
Call Conecta_Banco_dados
End If

strSql = "Select * from TB_Item_EFuncional where PK_item_EP_Codigo ='" & strCodigoProjeto & "'"

Set sRs = sConn.Execute(strSql)

Set mystream = New ADODB.Stream
'Define o tipo como binário
mystream.Type = adTypeBinary

If sRs.EOF Then
rs.Open "TB_Item_EFuncional", sConn, adOpenDynamic, adLockOptimistic
rs.AddNew
mystream.Open
mystream.LoadFromFile txtCaminhoOrigem.Text
rs!PK_item_EP_Codigo = strCodigoProjeto
rs!item_EP_NomeArq = strNomeArq
rs!item_EP_Tamanho = mystream.Size
rs!item_EP_Arquivo = mystream.Read
rs.Update
Else
rs.Open "Select * from TB_Item_EFuncional where PK_item_EP_Codigo ='" & strCodigoProjeto & "'", sConn, adOpenDynamic, adLockOptimistic
mystream.Open
mystream.LoadFromFile txtCaminhoOrigem.Text
rs!item_EP_NomeArq = strNomeArq
rs!item_EP_Tamanho = mystream.Size
rs!item_EP_Arquivo = mystream.Read
rs.Update
End If
mystream.Close
rs.Close
sRs.Close
sConn.Close
Tópico encerrado , respostas não são mais permitidas