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

    Retornar caminho(diretório) de campo anexo

    Compartilhe
    avatar
    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..
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3336
    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.]
    avatar
    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...
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 9661
    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


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

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

    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.]
    avatar
    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
    avatar
    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"
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3336
    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.]
    avatar
    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
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 9661
    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.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

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

    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: Ter 17 Out 2017, 02:51