MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Arquivo OLE - BLOB - Extrair dados / Criar ficheiro

    Compartilhe
    avatar
    Maicon
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 119
    Registrado : 08/09/2012

    [Resolvido]Arquivo OLE - BLOB - Extrair dados / Criar ficheiro

    Mensagem  Maicon em 14/4/2017, 09:52

    Senhores

    Estou tentando implementar uma rotina que extraia a imagem de um campo OLE e salve em diretório temporário, no exemplo que estou fazendo até extrai mas o arquivo corrompe e não consigo abri-lo.
    Uso ACCESS 2010 32 Bits

    copiei o código  do site : ammara.com/access_image_faq/read_write_blob.html

    O código do módulo é esse :

    Código:
    Option Compare Database

    'Function:  BlobToFile - Extracts the data in a binary field to a disk file.
    'Parameter: strFile - Full path and filename of the destination file.
    'Parameter: Field - The field containing the blob.
    'Return:    The length of the data extracted.
    Public Function BlobToFile(strFile As String, ByRef Field As Object) As Long
        On Error GoTo BlobToFileError

        Dim nFileNum As Integer
        Dim abytData() As Byte
        BlobToFile = 0
        nFileNum = FreeFile
        Open strFile For Binary Access Write As nFileNum
        abytData = Field
        Put #nFileNum, , abytData
        BlobToFile = LOF(nFileNum)

    BlobToFileExit:
        If nFileNum > 0 Then Close nFileNum
        Exit Function

    BlobToFileError:
        MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, _
               "Error writing file in BlobToFile"
        BlobToFile = 0
        Resume BlobToFileExit

    End Function


    'Function:  FileToBlob - Loads a file into a binary field.
    'Parameter: strFile - Full path and filename of the source file.
    'Parameter: Field - The binary field into which the file is to be loaded.
    Public Function FileToBlob(strFile As String, ByRef Field As Object)
        On Error GoTo FileToBlobError

        If Len(Dir(strFile)) > 0 Then
            Dim nFileNum As Integer
            Dim byteData() As Byte

            nFileNum = FreeFile()
            Open strFile For Binary Access Read As nFileNum
            If LOF(nFileNum) > 0 Then
                ReDim byteData(1 To LOF(nFileNum))
                Get #nFileNum, , byteData
                Field = byteData
            End If
        Else
            MsgBox "Error: File not found", vbCritical, _
                   "Error reading file in FileToBlob"
        End If

    FileToBlobExit:
        If nFileNum > 0 Then Close nFileNum
        Exit Function

    FileToBlobError:
        MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, _
               "Error reading file in FileToBlob"
        Resume FileToBlobExit

    End Function



    No botão de comando coloquei o código abaixo :

    Código:
    Private Sub SALVAR_OBJETO_Click()
    'Extraia o arquivo contido no campo denominado' Image 'para um arquivo referenciado ao campo ' [caminho] '.
    BlobToFile [caminho], [Image]
    End Sub

    Basicamente preciso salvar o conteúdo de um campo OLE em uma pasta temporária.
    Poderia ser outro código andei lendo sobre filestream, mas neste caso teria que usar ado eu este bicho é meio estranho pra mim. se alguém puder me ajudar agradeço.
    avatar
    Maicon
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 119
    Registrado : 08/09/2012

    Re: [Resolvido]Arquivo OLE - BLOB - Extrair dados / Criar ficheiro

    Mensagem  Maicon em 15/4/2017, 07:05

    Localizei um Erro. Já consigo ler os arquivos baixados.
    Não estava funcionando porquê não havia entendido a dinâmica da função

    Funciona assim:

    Código:
    'Leia o arquivo' Image-In.jpg 'para o campo chamado' Image '.
    FileToBlob "C: \ Photos \ Image-In.jpg", [Image]

    Esta parte do código lê o arquivo de entrada de imagem e joga para o campo OLE [image] então quando salvamos o registro a função FileToBlob" já tratou o a imagem, que se fosse salva diretamente com botão direito do mouse o access , O arquivo ficaria truncando no hexadecimal da imagem já que o access salva junto informações do arquivo o que acaba corrompendo o arquivo.

    depois desse passo podemos executar a outra parte do código:

    Código:
    'Extraia o arquivo contido no campo chamado' Image 'para um arquivo chamado' Image-Out.jpg '.
    BlobToFile "C: \ Photos \ Image-Out.bmp", [Image]


    No caso aqui eu alterei a extensão do arquivo de saída para bmp, pois é o que eu preciso para
    exibir a imagem dinamicamente no meu formulário.

    Não vou fechar o tópico ainda, porque quero implementar melhorias no código e disponibilizar para todos no fórum.
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5619
    Registrado : 15/03/2013

    Re: [Resolvido]Arquivo OLE - BLOB - Extrair dados / Criar ficheiro

    Mensagem  ahteixeira em 3/7/2018, 09:58

    Olá Maicon Fernandes,  

    Obrigado pelo retorno, o fórum agradece.
    Também temos cá este exemplo, pode ajudar outros membros:
    [Você precisa estar registrado e conectado para ver este link.]

    Nota:
    O título do tópico deve-se colocar apenas na primeira mensagem, depois o fórum repete automaticamente.
    Já regularizei, vou proceder ao ajuste do título do tópico para ficar mais fácil para as "buscas" do fórum.

    Abraço

      Data/hora atual: 16/12/2018, 17:55