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

    Extrair arquivo OLE.

    Compartilhe
    avatar
    Maicon
    Novato
    Novato

    Respeito às Regras 100%

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

    Extrair arquivo OLE.

    Mensagem  Maicon em Sex 14 Abr 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 : "http://www.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
    Novato
    Novato

    Respeito às Regras 100%

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

    Localizei um Erro. Já consigo ler os arquivos baixados.

    Mensagem  Maicon em Sab 15 Abr 2017, 07:05

    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.

      Data/hora atual: Seg 20 Nov 2017, 15:29