Você está na página 1de 6

Compartilhando um banco de dados

Access em um ambiente multiusurio.


Voc tem um problema:
Precisa desenvolver uma aplicao em Visual Basic para controlar o
atendimento de clientes em uma clinica.(Voc o programador da
clnica e tem 5 dias para implantar o sistema, seno... ). Moleza hein
! Mas ... (Pensa que fcil ganhar 5 mil por ms) para complicar a
situao a clinica esta distribuda em trs andares : 5 , 6 e 7 andar .
Com o seguinte layout de equipamentos distribudos:

Resumindo : sua aplicao dever compartilhar o banco dados em
um ambiente de acesso multiusurio.
Se a esta altura voc j esta suando frio. No se desespere !!!. Estou
aqui para mostrar o caminho das pedras...
A primeira pergunta que deve estar passando pela sua cabea
: Como eu fao uma aplicao em Visual Basic para um ambiente
multiusurio ? ( Sabia pergunta ...)
A sua sorte que o site tem dois artigos sobre este assunto. Veja os
links:
Criando uma aplicao Multiusurio com ADO.
REDES - Programas Multiusurios
Seria bom voc dar uma olhada nos artigos para ter uma viso geral
do problema. No entanto eu posso lhe adiantar o seguinte:
Ao escrever uma aplicao multiusurio , geralmente , voc deve
somente se preocupar quando vai escrever no banco de dados . Isto
envolve as tarefas de incluso , excluso e atualizao dos registros
do banco de dados. Estas tarefas podem gerar conflitos quando mais
de um usurio tenta realizar a mesma tarefa no mesmo instante.
Todas as demais tarefas que envolvam a leitura do banco de dados
no geram conflitos
Agora eu vou falar uma coisa que talvez possa parecer estranha mas
eu tenho vivenciado isto na prtica e no tenho tido problemas. o
seguinte...:
Para criar uma aplicao Visual Basic multiusurio voc no tem que
fazer nada alm de somente compartilhar o banco de dados Access. (
Estou supondo que estamos trabalhando como Access e que o acesso
simultneo no seja gigantesco)
isto mesmo ! Crie a sua aplicao normalmente , compartilhe o
banco de dados e pronto. Sua aplicao vai funcionar sem problemas
com acesso para os usurios 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 mquinas Windows 98.
Ento simples , voc vai ter que adotar o seguinte procedimento :
1. Instalar a aplicao em todas as mquinas e no Servidor
2. Compartilhar o banco de dados do servidor com as demais
estaes de trabalho
Com isto em mente voc vai ter que permitir que o seu banco de
dados seja acessado pelas estaes ; para fazer isto basta voc
mapear uma conexo com o servidor , e, compartilhar esta conexo
em todas as estaes.
Perceba que voc no vai poder usar um caminho absoluto(fixo)
quando for abrir o seu banco de dados na aplicao . No vai poder
abrir o banco de dados como costuma abrir para uma aplicao
monousurio :
Set db = DBEngine(0).OpenDatabase(app.path & "\clientes.mdb")
Ao invs disto voc vai ter que usar uma varivel que representa a
localizao do banco de dados , para depois definir o caminho em
cada estao .
Set db = DBEngine(0).OpenDatabase(caminho)
E como vamos definir para cada estao 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 verso do windows anterior ao windows 95 e por
muitas aplicaes . (Ainda hoje , embora as informaes do sistema
sejam armazenadas no registro do windows , estes arquivos so
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 estao , 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 contm uma estrutura definida da seguinte
forma:
[Cabealho]
Chave1=valor1
Chave2=valor2
...

[Cabealho2]
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 cabealhos , cada qual com
diversas chaves e a cada chave temos um valor associado.
Podemos ler e gravar os valores de cada chave usando as APIs
( application Programming Interface ) do windows. Para manipular
arquivos INI geralmente usamos duas funes :
1. GetPrivateProfileString - utilizada para ler arquivos INI
2. WritePrivateProfileString - usada para escrever em arquivos
INI
Ento a primeira coisa a fazer declarar as funes acima em nosso
projeto. Fazemos isto em um mdulo padro. As declaraes so :
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 funes.
Vejamos a seguir como criar as funes para ler e escrever em
arquivos INI.
1-) A funo 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 funo assim :
caminho = ReadINI("Cabealho", "chave", App.Path & "\nomedoarquivo.ini")
os parmetros que voc deve informar so :
O nome do cabealho
O nome da chave
A localizao e o nome do arquivo INI que deseja ler
2-) Para escrever em um arquivo INI usamos a funo 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 funo feita assim :
Call WriteINI("Cabealho", "Chave", Valor_a_gravar, App.Path &
"\nomedoarquivo.ini")
Os parmetros usados so:
O nome do cabealho
O nome da chave
O valor a gravar
A localizao e o nome do arquivo INI
Obs: Os nomes ReadINI e WriteINI foram nomes que eu usei , voc
pode usar qualquer nome vlido.
Bem , agora que j sabemos como trabalhar com arquivos INI vamos
criar o nosso arquivo INI. Lembre-se que nosso objetivo definir a
localizao 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 cabealho com o nome Geral e
uma chave chamada Caminho. O valor atribudo 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
estaes e no servidor:
- O sistema dever ser instalado em todas as mquinas , mas banco
de dados dever estar presente somente no servidor.
- O arquivo config.ini dever estar presente em todas as mquinas
sendo que nas 6 estaes vamos usar o arquivo com o seguinte
contedo:
[Geral]
Caminho=X:\Teste\teste.mdb
- No servidor o contedo do arquivo config.ini ser outro pois nele o
acesso ao banco de dados local. Podermos ter ento algo como:
[Geral]
Caminho=C:\Teste\teste.mdb
- O cdigo usado para ler o arquivo config.ini poder estar em um
mdulo Main com o seguinte cdigo:
Sub Main()
Dim caminho as string
'verifica se j h uma instncia 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 estaes o caminho do banco de dados lido no arquivo
Config.ini ser : X:\Teste\teste.mdb
Assim , em todas as estaes estaremos acessando o banco de
dados teste.mdb que esta presente no servidor.
Pronto ! o seu banco de dados esta compartilhado e sua aplicao VB
esta funcionando em um ambiente multiusurio...
Simples , no mesmo...

Você também pode gostar