usando access - manutenção e sistema de backup com barra de progresso.pdf

4
27/03/13 Usando Access - Manutenção e Sistema de Backup com Barra de Progresso www.usandoaccess.com.br/tutoriais/tuto14.asp?id=1#inicio 1/13 Home Vídeos-aulas Tutoriais Dicas Blog Downloads Contato Artigo Manutenção e Sistema de Backup com Barra de Progresso Assim que se iniciam as atividades de um Banco de Dados é de fundamental importância implementar um esquema de backup, que garanta o pronto restabelecimento dos dados, em qualquer situação de emergência. Para garantir a qualidade das cópias de segurança, você deve realizar manutenções regulares e preventivas do seu Banco de Dados. Veremos então, como proceder para realizar a manutenção: O que leva uma Banco de Dados a ter problemas ? Um hardware defeituoso , queda de energia, sistema de rede precário (fiação, conectores, hub e switch de péssima qualidade), um projeto mal estruturado e o Access sem as devidas atualizações, são os maiores vilões para acarretarem problemas. E quais os problemas que costumam ocorrer em um Banco de Dados? Lentidão, surgimento de caracteres estranhos, não conseguir abrir um determinado formulário ou relatório, perda de dados e a pior de todas as situações: ele se corromper, a ponto de ficar inutilizado. Existem programas oferecidos pela internet que conseguem, em algumas situações, recuperar um banco corrompido, como por exemplo o JetComp. Também existem firmas especializadas e que cobram bem caro por esse serviço de recuperação. Vale lembrar que o reparador do Access atua somente sobre tabelas, consultas e índices. Se houver problemas em formulários, relatórios, macros e módulos, provavelmente terá que substituir estes objetos pelos de um backup. Como se prevenir de problemas deste tipo ? Use o compactar e o reparar do Access, com regularidade. Isso reduz consideravelmente as chances de pequenos problemas resultarem em um problema maior. Mantenha as atualizações do Access em dia. Se o Office 2007 for original, configure o Windows para realizar atualizações de forma automática ou baixe diretamente do site da Microsoft o último pacote de atualizações. Acesse aqui o pacote SP2 Sempre que realizar alterações no código, use o compilador do VBA para sanar de imediato quaisquer erros de sintaxe e/ou comandos. Isto é fundamental para que o seu aplicativo não apresente tais erros no momento de execução e evite um bug do Access 2007 ao compactar e reparar, que causa a destruição do banco de dados. Veja em meu artigo como proceder, se este bug do compactar e reparar surgir para você. Para compilar o código, clique no menu Depurar e clique em compilar, conforme figura abaixo: Divida o aplicativo em dois: um contendo as tabelas (back-end) e o outro contendo os restantes dos objetos (front-end). O back-end é colocado numa pasta compartilhada e o front-end deverá ser copiado para cada um dos micros. Cada front-end deve ser configurado para acessar o back-end compartilhado. Esta é a forma estrutural mais empregada e facilita muito a manutenção da aplicação. Decompile o seu front-end sempre que fizer alterações significativas na programação. Esse Usando Access

Upload: lucio-mathias

Post on 14-Aug-2015

238 views

Category:

Documents


11 download

TRANSCRIPT

Page 1: Usando Access - Manutenção e Sistema de Backup com Barra de Progresso.pdf

27/03/13 Usando Access - Manutenção e Sistema de Backup com Barra de Progresso

www.usandoaccess.com.br/tutoriais/tuto14.asp?id=1#inicio 1/13

Home Vídeos-aulas Tutoriais Dicas Blog Downloads Contato Artigo

Manutenção e Sistema de Backup com Barra de Progresso

Assim que se iniciam as atividades de um Banco de Dados é de fundamental importância implementarum esquema de backup, que garanta o pronto restabelecimento dos dados, em qualquer situação deemergência.

Para garantir a qualidade das cópias de segurança, você deve realizar manutenções regulares epreventivas do seu Banco de Dados. Veremos então, como proceder para realizar a manutenção:

O que leva uma Banco de Dados a ter problemas ?

Um hardware defeituoso , queda de energia, sistema de rede precário (fiação, conectores, hub eswitch de péssima qualidade), um projeto mal estruturado e o Access sem as devidas atualizações,são os maiores vilões para acarretarem problemas.

E quais os problemas que costumam ocorrer em um Banco de Dados?

Lentidão, surgimento de caracteres estranhos, não conseguir abrir um determinado formulário ourelatório, perda de dados e a pior de todas as situações: ele se corromper, a ponto de ficarinutilizado.

Existem programas oferecidos pela internet que conseguem, em algumas situações, recuperar umbanco corrompido, como por exemplo o JetComp. Também existem firmas especializadas e quecobram bem caro por esse serviço de recuperação.

Vale lembrar que o reparador do Access atua somente sobre tabelas, consultas e índices. Se houverproblemas em formulários, relatórios, macros e módulos, provavelmente terá que substituir estesobjetos pelos de um backup.

Como se prevenir de problemas deste tipo ?

Use o compactar e o reparar do Access, com regularidade. Isso reduz consideravelmente aschances de pequenos problemas resultarem em um problema maior.

Mantenha as atualizações do Access em dia. Se o Office 2007 for original, configure o Windows pararealizar atualizações de forma automática ou baixe diretamente do site da Microsoft o último pacotede atualizações. Acesse aqui o pacote SP2

Sempre que realizar alterações no código, use o compilador do VBA para sanar de imediato quaisquererros de sintaxe e/ou comandos. Isto é fundamental para que o seu aplicativo não apresente taiserros no momento de execução e evite um bug do Access 2007 ao compactar e reparar, que causa adestruição do banco de dados. Veja em meu artigo como proceder, se este bug do compactar ereparar surgir para você.

Para compilar o código, clique no menu Depurar e clique em compilar, conforme figura abaixo:

Divida o aplicativo em dois: um contendo as tabelas (back-end) e o outro contendo os restantes dosobjetos (front-end). O back-end é colocado numa pasta compartilhada e o front-end deverá sercopiado para cada um dos micros. Cada front-end deve ser configurado para acessar o back-endcompartilhado. Esta é a forma estrutural mais empregada e facilita muito a manutenção daaplicação.

Decompile o seu front-end sempre que fizer alterações significativas na programação. Esse

Usando Access

Page 2: Usando Access - Manutenção e Sistema de Backup com Barra de Progresso.pdf

27/03/13 Usando Access - Manutenção e Sistema de Backup com Barra de Progresso

www.usandoaccess.com.br/tutoriais/tuto14.asp?id=1#inicio 2/13

Dim objfs as objectSet objfs = CreateObject("Scripting.FileSystemObject")objfs.CopyFile Origem, Destino

Dim booResultado as booleanbooResultado = Application.CompactRepair(Destino, DestinoNovo, True)

procedimento retira o lixo do código compilado, diminui o tamanho do banco e melhora o seurendimento. Crie um atalho no desktop do seu front-end e use o comando decompile no final dalinha. Exemplo:

"C:\Program Files\Microsoft Office\Office12\MSACCESS.EXE" c:\maestro\maestro.accdb /decompile

Sempre que for fazer uma modificação, seja no back-end, seja no front-end, crie o hábito de fazeruma copia de segurança. Acredite, já me salvou muitas vezes de erros que cometi. Pode acontecer,por exemplo, de você mandar compactar e reparar o banco de Dados e o Access, na tentativa deconsertar uma falha, inutilizar de vez, o banco. Tendo a cópia, você pode adotar medidas diferentespara tentar recuperar o banco, como por exemplo a cópia simples dos objetos (tabelas, consultas,formulários, ...) para um novo arquivo ACCDB.

Não realize backup sobrepostos

Depois do que você já leu aqui, deu para perceber que realizar uma cópia, sobrepondo a anterior podenão lhe servir de nada. Realizando então cópias sucessivas, aumenta as suas chances de recuperardados e objetos de um dos backups que não tenha sofrido o dano.

Quantas cópias devo guardar?

A quantidade excessiva de cópias não tem sentido. O que vale é você ter a certeza de que ascópias estão livres de problemas. Testar então periodicamente as cópias faz muito mais sentido doque ter mil cópias sem serem previamente avaliadas.

O que costumo fazer:

Realizo backups automáticos diários. A quantidade de vezes por dia depende do volume de dados docliente. Tenho clientes que realizo até quatro backup num dia.

Um dia por semana testo o último backup do dia e destruo o restante. No final do mês fico comquatro backups devidamente testados.

No final do ano fico com o último backup testado de cada mês. Passo pro meu cliente levar pra casaum cd com os 12 backups do ano. Bom, dá trabalho mas eu cobro bem por isso.

Já tive casos em que o backup foi utilizado para recuperar informações que haviam sido deletadas poralguma razão. Por isso é que costumo guardar os 12 do ano.

Backup manual do back-end

Em todos os meus projetos incluí um sistema de backup para o usuário administrador utilizar.

Tem clientes que não fecham contrato de manutenção comigo. Quando o projeto termina fica acritério do cliente a realização do backup.

Backup automático do back-end

Tenho um script bem simples que utilizo com o Agendador de Tarefas do Windows, que aciona umaplicativo em Access, para realizar os backups diários. Vou lhe fornecer este script e lhe mostrar emvídeo como configurar o Agendador de Tarefas do Windows Vista.

Backup do front-end

O front-end não precisa ser submetido à backups constantes, apenas quando você realiza alteraçõesna sua estrutura. Agora, na prática, costumo deixar uma cópia de segurança numa pasta acessívelda rede, para o caso de uma rápida substituição, se o front-end do usuário se danificar.

Qual é o código utilizado para montar um sistema de backup?

No access 2007/2010 temos a classe FileSystem, que possui o método FileCopy mas este tem umproblema de não funcionar se o arquivo a ser copiado estiver em uso. A solução então é usar ométodo CopyFlie do Windows Scripting. Veja o exemplo abaixo como é simples:

Basta indicar a origem do back-end e o local de destino de cópia.

Falei da questão primordial de se testar a integridade da cópia. O próprio Access tem como nos daruma ajudinha neste teste. Se você abrir o help do VBA e procurar a respeito de compactar e reparar,irá notar que ele gera um arquivo de log, caso tenha ocorrido uma reparação do banco de dados noprocesso.

Então o que faço é pegar a cópia, já realizada pelo código acima e executo o compactar e repararsobre esta cópia, gerando uma nova cópia reparada e compactada, no próprio local de destino.

O valor true no último argumento confirma que você deseja que ele gere o arquivo log, caso tenhaocorrido uma reparação.

A variável booResultado retorna true se o processo de compactação e reparação ocorreu sem falhas.

Um grande desafio que tive, foi como inserir a senha do back-end, exigida no processo decompactação e reparação, sem a intervenção do usuário. Resolvi através do uso do SendKeys. Utilizei o SendKeys do Windows Scripting , pois o do Access acarreta numa alteração do estado da

Page 3: Usando Access - Manutenção e Sistema de Backup com Barra de Progresso.pdf

27/03/13 Usando Access - Manutenção e Sistema de Backup com Barra de Progresso

www.usandoaccess.com.br/tutoriais/tuto14.asp?id=1#inicio 3/13

If fncProtegido = True Then Dim objws As Object Set objws = CreateObject("wscript.shell") objws.SendKeys fncCapturaSenha, True objws.SendKeys "{ENTER}"End IfbooResultado = Application.CompactRepair(Destino,DestinoNovo), True)

If booResultado = True Then FileSystem.Kill Destino

Dim compricompri = Shell("C:\Arquivos de programas\Winrar\WinRAR.EXE a " & _Replace(DestinoNovo, ".accdb", "") & ".rar " & DestinoNovo, vbHide)

If Len(Dir(Left(LocalDestino, InStrRev(LocalDestino, "\")) & "*.log", vbArchive) & "") > 0 Then MsgBox "Foi detectado problemas no arquivo de backup." & vbCrLf & _ vbCrLf & "Entre em contato imediatamente com o administrador do Banco de Dados", vbCritical, "Aviso"End If

Dim strlocalDim objws

on error resume next

Set objws = CreateObject("wscript.shell")

tecla NumLock.

Pode parecer estranho o sendkeys está passando a senha ANTES de se abrir o compactar e reparar. O segredinho aqui é que a velocidade de processamento das linhas de código é muito mais rápida doque o envio da seqüência dos caracteres pelo sendkeys. Então a janela da solicitação de senha jáestará aberta e com o foco, ANTES do envio dos caracteres.

Excluo a cópia não compactada e reparada do local de destino.

Se o usuário optar pelo uso do WinRAR para compactação , é utilizado o comando shell para executaro programa.

E por último, verifico se o arquivo de log foi gerado, comunicando o problema ocorrido.

Faltava algo primordial, ao meu ver, que era uma indicação visual de todo o processo. Então crieiuma barra de progresso para o usuário ficar com um indicativo.

Observe a barra de progresso no processo de backup:

O código completo e comentado está disponível no aplicativo Maestro, que disponibilizo abaixo paradownload.

E qual é o código usado para o backup automático?

O Agendador de Tarefas do Windows não permite abrir direto um arquivo de Access. Então gerei umpequeno script, que pode ser disparado pelo agendador.

Page 4: Usando Access - Manutenção e Sistema de Backup com Barra de Progresso.pdf

27/03/13 Usando Access - Manutenção e Sistema de Backup com Barra de Progresso

www.usandoaccess.com.br/tutoriais/tuto14.asp?id=1#inicio 4/13

strlocal = "c:\maestro\backup\backup_at.accdb"

strlocal = Chr(34) & "MSACCESS.EXE" & Chr(34) & " " & Chr(34) & strlocal & Chr(34)

ObjWS.Run strlocal, 0,"false"

Baixe aqui o arquivo exemplo

Este pequeno script, ao ser executado, abrirá o aplicativo backup_at.accdb no modo oculto. A macroAutoexec do backup_at.accdb dispara na inicialização, a função, com os códigos necessários paracopiar, compactar e reparar a base de dados, conforme descrevi acima.

O backup_at.accdb, contém no código, a senha da base de dados. Recomendo, então, que vocêtransforme este accdb em accde, impedindo com isso o acesso ao código fonte. Altere também aextensão para accde, na linha strlocal do script acima.

Exemplo para você baixar e usar nos seus aplicativos livremente

Inseri o sistema de backup no arquivo exemplo Maestro, usado no artigo sobre Controle de Acesso deUsuários.

Para entrar no modo estrutura do aplicativo Maestro, segure a tecla shift ao carregá-lo.

Senha dos usuários do formulário de Login:

Usuário admin > adminUsuário Avelino > 1234

O arquivo zipado abaixo, contém os seguintes arquivos:

Maestro.accdb - front-endMaestro_be.accdb - back-end (possui a senha: a1234)Backup_at.accdb - Contém o código para realizar o backup pelo Agendador de TarefasBackuk_at.vbs - Script usado no Agendador de Tarefas do Windows para disparar o backup_at.accdb

Vídeo-aula

Verá como compilar e decompilar um aplicativo.

Farei uma breve demonstração de uso do sistema de backup, do exemplo Maestro.

Vou ensinar a configurar o Agendador de Tarefas do Windows Vista para implementar o backupautomático.

Como EXIBIR a vídeo-aula em tela cheia?

1. clique na seta executar da tela abaixo para iniciar a exibição do vídeo;

2. dê dois cliques rápidos na tela, quando o vídeo começar a ser exibido.