Mostrando postagens com marcador Controle de Versão. Mostrar todas as postagens
Mostrando postagens com marcador Controle de Versão. Mostrar todas as postagens

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

Manutenção em banco de dados no cliente – parte 1

Para quem desenvolve programas é comum, e põe comum nisso, que seja necessário inserir um campo ou alterar o tamanho de campo em uma tabela no banco de dados do cliente. Se você utiliza banco de dados .mdb você pode fazer essa alteração via código utilizando o VBA. Imagine o desconforto se seu cliente está do outro lado do país e fazer acesso remoto é muito complicado porque a Internet do cliente é a vapor. Você precisa enviar apenas o arquivo executável de instalação e ao abrir o sistema automaticamente as alterações do banco de dados são realizadas sem nenhuma dificuldade.

Então vamos às dicas:

Tabela com a data e hora que foi gerada a versão

Para diferenciar as versões do seu sistema você pode criar uma tabela com um campo chamado NumeroVersao tipo Número, um campo chamado DataVersao tipo Data/Hora e um campo chamado Caminho, tipo texto, valor padrão = “C:\temp\”, salvar a tabela com nome de Versao.

image

image

Crie um módulo no MS-Access chamado Utilitarios

Crie uma função chamada NovaVersao com o código abaixo

Public Function NovaVersao()
On Error GoTo Fim
    'Pergunta se deseja gerar uma nova versão
    If MsgBox("Deseja gerar uma nova versão?" _
    , vbQuestion + vbYesNo, "Aviso de Sistema") <> vbYes Then
        Exit Function
    End If
    Dim db As DAO.Database
    Set db = CurrentDb()
    Dim rs As DAO.Recordset
    Set rs = db.OpenRecordset("Versao") 'tabela versao
    If Not rs.EOF Then
        'se encontrado
        rs.Edit
            rs.Fields("NumeroVersao") = rs.Fields("NumeroVersao") + 1
            rs.Fields("DataVersao") = Date
        rs.Update
    Else 'se nada existir cria uma linha com o número de versão
        rs.AddNew
            rs.Fields("NumeroVersao") = 1000 'inicia com a versao 1.00.0
            rs.Fields("DataVersao") = Date
        rs.Update
    End If
    Dim sVersao As String
    sVersao = rs.Fields("NumeroVersao")
    sVersao = sVersao & " de " & rs.Fields("DataVersao")
    MsgBox "A Versao " & sVersao & " foi criada com sucesso.", vbInformation, "Aviso de Sistema"
    rs.Close
    db.Close
    Exit Function
Fim:
    MsgBox Err.Number & " " & Err.Description
    Exit Function
End Function

Crie uma macro chamada Autokeys. Esta macro habilita o uso de teclas de atalho no MS-Access.

Crie uma macro que é chamada pressionando-se os botões Ctrl + 0 conforme a imagem abaixo:

image

Ao pressionar Ctrl 0 irá aparecer as seguinte pergunta:image

Se responder sim irá aparecer a seguinte tela: image

Mantenha anotações do que foi feito em cada nova versão. A cada nova versão faça uma cópia de segurança do arquivo que você está desenvolvendo.
Vendas1012.mdb, Vendas1013.mdb, Vendas1014.mdb, etc.

Após gerar a nova versão converta o arquivo em mde, gere o arquivo de instalação e envie ao cliente.

Arquivo XML para copiar para o cliente quando instalar o sistema pela primeira vez

No mesmo diretório onde ficará o sistema copie o arquivo caminho.xml para mostrar o caminho onde ficará o banco de dados, a versão do sistema e a data da versão.

Abra o módulo Utilitários e insira uma nova função chamada VersaoXML()

Public Function VersaoXML()
On Error GoTo Fim
    'Diretorio atual
    Dim sDir As String
    sDir = CurrentProject.Path
    sDir = sDir & "\"
    '------------------------------------------------
    'Variáveis
    Dim sArq As String
    Dim sTab As String
    sTab = "Versao" 'tabela versao
    sArq = "Caminho"    'nome do arquivo em xml
    '------------------------------------------------
    'Exporta arquivo xml para o diretório corrente
    Application.ExportXML _
    ObjectType:=acExportTable, _
    DataSource:=sTab, _
    DataTarget:=sDir & sArq & ".xml", _
    SchemaTarget:=sDir & sArq & "Schema.xml"
    '------------------------------------------------
    Exit Function
Fim:
    MsgBox Err.Number & " " & Err.Description
    Exit Function
End Function

Atribua à função uma tecla de atalho, Ctrl 9, por exemplo
image

Ao pressionar Ctrl 9 serão gerados dois arquivos no diretório corrente do projeto. Um arquivo XML e outro arquivo de Schemma que contém as formatações dos campos. Não se importe por enquanto com o segundo arquivo. Quando for instalar um programa em um cliente lembre-se de copiar esses dois arquivos para o mesmo diretório do programa em Access que você está desenvolvendo. Veja o conteúdo dos arquivos abertos em bloco de notas:
image image

 

 

 

 

 

image

image

 

 

 

 

 

 

 

 

Parte 2
Parte 3