Hoje veremos como compartilhar um banco de dados Access em um ambiente multiusuário em um servidor local. |
Você tem um problema:
Precisa desenvolver uma aplicação em Visual Basic para controlar o atendimento de clientes em uma clinica.(Você é o programador da clínica e tem 5 dias para implantar o sistema, senão... ). Moleza hein ! Mas ... (Pensa que é fácil ganhar 5 mil por mês) para complicar a situação a clinica esta distribuída em três andares : 5 , 6 e 7 andar . Com o seguinte layout de equipamentos distribuídos:
Resumindo : sua aplicação deverá compartilhar o banco dados em um ambiente de acesso multiusuário.
Se a esta altura você já esta suando frio. Não se desespere !!!. Estou aqui para mostrar o caminho das pedras...
A primeira pergunta que deve estar passando pela sua cabeça é : Como eu faço uma aplicação em Visual Basic para um ambiente multiusuário ? ( Sabia pergunta ...)
A sua sorte é que o site tem dois artigos sobre este assunto. Veja os links:
Seria bom você dar uma olhada nos artigos para ter uma visão geral do problema. No entanto eu posso lhe adiantar o seguinte:
Ao escrever uma aplicação multiusuário , geralmente , você deve somente se preocupar quando vai escrever no banco de dados . Isto envolve as tarefas de inclusão , exclusão e atualização dos registros do banco de dados. Estas tarefas podem gerar conflitos quando mais de um usuário tenta realizar a mesma tarefa no mesmo instante. Todas as demais tarefas que envolvam a leitura do banco de dados não geram conflitos
Agora eu vou falar uma coisa que talvez possa parecer estranha mas eu tenho vivenciado isto na prática e não tenho tido problemas. É o seguinte...:
Para criar uma aplicação Visual Basic multiusuário você não tem que fazer nada além de somente compartilhar o banco de dados Access. ( Estou supondo que estamos trabalhando como Access e que o acesso simultâneo não seja gigantesco)
É isto mesmo ! Crie a sua aplicação normalmente , compartilhe o banco de dados e pronto. Sua aplicação vai funcionar sem problemas com acesso para os usuários na rede. (Naturalmente você vai ter que abrir o banco de dados no modo compartilhado.)
Como compartilhar Banco de dados ?
Primeiro vejamos o nosso ambiente: Uma rede ponto a ponto com um servidor Windows 2000 e seis máquinas Windows 98.
Então é simples , você vai ter que adotar o seguinte procedimento :
Com isto em mente você vai ter que permitir que o seu banco de dados seja acessado pelas estações ; para fazer isto basta você mapear uma conexão com o servidor , e, compartilhar esta conexão em todas as estações.
Perceba que você não vai poder usar um caminho absoluto(fixo) quando for abrir o seu banco de dados na aplicação . Não vai poder abrir o banco de dados como costuma abrir para uma aplicação monousuário :
Set db = DBEngine(0).OpenDatabase(app.path & "\clientes.mdb")
Ao invés disto você vai ter que usar uma variável que representa a localização do banco de dados , para depois definir o caminho em cada estação .
Set db = DBEngine(0).OpenDatabase(caminho)
E como vamos definir para cada estação o caminho do banco de dados ?
Vou mostrar uma das possibilidades que creio ser bem simples. Vamos utilizar os arquivos de perfis : os arquivos .INI. Estes arquivos eram muito usados pela versão do windows anterior ao windows 95 e por muitas aplicações . (Ainda hoje , embora as informações do sistema sejam armazenadas no registro do windows , estes arquivos são usados.)
Funciona assim : Vamos criar um arquivo .INI ; config.ini , por exemplo , e nele vamos definir qual o caminho do banco de dados na rede. Depois cada , em cada estação , vamos o nosso aplicativo irá abrir o arquivo .INI e irá ler o caminho do banco de dados e abrir o banco de dados definido neste caminho.
Um arquivo .INI é um arquivo texto que pode ser aberto em qualquer editor de texto. Ele contém uma estrutura definida da seguinte forma:
[Cabeçalho] Chave1=valor1 Chave2=valor2 ... [Cabeçalho2] chave1=valor1 ... |
[windows] load= run= NullPort=None [Desktop] Wallpaper=(None) TileWallpaper=1 WallpaperStyle=0 |
|
Estrutura de um arquivo .INI |
Exemplo de arquivo INI : Win.ini (somente uma parte...) |
Um arquivo .INI possui diversos cabeçalhos , cada qual com diversas chaves e a cada chave temos um valor associado.
Podemos ler e gravar os valores de cada chave usando as API´s ( application Programming Interface ) do windows. Para manipular arquivos INI geralmente usamos duas funções :
Então a primeira coisa a fazer é declarar as funções acima em nosso projeto. Fazemos isto em um módulo padrão. As declarações são :
Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long |
Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long |
Agora podemos usar as chamadas a API e criar nossas funções. Vejamos a seguir como criar as funções para ler e escrever em arquivos INI.
1-) A função ReadINI faz a leitura de um valor para uma chave de um arquivo INI
Public Function ReadINI(Section As String, Key As String, FileName As String) 'Filename=nome do arquivo ini 'section=O que esta entre [] 'key=nome do que se encontra antes do sinal de igual Dim retlen As String Dim Ret As String Ret = String$(255, 0) retlen = GetPrivateProfileString(Section, Key, "", Ret, Len(Ret), FileName) Ret = Left$(Ret, retlen) ReadINI = Ret End Function |
Você faz a chamada da função assim :
caminho = ReadINI("Cabeçalho", "chave", App.Path & "\nomedoarquivo.ini")
os parâmetros que você deve informar são :
2-) Para escrever em um arquivo INI usamos a função WriteINI
Public Sub WriteINI(Section As String, Key As String, Text As String, FileName As String) 'Filename=nome do arquivo ini 'section=O que esta entre [] 'key=nome do que se encontra antes do sinal de igual 'text= valor que vem depois do igual WritePrivateProfileString Section, Key, Text, FileName End Sub |
A chamada da função é feita assim :
Call WriteINI("Cabeçalho", "Chave", Valor_a_gravar, App.Path & "\nomedoarquivo.ini")
Os parâmetros usados são:
Obs: Os nomes ReadINI e WriteINI foram nomes que eu usei , você pode usar qualquer nome válido.
Bem , agora que já sabemos como trabalhar com arquivos INI vamos criar o nosso arquivo INI. Lembre-se que nosso objetivo é definir a localização do banco de dados. Primeiro temos que mapear o caminho na rede para saber o caminho do banco de dados , feito isto é só criar o arquivo INI e informar o caminho mapeado.
Vamos criar um arquivo INI com o nome de config.ini com a seguinte estrutura:(Você deve adaptar para o seu caso particular)
[Geral] Caminho=X:\Teste\teste.mdb |
Aqui eu criei um cabeçalho com o nome Geral e uma chave chamada Caminho. O valor atribuído a chave Caminho usa o drive X:\teste\teste.mdb. (este é o caminho mapeado na rede)
Agora podemos definir o roteiro para instalar o sistema nas 6 estações e no servidor:
- O sistema deverá ser instalado em todas as máquinas , mas banco de dados deverá estar presente somente no servidor.
- O arquivo config.ini deverá estar presente em todas as máquinas sendo que nas 6 estações vamos usar o arquivo com o seguinte conteúdo:
[Geral] Caminho=X:\Teste\teste.mdb |
- No servidor o conteúdo do arquivo config.ini será outro pois nele o acesso ao banco de dados é local. Podermos ter então algo como:
[Geral] Caminho=C:\Teste\teste.mdb |
- O código usado para ler o arquivo config.ini poderá estar em um módulo Main com o seguinte código:
Sub Main() Dim caminho as string 'verifica se já há uma instância do programa sendo executado If App.PrevInstance = True Then Dim Form As Form For Each Form In Forms Unload Form Set Form = Nothing Next Form End End If 'define caminho para base de dados, help e imagens caminho = ReadINI("Geral", "Caminho", App.Path & "\Config.ini") 'Abre o banco de dados Set area = DBEngine(0) Set db = area.OpenDatabase(caminho) frmLogin.Show vbModal frmmenu.Show End Sub |
Para as estações o caminho do banco de dados lido no arquivo Config.ini será : X:\Teste\teste.mdb
Assim , em todas as estações estaremos acessando o banco de dados teste.mdb que esta presente no servidor.
Pronto ! o seu banco de dados esta compartilhado e sua aplicação VB esta funcionando em um ambiente multiusuário...
Simples , não é mesmo...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Programando o sistema de segurança do Access - Macoratti ...