MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

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

    Retornar caminho(diretório) de campo anexo

    Compartilhe

    DavidCooper
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 29/02/2016

    Retornar caminho(diretório) de campo anexo

    Mensagem  DavidCooper em Ter 22 Mar 2016, 10:45

    Olá galera... a situação é a seguinte, tenho um form com um campo anexo para anexar NotaFiscal...
    gostaria de criar um procedimento para abrir um novo form pra visualizar a nota fiscal no próprio Access...

    A nota fiscal é em PDF e pretendo fazer isto usando um controle activeX, o problema é que preciso saber o caminho do arquivo em anexo pra poder visualiza-lo no activeX... Ja busquei no Forum, no "Prof. Google"... sem sucesso...

    Grato..

    FabioPaes
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2333
    Registrado : 14/08/2013

    Re: Retornar caminho(diretório) de campo anexo

    Mensagem  FabioPaes em Ter 22 Mar 2016, 12:50

    Salve engano, os arquivos ANEXOS ficam armazenados direto no campo da Tabela... Sendo assim o caminho é o próprio campo da tabela...

    Não recomendo usar Anexo...

    Veja nesse Post do Avelino Sampaio, ele ensina a montar...
    [Você precisa estar registrado e conectado para ver este link.]

    DavidCooper
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 29/02/2016

    Re: Retornar caminho(diretório) de campo anexo

    Mensagem  DavidCooper em Ter 22 Mar 2016, 13:04

    Obrigado pelo retorno fabiopaes, mas como disse, ja tou por dentro de como usar o activeX, e como vc deve ter visto neste link q me mandou, é necessário ter o diretorio do arquivo PDF para q o ActiveX abra o mesmo,,,

    O campo anexo é "dividido" em três partes na tabela: FileData, FileType, FileName.... Consegui retornar FileName(nome do Aquivo) e FileType(formato do Arquivo - no caso PDF)... no caso suponho q FileData fosse o diretorio, mas não consigo "extrair" o diretorio desse anexo....

    De qq forma obrigado pelo retorno...

    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8907
    Registrado : 04/11/2009

    Re: Retornar caminho(diretório) de campo anexo

    Mensagem  JPaulo em Ter 22 Mar 2016, 15:10

    Ola Davi;

    Nesse tipo de campo o Ms Access guarda metadados em binario, por exemplo (C4F4E05C8F664AB1AF7839F2B937CA99);

    Não existe forma de dar a volta direto;

    Uma possibilidade é você usar esta função, que extraí o anexo para uma pasta temporaria e aí já pode usar o caminho completo.

    No final de usar, pode até fazer o delete folder e fica dinamico;

    Código:
    Function SalvaAnexo()
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim rstAnexo As DAO.Recordset2
    Dim fld As DAO.Field2
    Dim strCaminho As String
    'By JPaulo maximoaccess.com
    'extrair o anexo para uma pasta
    'para poder utilizar o caminho em outros eventos
    Set db = CurrentDb
    Set rst = db.OpenRecordset("SuaTabela", dbOpenDynaset)
        ' rst.FindFirst "ID = " & Me!ID
         Set rstAnexo = rst.Fields("SeuCampoAnexo").Value
         Set fld = rstAnexo.Fields("Filedata")
         'verifica se a pasta temporaria, existe
         If Len(Dir(CurrentProject.Path & "\PastaTemporaria", vbDirectory)) = 0 Then
         'se não existir, cria
            MkDir CurrentProject.Path & "\PastaTemporaria\"
            Else
         On Error Resume Next
         'se existir, apaga todos os ficheiros
            Kill CurrentProject.Path & "\PastaTemporaria\*.*"
         'depois apaga a pasta
            RmDir CurrentProject.Path & "\PastaTemporaria"
         'volta a criar de novo
            MkDir CurrentProject.Path & "\PastaTemporaria\"
         End If
         'coloca na variavel o caminho do anexo
         strCaminho = CurrentProject.Path & "\PastaTemporaria\" _
         & rstAnexo.Fields("Filename")
        
         On Error GoTo 0
         'sala o anexo
         fld.SaveToFile strCaminho
     
     rstAnexo.Close
     rst.Close
     Set rstAnexo = Nothing
     Set rst = Nothing
     Set db = Nothing
    End Function


    .................................................................................
    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

    DavidCooper
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 29/02/2016

    Re: Retornar caminho(diretório) de campo anexo

    Mensagem  DavidCooper em Ter 22 Mar 2016, 16:14

    Viishh.... Uma baita "gambiarra"...kkkkk.... Muitissimo obg Mestre JPaulo, vou fazer as modificações necessárias aqui e dou um retorno aqui no forum...

    Grato

    DavidCooper
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 29/02/2016

    Re: Retornar caminho(diretório) de campo anexo

    Mensagem  DavidCooper em Ter 22 Mar 2016, 16:41

    Deu Erro: "Erro de Compilação: o tipo usado pelo usuario não foi definido"... Bem na linha que define "Dim rstAnexo As DAO.Recordset2"

    FabioPaes
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2333
    Registrado : 14/08/2013

    Re: Retornar caminho(diretório) de campo anexo

    Mensagem  FabioPaes em Ter 22 Mar 2016, 16:46

    Ta uma olhada la nas Referencias desse Modulo... ta faltando alguma...

    Veja se não é a : Microsoft Office xxx Object Library

    [Você precisa estar registrado e conectado para ver esta imagem.]

    DavidCooper
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 14
    Registrado : 29/02/2016

    Re: Retornar caminho(diretório) de campo anexo

    Mensagem  DavidCooper em Ter 22 Mar 2016, 17:20

    Ok.. realmente tava faltando uma referencia, mas agr o problema ta na hr de salvar " fld.SaveToFile strCaminho" .... Da erro 3001: Argumento Invalido.... scratch Shocked

    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8907
    Registrado : 04/11/2009

    Re: Retornar caminho(diretório) de campo anexo

    Mensagem  JPaulo em Qua 23 Mar 2016, 12:46

    ola;

    Não deveria dar erro.
    Faça por favor o Debug, Compile para ver se existe erros em códigos.


    .................................................................................
    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

      Data/hora atual: Sab 10 Dez 2016, 12:36