Manutenção em Banco de dados no Cliente – Parte 2

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á:

  1. Verificar se o arquivo XML foi importado com sucesso.
  2. Verificar se o número da função do sistema (tabela Versao) é a mesma da tabela Versao1.
  3. Se for a mesma encerra a função
  4. Se for diferente chama a função VinculaTabelas
  5. Grava o endereço do banco de dados contido na tabela Versao1 na tabela Versao
  6. Gera um novo arquivo XML no cliente, agora com os dados da versão atualizados
  7. 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
image

Ver a Parte 1
Ver a Parte 3

Nenhum comentário:

Postar um comentário