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

    [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Compartilhe

    diegojacob
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 118
    Registrado : 06/07/2011

    [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  diegojacob em Qua 08 Jul 2015, 15:11

    Bom dia,
    estou trabalhando em um controle de documentos, e gostaria de salvar os arquivos dentro da tabela do SQL Server que é vinculada com o meu frontend (fazer uma upload diretamente para um campo da tabela, para futuramente fazer downloads).
    Meu frontend é em Access e a Base de dados (Backend) é SQL server.

    Fiz diversos tipos de busca no Fórum, mas somente encontrei funções que gravam o caminho do arquivo, e não é isso que eu preciso.


    Desde já agradeço e fico no aguardo de colaborações dos nobres amigos do Fórum.

    Att.,
    Diego


    Última edição por diegojacob em Qui 23 Jul 2015, 21:02, editado 1 vez(es)

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5889
    Registrado : 05/11/2009

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  Alexandre Neves em Qui 09 Jul 2015, 11:56

    Bom dia,
    Veja se lhe ajuda [Você precisa estar registrado e conectado para ver este link.]


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    diegojacob
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 118
    Registrado : 06/07/2011

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  diegojacob em Qui 09 Jul 2015, 21:18

    Boa tarde Alexandre,
    nesse exemplo que você indicou, não encontrei nenhuma correlação do Access com o SQL Server, não sei qual o TIPO DE CAMPO DA TABELA DO SQL SERVER usar, para que o Access 2010 reconheça como um campo para anexar arquivos.

    Estou pesquisando outras fontes, mas nada de concreto ainda.

    Preciso saber qual TIPO DE CAMPO DA TABELA NO SQL SERVER usar e que seja reconhecido pelo Access, depois eu posso até testar esse exemplo.

    Obrigado e enviarei informações assim que obtiver algum avanço, creio que servirá par muitos aqui no Fórum.

    Obrigado.

    Diego

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  ahteixeira em Qui 09 Jul 2015, 22:35

    Olá a todos!
    Diego Jacob, não tenho a certeza, mas acho que é tipo BLOB.
    Já tenho visto alguns artigos sobre conversão para se fazer FILESTREAM.

    Veja se links abaixo ajuda:
    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]
    Abraço

    diegojacob
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 118
    Registrado : 06/07/2011

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  diegojacob em Sex 10 Jul 2015, 19:48

    Boa tarde Alvaro, obrigado pela ajuda.
    com os links enviados, eu consegui criar a tabela FileStream, a qual estava ocorrendo erro.

    Agora, no exemplo:
    [Você precisa estar registrado e conectado para ver este link.]
    eu não consegui interpretar como usar as funções para ver se funciona. Podem colaborar com suas experiências?



    Tabela criada no SQL Server:
    tbl_Attach_File

    CAMPOS:

    ID_Attach_File
    ID_Document '(Para vícnculo do arquivo com o documento)
    Attach_Native_File '(Arquivo nativo, .docx, .xlsx, .zip etc.)
    Attach_PDF_File '(.pdf)
    Description_File '(Descrição do arquivo)


    Função do exemplo:


    Option Compare Database
    Option Explicit

    'Adiciona o arquivo
    Sub AddFile(strDescription As String, strFilename As String)
    Dim con As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim objStream As New ADODB.Stream

    'create the stream
    objStream.Type = adTypeBinary
    objStream.Open
    objStream.LoadFromFile strFilename

    con.Open "PROVIDER=SQLOLEDB.1;PERSIST SECURITY INFO=FALSE;INITIAL CATALOG=FS;DATA SOURCE=(local)\sqlexpress2008r2;INTEGRATED SECURITY=SSPI"
    rs.Open "Select * from FSTest", con, adOpenDynamic, adLockOptimistic
    rs.AddNew
    rs!Description = strDescription
    rs!FS = objStream.Read
    rs.Update
    rs.Close
    objStream.Close
    con.Close
    End Sub


    'Visualiza o arquivo
    Sub ReadFile(strDescription As String, strFilename As String)
    Dim con As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim objStream As New ADODB.Stream

    'create the stream
    objStream.Type = adTypeBinary
    objStream.Open

    con.Open "PROVIDER=SQLOLEDB.1;PERSIST SECURITY INFO=FALSE;INITIAL CATALOG=FS;DATA SOURCE=(local)\sqlexpress2008r2;INTEGRATED SECURITY=SSPI"
    rs.Open "Select * from FSTest where Description = '" & strDescription & "'", con, adOpenDynamic, adLockOptimistic
    If Not rs.EOF Then
    objStream.Write rs!FS
    objStream.SaveToFile strFilename, adSaveCreateOverWrite
    objStream.Close
    End If
    rs.Close
    con.Close
    End Sub



    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  ahteixeira em Sex 10 Jul 2015, 20:40

    Olá, "não sei se estou a dizer o maior disparate", mas a ideia dos artigos que vi parece que funciona da seguinte forma.

    O campo tipo BLOB permite guardar no formato binário.
    Parece que é necessário efectuar uma leitura no modo binário e guardar.
    Adicionalmente no mesmo registo devemos ter o nome do ficheiro e tipo (extensão).
    Quando desejamos um ficheiro arquivado na base de dados, a aplicação deverá fazer o inverso, que será ler no modo binário, criar novamente o ficheiro, numa pasta especifica ou temporária e por fim é que poderá ser aberto pelo respectivo aplicativo.
    Desta forma até podemos guardar, executaveis, videos, etc.

    Espero que ajude, entretanto mais dois links:
    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]

    Este acho que vai resolver:
    [Você precisa estar registrado e conectado para ver este link.]

    Ficando aguardar se algum colega aqui do fórum tem mais alguma opinião.

    Abraço

    diegojacob
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 118
    Registrado : 06/07/2011

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  diegojacob em Ter 14 Jul 2015, 15:40

    Muito obrigado Alvaro,
    consegui fazer o upload do arquivo, usei um dos códigos informado:


    Option Compare Database

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim mstream As ADODB.Stream


    Private Sub Button_Native_File_Click()

    Dim Filepath As String: Filepath = fncLocalizarArquivo


    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
    rs.Open "Select * from ENG_tbl_Attach_File", cn, adOpenKeyset, adLockOptimistic

    Set mstream = New ADODB.Stream
    mstream.Type = adTypeBinary
    mstream.Open
    mstream.LoadFromFile (Filepath)
    rs.Fields("Attach_Native_File").Value = mstream.Read
    rs.Fields("Upload_Date_Native").Value = Now()
    rs.Update

    rs.Close
    cn.Close

    End Sub


    Eu agreguei uma função que encontrei no Fórum, fncLocalizarArquivo, a qual abre uma janela para que eu possa selecionar o arquivo desejado.

    Agora estou precisando de uma outra contribuição, que é para fazer o download, salvar o arquivo em um determinado local, igual ao "Salvar como" da maioria dos softwares, a função abaixo funciona, mas preciso informar um local fixo e o nome do arquivo.


    Private Sub Button_Download_File_Click()

    Dim strFilename As String
    strFilename = "C:\BKP\teste_2.pdf" ' Aqui eu gostaria de incluir uma funcão "Salvar como", a qual eu pudesse selecionar um determinado diretório e o nome do arquivo por padrão, fosse o próprio nome do arquivo
    strDescription = "Teste_2"

    Set cn = CurrentProject.Connection

    Set rs = New ADODB.Recordset
    rs.Open "SELECT * FROM ENG_tbl_Attach_File where Description_File = '" & strDescription & "'", cn, adOpenKeyset, adLockOptimistic


    Set mstream = New ADODB.Stream
    mstream.Type = adTypeBinary
    mstream.Open
    mstream.Write rs.Fields("Attach_Native_File").Value
    mstream.SaveToFile (strFilename), adSaveCreateOverWrite

    rs.Close
    cn.Close

    End Sub


    Estarei pesquisando como eu posso agregar a função "Salvar como" no código acima e enviarei a solução final ao Fórum, para que todos possam usar como exemplo.




    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  ahteixeira em Ter 14 Jul 2015, 16:45

    Olá, sou da opinião que deveria gravar na base de dados , caso não pretenda o caminho e nome do ficheiro, que pelo menos grave o nome do ficheiro (com extenão)
    Assim ficava com o registo da origem.
    Ao repor o ficheiro, poderia atribuir o nome original
    Quanto à questão com o FileDialog resolve, veja links abaixo:
    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]

    Abraço

    diegojacob
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 118
    Registrado : 06/07/2011

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  diegojacob em Ter 14 Jul 2015, 20:28

    Muito legal a sua indicação.
    Busquei no fórum alguns exemplos de separação do nome do arquivo, mas optei em separar apenas a extensão e concatenar no final do número do documento, incluindo-os em um campo "Description_file" como sugerido.

    Quanto ao FileDialog está funcionando perfeitamente, porém, haveria alguma forma de já sugerir o NOME do arquivo gravado no campo description_file (NO EXEMPLO "Teste_2.pdf")?
    Logo, sequencia ficaria: Selecionar o diretório desejado para salvar o arquivo, porém o NOME do arquivo já estaria por padrão na janela salvar como (Vindo do campo description_file), pois no código atual, o NOME do arquivo aparece em branco.

    O código para salvar o arquivo ficou um pouco extenso, pois juntei as duas funções.

    Private Sub Button_Save_File_Click()

    '''Salvar como

    Dim intChoice As Integer
    Dim strPath As String

    'change the display name of the save file dialog
    Application.FileDialog(msoFileDialogSaveAs).Title = _
    "Salvar como"

    'make the file dialog visible to the user
    intChoice = Application.FileDialog(msoFileDialogSaveAs).Show
    'determine what choice the user made
    If intChoice <> 0 Then
    'get the file path selected by the user
    strPath = _
    Application.FileDialog(msoFileDialogSaveAs).SelectedItems(1)
    'displays the result in a message box
    End If

    '-----------------------------------------------------------------------------


    '''''''Exporta o arquivo do banco de dados

    Dim strFilename As String
    'strFilename = SalvarComo '"C:\BKP\teste_2.pdf"
    strDescription = "Teste_2.pdf"

    Set cn = CurrentProject.Connection

    Set rs = New ADODB.Recordset
    rs.Open "SELECT * FROM ENG_tbl_Attach_File where Description_File = '" & strDescription & "'", cn, adOpenKeyset, adLockOptimistic

    On Error Resume Next

    Set mstream = New ADODB.Stream
    mstream.Type = adTypeBinary
    mstream.Open
    mstream.Write rs.Fields("Attach_Native_File").Value
    mstream.SaveToFile strPath, adSaveCreateOverWrite

    rs.Close
    cn.Close


    End Sub

    diegojacob
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 118
    Registrado : 06/07/2011

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  diegojacob em Ter 14 Jul 2015, 20:37

    Acabei de ver que o exemplo de separar a extensão do arquivo foi sua... rs

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  ahteixeira em Qua 15 Jul 2015, 10:10

    Olá, segue pretendido:

    Código:
    Sub testeSalvarComo()

        Dim intChoice As Integer
        Dim strPath As String
       
        'nome da caixa de diálogo
        Application.FileDialog(msoFileDialogSaveAs).Title = "Salvar como"
       
        'nome inicial do ficheiro
        Application.FileDialog(msoFileDialogSaveAs).InitialFileName = "teste_2.pdf"
       
        'mostrar
        intChoice = Application.FileDialog(msoFileDialogSaveAs).Show
       
        'determinar escolha
        If intChoice <> 0 Then
        'obter o caminho do arquivo selecionado pelo usuário
        strPath = Application.FileDialog(msoFileDialogSaveAs).SelectedItems(1)
        'exibe o resultado em uma caixa de mensagem
        End If

    End Sub

    Se pretende que o nome seja o numero de regiso, pode pedir só para escolher o directório (local destino)

    Segue também exemplo de função:

    Código:
    Public Function LocPastaFicDados(LocalAnterior) As String
    ' Requer referencia a Microsoft Office 11 Object Library
    ' 2015 AHTEIXEIRA - maximoaccess

        On Error GoTo PROC_ERR

        If IsNull(LocalAnterior) Then LocalAnterior = ""
       
        Dim fd As FileDialog
        Set fd = Application.FileDialog(msoFileDialogFolderPicker)
       
        fd.Title = "Escolha a pasta"
        fd.Show
       
        If (fd.SelectedItems.Count > 0) Then
            LocPastaFicDados = fd.SelectedItems(1)
            If Right(LocPastaFicDados, 1) <> "\" Then LocPastaFicDados = LocPastaFicDados & "\"
        Else
            LocPastaFicDados = LocalAnterior
        End If
       
    PROC_EXIT:
        Exit Function
       
    PROC_ERR:
        MsgBox Err.Description
        Resume PROC_EXIT
       
    End Function

    Abraço

    diegojacob
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 118
    Registrado : 06/07/2011

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  diegojacob em Qua 15 Jul 2015, 21:23

    Obrigado Alvaro,
    o primeiro exemplo já foi satisfatório para mim.

    Agora estou tentando entender porque o Upload do arquivo só está anexando o documento na primeira linha do registro.
    Mesmo estando em um novo registro, ele volta no primeiro registro e altera o arquivo anterior, e no registro atual, ele só altera a ID que é automática.

    Já viu alguma coisa semenhante?


    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  ahteixeira em Qui 16 Jul 2015, 09:36

    Olá Diego Jacob,

    Ainda não tive oportunidade de fazer algo com o MSSQL como back_end.
    Se disponibilizar pequeno exemplo da parte em questão e ;
    backup da estrutura da base de dados em SQL ou ficheiro vazio para attach, talvez consiga testar.

    Abraço

    diegojacob
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 118
    Registrado : 06/07/2011

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  diegojacob em Sex 17 Jul 2015, 14:36

    Alvaro, eu resolvi o problema anterior, incluindo um campo chave que concatena dois campos que nunca se repetirão.
    Quanto ao exemplo, eu não sei como poderia disponibilizar, tendo em vista que o SQL server não dá opção.

    Quanto ao código abaixo, no lugar do texto "Teste_2.pdf", como eu faria para ele pegar o registro que eu inseri no campo description_file ao fazer o upload na tabela?
    Tentei fazer um selec, porém não tive sucesso.


    strReference = Me!frm_ID_Doc_Rev

    DESCRIPTION_NAME = "SELECT [Description_File] , [ID_Doc_Rev] FROM ENG_tbl_Attach_Files WHERE [ID_Doc_Rev] = '" & strReference & "'"

    'nome inicial do ficheiro
    Application.FileDialog(msoFileDialogSaveAs).InitialFileName = "DESCRIPTION_NAME"

    Está ocorrendo erro.

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  ahteixeira em Sex 17 Jul 2015, 16:28

    Olá, quanto ao exemplo vamos deixar para o final, quando estiver a funcionar.
    Para ajudar poste o código todo do botão.
    Abraço

    diegojacob
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 118
    Registrado : 06/07/2011

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  diegojacob em Sex 17 Jul 2015, 16:35

    Segue o código do download que está funcionando perfeitamente, só faltando incluir o nome do arquivo gravado em uma tabela.

    Private Sub Download_Nativo_Click()

    Dim strFilename As String
    Dim strReference As String

    strReference = Me!frm_ID_Doc_Rev


    ''''''Salvar como

    Dim intChoice As Integer
    Dim strPath As String, strSQL As String


    'nome da caixa de diálogo
    Application.FileDialog(msoFileDialogSaveAs).Title = "Salvar como"

    'nome inicial do ficheiro
    Application.FileDialog(msoFileDialogSaveAs).InitialFileName = strSQL ' Aqui eu gostaria de inserir a informação que stá em uma tabela

    'mostrar
    intChoice = Application.FileDialog(msoFileDialogSaveAs).Show

    'determinar escolha
    If intChoice <> 0 Then
    'obter o caminho do arquivo selecionado pelo usuário
    strPath = Application.FileDialog(msoFileDialogSaveAs).SelectedItems(1)
    End If



    '''''''Exporta o arquivo do banco de dados

    strFilename = strPath

    Set cn = CurrentProject.Connection

    Set rs = New ADODB.Recordset
    rs.Open "SELECT * FROM ENG_tbl_Attach_Files where ID_Doc_Rev = '" & strReference & "'", cn, adOpenKeyset, adLockOptimistic

    On Error Resume Next

    Set mstream = New ADODB.Stream
    mstream.Type = adTypeBinary
    mstream.Open
    mstream.Write rs.Fields("Attach_Native_File").Value
    mstream.SaveToFile (strFilename), adSaveCreateOverWrite

    rs.Close
    cn.Close


    End Sub

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  ahteixeira em Sex 17 Jul 2015, 17:24

    Repare bem no codigo que postou.
    Você está a tentar atribuir o nome antes de abrir o recordset.
    Tente ajustar antes de:

    On error....

    Ou pode criar uma função fncEscolhecaminho
    Para o código ficar melhor.

    Abraço


    diegojacob
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 118
    Registrado : 06/07/2011

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  diegojacob em Sex 17 Jul 2015, 18:39

    Alvaro,
    O "on error resume next" é apenas para não mostrar o erro quando eu clico em cancelar sem selecionar um arquivo qualquer para download, no mais, os códigos estão funcionando perfeitamente.

    A única coisa que está faltando, é fazer com que o Select funcione para buscar o nome do arquivo inserido em uma tabela conforme exemplo:

    strReference = Me!frm_ID_Doc_Rev

    DESCRIPTION_NAME = "SELECT [Description_File] , [ID_Doc_Rev] FROM ENG_tbl_Attach_Files WHERE [ID_Doc_Rev] = '" & strReference & "'"

    'nome inicial do ficheiro
    Application.FileDialog(msoFileDialogSaveAs).InitialFileName = "DESCRIPTION_NAME"

    Obrigado pela apoio.

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  ahteixeira em Sab 18 Jul 2015, 12:30

    Olá o que queria dizer é para colocar na linha anterior a atribuição do nome, porque nessa parte do código já tem acesso ao nome do ficheiro que está na tabela.
    Também sugeri que pode criar uma função e chamar dessa linha.

    Quanto ao "resume next.." deve evitar:
    a) pode fazer tratamento com o código do erro
    b) fazer como 2º código de exemplo da mensagem nº 11

    Abraço

    diegojacob
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 118
    Registrado : 06/07/2011

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  diegojacob em Qua 22 Jul 2015, 21:51

    Alvaro, entendi o seu comentário!
    Fiz conforme sugerido e ficou perfeito!

    Porém tive que incluir mais algumas condições para adequar ao meu contexto.

    Conforme aprendido, aqui deixo o passo a passo, foco do tópico.


    Passo 1: CONFIGURAR O FILESTREAM NO SQL SERVER

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


    Passo 2: INSERIR AS TABELAS FILESTREAM

    2.1
    Código:
    CREATE TABLE tbl_Attach_File
    (
    [ID_Attach_File] INT IDENTITY(1,1) NOT NULL,
    [Attach_PDF_File] VARBINARY(MAX) FILESTREAM NULL,
    [Attach_Native_File] VARBINARY(MAX) FILESTREAM NULL,
    [FileStreamDataGUID] UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE DEFAULT NEWSEQUENTIALID(),
    DateTime DATETIME DEFAULT GETDATE(),
    Usuario varchar(50)
    )
    ON [PRIMARY]
    FILESTREAM_ON FileStream
    GO

    2.2
    Código:
    create clustered index IX_CLUSTER on tbl_Attach_File(ID_Attach_File)


    Passo 3: VINCULAR AS TABELAS NO FRONT END

    Passo 4: UPLOAD
    Código:

    Option Compare Database

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim mstream As ADODB.Stream


    Private Sub Button_Native_File_Click()

    Dim Filepath As String: Filepath = fncLocalizarArquivo


    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
    rs.Open "Select * from ENG_tbl_Attach_File", cn, adOpenKeyset, adLockOptimistic

    Set mstream = New ADODB.Stream
    mstream.Type = adTypeBinary
    mstream.Open
    mstream.LoadFromFile (Filepath)
    rs.Fields("Attach_Native_File").Value = mstream.Read
    rs.Fields("Upload_Date_Native").Value = Now()
    rs.Update

    rs.Close
    cn.Close

    End Sub

    Passo 5: DOWNLOAD
    Código:
    Private Sub Download_Nativo_Click()

    Dim strReference As String
    Dim intChoice As Integer
    Dim strPath As String, strSQL As String
    Dim strFilename As String
    Dim strAttachN As String


       strReference = Me!frm_ID_Doc_Rev 'Referência que você possui no formulário vs referência gravada na tabela

    '''''''Exporta o arquivo do banco de dados

       Set cn = CurrentProject.Connection
       
       Set rs = New ADODB.Recordset
       rs.Open "SELECT * FROM ENG_tbl_Attach_Files where ID_Doc_Rev = '" & strReference & "'", cn, adOpenKeyset, adLockOptimistic
       
       On Error Resume Next ' Aqui você pode tratar o erro, pois quando o campo da atbela aparece vazia, ocorre erro, porém, nesse caso, o Resume Next funciona perfeitamente.
       strFilename = rs.Fields("Description_Native_File")
       strAttachN = rs.Fields("Attach_Native_File").Value
       
       If strAttachN = "" Then
           MsgBox "Documento não disponível para download!", vbInformation, "SCE - Download"
           Me.Form.Requery
           Exit Sub
       Else
       
       ''''''Salvar como
       
           Application.FileDialog(msoFileDialogSaveAs).Title = "Salvar como"
           
           'nome inicial do ficheiro
           Application.FileDialog(msoFileDialogSaveAs).InitialFileName = strFilename
           
           'mostrar
           intChoice = Application.FileDialog(msoFileDialogSaveAs).Show
           
           'determinar escolha
           If intChoice <> 0 Then
            'obter o caminho do arquivo selecionado pelo usuário
            strPath = Application.FileDialog(msoFileDialogSaveAs).SelectedItems(1)
           End If
               
           On Error GoTo Fim

           Set mstream = New ADODB.Stream
           mstream.Type = adTypeBinary
           mstream.Open
           
           mstream.Write rs.Fields("Attach_Native_File").Value
           mstream.SaveToFile (strPath), adSaveCreateOverWrite
           
           rs.Close
           cn.Close
           
           If MsgBox("O download do arquivo foi realizado com sucesso!" & vbCrLf & strPath & vbCrLf & "Deseja abrir o arquivo?", vbQuestion + vbYesNo, "SCE - Download") = vbYes Then
               Shell "explorer.exe " & strPath, vbMaximizedFocus
           End If
               
       End If

       
    Fim:

       If err.Number = 3001 Then
           MsgBox "Download cancelado!", vbInformation, "SCE - Download"
           
           rs.Close
           cn.Close
           Cancel = True
           
       End If

    End Sub

    Alvaro,
    muito obrigado pelas contribuições, as quais foram essenciais para que as funções dessem certo.

    Favor finalizar o tópico, pois não estou conseguindo.
    Obrigado.

    Diego

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  ahteixeira em Qua 22 Jul 2015, 23:13

    Olá Diego, conseguiu  Very Happy
    Ok, desta vez eu coloco, no entanto veja como dar o [Você precisa estar registrado e conectado para ver este link.].
    Tomei a liberdade de "dar um jeito" na mensagem anterior de forma a ficar mais fácil a sua leitura e compreensão.

    Obrigado pelo retorno e partilha do exemplo.
    No meu entender, para o exemplo ficar completo, sugiro que poste também a função fncLocalizarArquivo.

    Abraço


    Última edição por ahteixeira em Sex 24 Jul 2015, 08:24, editado 1 vez(es)

    diegojacob
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 118
    Registrado : 06/07/2011

    [Resolvido]Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx em uma tabela vinculada ao SQL server

    Mensagem  diegojacob em Qui 23 Jul 2015, 20:46

    Ok Mr. Alvaro,
    muito legal essa formatação que você fez com os códigos, com certeza fica melhor, mais organizado.

    Conforme solicitado, segue a função "fncLocalizarArquivo", esse exemplo eu consegui com outro grande colaborador, Avelino Sampaio, ele usa no Maestro, muito legal.


    Código:
    Public Function fncLocalizarArquivo()
    Dim fd As Office.FileDialog
    On Error GoTo trataerro
    Set fd = Application.FileDialog(msoFileDialogOpen)
    With fd
       With .Filters
           .Clear
           .Add "PDF Files", "*.pdf", 1
           .Add "Image Files", "*.bmp, *.gif, *.jpg, *.png, *.tif", 2
           .Add "CAD Files", "*.dgn, *.dwg, *.dxf", 3
           .Add "Access DB", "*.mdb, *.accd*", 4
           .Add "MS Office", "*.doc*, *.xls*, *.ppt*", 5
           .Add "Zip Files", "*.zip, *.rar, *.7z", 6
           .Add "Todos", "*.*", 7

       End With
       .Title = "Selecionar o Documento)"
       .AllowMultiSelect = False
       .InitialFileName = "c:\"
       .InitialView = msoFileDialogViewPreview
       If .Show Then
           fncLocalizarArquivoPDF = .SelectedItems(1)
       End If
    End With
    sair:
       Exit Function
    trataerro:
       fncLocalizarArquivoPDF = ""
       Resume sair:
       
    End Function


    Obrigado.

    Diego

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido] Gravar (Upload) arquivos .pdf, .jpg, .docx, .xlsx, .zip em uma tabela vinculada ao SQL server

    Mensagem  ahteixeira em Sex 24 Jul 2015, 08:35

    Olá Diego Jacob,

    Obrigado pela partilha e mencionar a origem e autor da função, o nosso colega Mestre Avelino.
    Ficou um excelente tópico, isto é que é ser MaximoAccess.

    cheers

      Data/hora atual: Sex 09 Dez 2016, 07:39