Na primeira parte vimos como criar uma tabela de controle de versão que gera nova versão pressionando-se as teclas Ctrl + 0, vimos também como gerar um arquivo xml no diretório atual do projeto.
Nesta parte iremos ver como utilizar o arquivo XML no cliente para conectarmos o programa ao banco de dados.
Na parte 3 iremos ver como fazer alterações no banco de dados do cliente através de código VBA
Alterando o arquivo XML para que seja inserido o endereço do banco de dados
No cliente, após copiar os arquivos xml e de schemma para o diretório do programa clique com o botão direito do mouse sobre o arquivo Caminho.XML e clique na opção editar.
Altere o endereço que está na TAG <Caminho> conforme exemplo abaixo:
De: <Caminho>C:\Temp\</Caminho>
Para: <Caminho>\\servidor\bd\BdVendas.mdb</Caminho>
Nota: Altere apenas o caminho e nada mais. Não utilize caracteres estranhos que não são aceitos no padrão do XML. Salve antes de sair.
Função que importa o arquivo XML para dentro do programa em Access
Abra o módulo Utilitarios e crie uma função chamada ImportaVersaoXML(). Esta função irá importar o arquivo XML que está no diretório corrente.
Public Function ImportaVersaoXML() As Boolean
On Error GoTo Fim
'Exclui a tabela Versao1, possivelmente importada em outras vezes
DoCmd.DeleteObject acTable, "Versao1"
'Diretorio atual
Dim sDir As String
sDir = CurrentProject.Path
sDir = sDir & "\"
'------------------------------------------------
'Variáveis
Dim sArq As String
sArq = "Caminho.xml" 'nome do arquivo em xml
'------------------------------------------------
'Importa Arquivo XML para dentro do programa
Application.ImportXML sDir & sArq, acStructureAndData
ImportaVersaoXML = True
Exit Function
Fim:
If Err.Number = 7874 Then 'caso a tabela versao1 nao exista
Resume Next
Else
ImportaVersaoXML = False
MsgBox Err.Number & " " & Err.Description
End If
Exit Function
End Function
Nota: quando um arquivo xml é importado uma tabela é criada. Caso esta tabela já exista o Access irá criar uma nova tabela seguida de um número crescente. No caso acima a tabela Versao já existe, por isso foi criada uma tabela Versao1 com os dados do cliente.
Função que verifica a versão do programa
Agora vamos verificar se os dados da versão que está no cliente é igual aos dados da versão na tabela Versao dentro do programa.
No mesmo modulo Utilitarios crie uma função chamada VerificaVersao()
Em rápidas palavras a função irá:
- Verificar se o arquivo XML foi importado com sucesso.
- Verificar se o número da função do sistema (tabela Versao) é a mesma da tabela Versao1.
- Se for a mesma encerra a função
- Se for diferente chama a função VinculaTabelas
- Grava o endereço do banco de dados contido na tabela Versao1 na tabela Versao
- Gera um novo arquivo XML no cliente, agora com os dados da versão atualizados
- Encerra a função
Public Function VerificaVersao()
On Error GoTo Fim
'Chama a função ImportaVersaoXML e verifica se foi bem sucedida
If ImportaVersaoXML = True Then
Else
MsgBox "Arquivo de Versão do Cliente não encontrado ou não pode ser aberto." & _
vbCrLf & "Por favor tente novamente" & _
vbCrLf & "Caso não consiga entre em contato com o suporte." & _
vbCrLf & "O Sistema será fechado", vbInformation, "Aviso de Sistema"
DoCmd.Quit 'fecha o sistema
Exit Function
End If
'verifica versão do sistema (Versao) e a versao do cliente (Versao1)
Dim lCliente As Long
Dim lSistema As Long
Dim db As DAO.Database
Set db = CurrentDb()
Dim rCli As DAO.Recordset
Set rCli = db.OpenRecordset("Versao1")
Dim rSis As DAO.Recordset
Set rSis = db.OpenRecordset("Versao")
lCliente = rCli.Fields("NumeroVersao")
lSistema = rSis.Fields("NumeroVersao")
If lCliente <> lSistema Then
Else 'se for igual não faz nada
GoTo Finaliza
End If
'avisa sobre nova versão e chama função VincularTabelas
If MsgBox("Nova versão foi detectada" & _
vbCrLf & "As tabelas do sistema serão novamente vinculadadas ao banco de dados" & _
vbCrLf & "Isso poderá demorar alguns minutos dependendo do número de tabelas" & _
vbCrLf & "Deseja continuar?", vbQuestion + vbYesNo, "Aviso de Sistema") <> vbYes Then
GoTo Finaliza
End If
Dim sCaminho As String
sCaminho = rCli.Fields("Caminho")
'Aqui você chama a função VincularTabelas
'Call VinculaTabelas(sCaminho) '(retire o apóstrofo qdo a função existir)
'grava o novo endereço na tabela Versao e exporta em arquivo xml
rSis.Edit
rSis.Fields("Caminho") = sCaminho
rSis.Update
'chama a função VersaoXML que gera um novo arquivo atualizado XML
VersaoXML
Finaliza:
rCli.Close
rSis.Close
db.Close
Exit Function
Fim:
MsgBox Err.Number & " " & Err.Description
Exit Function
End Function
Macro que executa a função VerificaVersao
Crie uma macro com o nome de Autoexec. Esta macro é executada toda vez que você abre o programa. Insira a função VerificaVersao
Ver a Parte 1
Ver a Parte 3
Nenhum comentário:
Postar um comentário