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]Erro com doCmd.Quit e Access Runtime 2007

    Compartilhe

    CassioFabre
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 94
    Registrado : 18/01/2013

    [Resolvido]Erro com doCmd.Quit e Access Runtime 2007

    Mensagem  CassioFabre em Ter 08 Mar 2016, 17:21

    Boa tarde amigos. Meu problema é o seguinte:

    Estou construindo um bd e coloquei uma rotina de atualização automática dos front-end dos usuários. A rotina encontrei aqui mesmo no fórum, exatamente neste link [Você precisa estar registrado e conectado para ver este link.]

    Fiz uma pequena modificação no código do link acima que foi perguntar ao usuário se ele deseja atualizar o módulo cliente dele naquele momento ou não. Na minha máquina utilizo a versão completa do Access 2007 e nas estações o Access Runtime 2007. No access completo, tudo funciona perfeitamente, na sequencia abaixo:

    -> Solicita atualização
    -> Caso sim, fecha o BD principal e abre o BD de atualização
    -> Rotina é executada e o Front-end do usuário é substituido pelo front-end atualizado
    -> Informa o sucesso e fecha o bd de atualização.


    Porém no Access runtime, acontece o seguinte:

    -> Solicita atualização
    -> Caso sim, não fecha o BD principal e abre o BD de atualização
    -> Rotina aparentemente é executa
    -> Informa o sucesso e fecha o BD de atualização
    -> Foco é voltado para o BD principal e aparece mensagem de "Erro em tempo de execução"
    -> Aperta OK, fecha o BD principal e a atualização não foi feita.

    O erro se dá provavelmente porque o BD principal não é fechado para ser substituído. Sabemos que não se pode substituir um arquivo que está sendo executado. Tentei substituir o comando DoCmd.Quit por Application.Quit, mas nesse caso ele fecha o Access completamente e não abre o BD de atualização.

    Minha dúvida é como fechar o BD principal no Access Runtime e abrir o BD de atualização.

    Obrigado desde já.

    ronaldojr1
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 163
    Registrado : 01/08/2011

    Re: [Resolvido]Erro com doCmd.Quit e Access Runtime 2007

    Mensagem  ronaldojr1 em Qui 10 Mar 2016, 15:40

    tenta com esse codigo:
    Código:

    DoCmd.Close acForm, "nomeFormulario", acSaveYes

    baldocchi
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 34
    Registrado : 03/11/2014

    Re: [Resolvido]Erro com doCmd.Quit e Access Runtime 2007

    Mensagem  baldocchi em Qui 10 Mar 2016, 15:44

    Olha amigo, eu sou novo aqui e em Access também.
    Tive esse problema e resolvi dividindo o banco de dados.
    funciona bem.
    sei lá se vai ajudar, mas vale a tentativa, né?!
    fique com Deus!

    ronaldojr1
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 163
    Registrado : 01/08/2011

    Re: [Resolvido]Erro com doCmd.Quit e Access Runtime 2007

    Mensagem  ronaldojr1 em Qui 10 Mar 2016, 16:01

    puts, vdd eu interpretei errado.
    deleta.rsrsrs, o codigo q passei so serve pra fechar o formulario,
    para fechar o bd so conheço as duas funcoes mesmo(docmd.quit e application.quit)

    CassioFabre
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 94
    Registrado : 18/01/2013

    Re: [Resolvido]Erro com doCmd.Quit e Access Runtime 2007

    Mensagem  CassioFabre em Seg 28 Mar 2016, 17:48

    Meu banco de dados já está dividido em Front e Back end. Mesmo assim agradeço a ajuda dos dois.

    Quaisquer outras soluções estou no aguardo.

    Obrigado.

    erinaldo
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 49
    Registrado : 27/09/2010

    Re: [Resolvido]Erro com doCmd.Quit e Access Runtime 2007

    Mensagem  erinaldo em Seg 28 Mar 2016, 20:52

    Ja tive esse mesmo problema, mas o que acontece é que quando voce chama esse comando tem varias "instancias" ainda em execução ai o access não consegue finalizar todas, veja esse link

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

    me ajudou bastante, talvez possa te ajudar!!

    abraço.

    CassioFabre
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 94
    Registrado : 18/01/2013

    Resolvido

    Mensagem  CassioFabre em Seg 27 Jun 2016, 14:34

    Bom dia a todos.

    Não consegui fazer a proposta deste tópico dar certo, então para atualização dos meus front-ends, recorri ao uso de um arquivo batch que fica junto da pasta do front-end na máquina do usuário. Fica descrito abaixo o que fiz, para se no futuro alguém tiver um problema parecido:

    No meu form de abertura do programa, formLogin, no eveto aoCarregar deixei, tendo como base de comparação dois campos que comparam as datas da ultima atualização do back-end com a do front-end, o código abaixo:

    Código:
       txtVersaoAtual = DMax("versaoAtual", "tblVersao", "")
    txtVersaoFE = DMax("versaoFE", "tblVersaoFE", "")
    Dim sh As Object
        
        If txtVersaoFE <> txtVersaoAtual And DLookup("obrigatoria", "tblVersao", "versaoAtual = '" & txtVersaoAtual & "'") = False Then
            If MsgBox("Há uma nova versão do sistema disponível (versão " & txtVersaoAtual & " - de " & DLookup("data", "tblVersao", "versaoAtual = '" & txtVersaoAtual & "'") & "). Seu cliente precisa ser atualizado!" & vbCrLf & "" & vbCrLf & "Deseja atualizá-lo agora?", vbQuestion + vbYesNo, "Atualização") = vbYes Then
                Set sh = CreateObject("WScript.Shell")
                sh.Run (CurrentProject.Path & "\atualizador.bat")
                
                Application.Quit
            End If
        ElseIf txtVersaoFE <> txtVersaoAtual And DLookup("obrigatoria", "tblVersao", "versaoAtual = '" & txtVersaoAtual & "'") = True Then
            MsgBox "Há uma nova versão do sistema disponível (versão " & txtVersaoAtual & " - de " & DLookup("data", "tblVersao", "versaoAtual = '" & txtVersaoAtual & "'") & ")." & vbCrLf & "" & vbCrLf & "Esta atualização é obrigatória.", vbExclamation, "Atualização Obrigatória"
            
            Set sh = CreateObject("WScript.Shell")
            sh.Run (CurrentProject.Path & "\atualizador.bat")
            
            Application.Quit
        End If

    Do forma como fiz, quando eu vou liberar a atualização para os usuários, defino se ela é obrigatória ou não. No caso de ser, não permito que o sistema seja utilizado sem atualizá-lo, caso contrário o usuário escolhe se quer fazê-lo naquele momento ou não. Isso está mostrado com o uso do DLookup("obrigatoria", "tblVersao", "versaoAtual = '" & txtVersaoAtual & "'") = False.

    Abaixo o .bat de atualização:

    Código:
    @echo off
    title Atualiza‡Æo - Nemer Estoque Exporta‡Æo
    taskkill /F /IM MSACCESS.EXE
    cd c:\export
    del Exportacao.accdb
    del Exportacao.laccdb
    cls
    echo.
    echo Programa de Atualiza‡Æo - Nemer Estoque Exporta‡Æo
    echo ---------------------------------------------------
    echo.
    echo Aguarde
    echo.
    copy /Y P:\Export-estoque\Exporta‡Æo\Exportacao.accdb C:\Export\
    echo.
    echo.
    echo Atualiza‡Æo conclu¡da com sucesso!
    echo.
    pause
    cd c:\export\
    start Exportacao.accdb
    exit

    Ps.: Os caracteres especiais acima são extremamente importantes, INCLUSIVE no caminho dos arquivos que for utilizar. Caso nao os use, o cmd acusará "objeto não encontrado".

    O que o .bat faz é finalizar os processos do Access, excluir o arquivo Exportacao.accdb da pasta do front-end, e copiar o arquivo atualizado, de mesmo nome, para essa pasta. Nada complexo.

    Uma outra forma de fazer este procedimento é utilizando, ao invés do comando copy, o xcopy. Neste caso não é necessário excluir o arquivo do front-end, pois este será substituido. Mas deixo a cargo de voces pesquisarem a respeito. Utilizei o excluir -> copiar pois por algum motivo o xcopy não funcionou aqui pra mim.

    De qualquer forma, está aí. Obrigado a todos.

      Data/hora atual: Dom 04 Dez 2016, 20:21