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

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

    Compartilhe
    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 435
    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á.
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 292
    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 : 42
    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!
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 292
    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)
    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 435
    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
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 52
    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.
    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 435
    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: Ter 26 Set 2017, 20:54