Você está na página 1de 5

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 clinca.(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 : ! " # e $ andar . %om o se&uinte la'out de e(uipamentos distribudos:

)esumindo : sua aplicao dever* compartilhar o banco dados em um ambiente de acesso multiusu*rio. +e a esta altura voc ,* esta suando -rio. .o se desespere pedras... . /stou a(ui para mostrar o caminho das

0 primeira per&unta (ue deve estar passando pela sua cabea 1 : Como eu fao uma aplicao em Visual asic para um am!iente multiusurio " # $a!ia pergunta ...% 0 sua sorte 1 (ue o site tem dois arti&os sobre este assunto. Ve,a os lin2s:

Criando uma aplicao Multiusurio com ADO. REDES - Programas Multiusurios

+eria bom voc dar uma olhada nos arti&os para ter uma viso &eral do problema. .o entanto eu posso lhe adiantar o se&uinte: 0o escrever uma aplicao multiusu*rio " &eralmente " voc deve somente se preocupar (uando vai escrever no banco de dados . 3sto envolve as tare-as de incluso " e4cluso e atualizao dos re&istros do banco de dados. /stas tare-as podem &erar con-litos (uando mais de um usu*rio tenta realizar a mesma tare-a no mesmo instante. 5odas as demais tare-as (ue envolvam a leitura do banco de dados no &eram con-litos 0&ora eu vou -alar uma coisa (ue talvez possa parecer estranha mas eu tenho vivenciado isto na pr*tica e no tenho tido problemas. 6 o se&uinte...: Para criar uma aplicao Visual Basic multiusu*rio voc no tem (ue -azer nada al1m de somente compartilhar o banco de dados 0ccess. ( /stou supondo (ue estamos trabalhando como 0ccess e (ue o acesso simult7neo no
se,a &i&antesco)

6 isto mesmo %rie a sua aplicao normalmente " compartilhe o banco de dados e pronto. +ua aplicao vai -uncionar sem problemas com acesso para os usu*rios na rede. (.aturalmente voc vai ter (ue
abrir o banco de dados no modo compartilhado.)

Como compartilhar Banco de dados ? Primeiro ve,amos o nosso ambiente: 8ma rede ponto a ponto com um servidor 9indo:s ;<<< e seis m*(uinas 9indo:s =>. /nto 1 simples " voc vai ter (ue adotar o se&uinte procedimento :

1. 3nstalar a aplicao em todas as m*(uinas e no +ervidor 2. %ompartilhar o banco de dados do servidor com as demais esta?es de trabalho
%om isto em mente voc vai ter (ue permitir (ue o seu banco de dados se,a acessado pelas esta?es @ para -azer isto basta voc mapear uma cone4o com o servidor " e" compartilhar esta cone4o em todas as esta?es. Perceba (ue voc no vai poder usar um caminho absoluto(-i4o) (uando -or abrir o seu banco de dados na aplicao . .o vai poder abrir o banco de dados como costuma abrir para uma aplicao monousu*rio :

Set db = DBEngine(0). penDatabase(app.path ! "#clientes.mdb")


0o inv1s disto voc vai ter (ue usar uma vari*vel (ue representa a localizao do banco de dados " para depois de-inir o caminho em cada estao .

Set db = DBEngine(0). penDatabase(caminho)


E como $amos de%inir para cada esta&'o o caminho do banco de dados ? Vou mostrar uma das possibilidades (ue creio ser bem simples. Vamos utilizar os ar(uivos de per-is : os ar(uivos .3.3. /stes ar(uivos eram muito usados pela verso do :indo:s anterior ao :indo:s =! e por muitas aplica?es . (0inda ho,e " embora as in-orma?es do sistema se,am armazenadas no re&istro do :indo:s " estes ar(uivos so usados.) Aunciona assim : Vamos criar um ar(uivo .()( @ con%ig.ini " por e4emplo " e nele vamos de-inir (ual o caminho do banco de dados na rede. Bepois cada " em cada estao " vamos o nosso aplicativo ir* abrir o ar(uivo .3.3 e ir* ler o caminho do banco de dados e abrir o banco de dados de-inido neste caminho. 8m ar(uivo .3.3 1 um ar(uivo te4to (ue pode ser aberto em (ual(uer editor de te4to. /le cont1m uma estrutura de-inida da se&uinte -orma:

[Cabealho] Chave1=valor1 Chave2=valor2 ... [Cabealho2] chave1=valor1 ...

[windows] load= run= NullPort=None [Desktop] Wallpaper=(None !ileWallpaper=1 Wallpaper"t#le=$

Estrutura de um arquivo .INI Exemplo de arquivo INI : Win.ini (somente uma parte...) 8m ar(uivo .3.3 possui diversos cabe&alhos " cada (ual com diversas cha$es e a cada chave temos um $alor associado. Podemos ler e &ravar os valores de cada chave usando as 0P3Cs ( application Programming &nterface ) do :indo:s. Para manipular ar(uivos 3.3 &eralmente usamos duas -un?es :

1. *et+ri$ate+ro%ileString , utilizada para ler ar(uivos 3.3 2. -rite+ri$ate+ro%ileString D usada para escrever em ar(uivos 3.3

/nto a primeira coisa a -azer 1 declarar as -un?es acima em nosso pro,eto. Aazemos isto em um mEdulo padro. 0s declara?es so :
Beclare Aunction 9ritePrivatePro-ile+trin& Fib G2ernelH;G 0lias G9ritePrivatePro-ile+trin&0G (B'Val lp0pplication.ame 0s +trin&" B'Val lpIe'.ame 0s 0n'" B'Val lp+trin& 0s 0n'" B'Val lpAile.ame 0s +trin&) 0s Fon& Beclare Aunction JetPrivatePro-ile+trin& Fib G2ernelH;G 0lias GJetPrivatePro-ile+trin&0G (B'Val lp0pplication.ame 0s +trin&" B'Val lpIe'.ame 0s 0n'" B'Val lpBe-ault 0s +trin&" B'Val lp)eturned+trin& 0s +trin&" B'Val n+ize 0s Fon&" B'Val lpAile.ame 0s +trin&) 0s Fon&

0&ora podemos usar as chamadas a 0P3 e criar nossas -un?es. Ve,amos a se&uir como criar as -un?es para ler e escrever em ar(uivos 3.3. KD) 0 -uno )ead3.3 -az a leitura de um valor para uma chave de um ar(uivo 3.3 Public Function ReadINI(Section s Strin!" #e$ s Strin!" FileName s Strin!) %Filename&nome do arquivo ini %section&' que esta entre () %*e$&nome do que se encontra antes do sinal de i!ual +im retlen s Strin! +im Ret s Strin! Ret & Strin!,(-.." /) retlen & 0etPrivatePro1ileStrin!(Section" #e$" 22" Ret" 3en(Ret)" FileName) Ret & 3e1t,(Ret" retlen) ReadINI & Ret End Function Voc -az a chamada da -uno assim :

caminho = .ead()(("Cabe&alho"/ "cha$e"/ App.+ath ! "#nomedoar0ui$o.ini")


os par7metros (ue voc deve in-ormar so : L nome do cabealho L nome da chave 0 localizao e o nome do ar(uivo 3.3 (ue dese,a ler

;D) Para escrever em um ar(uivo 3.3 usamos a -uno 9rite3.3 Public Sub WriteINI(Section s Strin!" #e$ s Strin!" 4ext %Filename&nome do arquivo ini %section&' que esta entre () %*e$&nome do que se encontra antes do sinal de i!ual %text& valor que vem depois do i!ual WritePrivatePro1ileStrin! Section" #e$" 4ext" FileName End Sub 0 chamada da -uno 1 -eita assim : s Strin!" FileName s Strin!)

%all 9rite3.3(G%abealhoG" G%haveG" ValorMaM&ravar" 0pp.Path N GOnomedoar(uivo.iniG)


Ls par7metros usados so: L nome do cabealho L nome da chave L valor a &ravar 0 localizao e o nome do ar(uivo 3.3

bs: Ls nomes )ead3.3 e 9rite3.3 -oram nomes (ue eu usei " voc pode usar (ual(uer nome v*lido. Bem " a&ora (ue ,* sabemos como trabalhar com ar(uivos 3.3 vamos criar o nosso ar(uivo 3.3. FembreD se (ue nosso ob,etivo 1 de-inir a localizao do banco de dados. Primeiro temos (ue mapear o caminho

na rede para saber o caminho do banco de dados " -eito isto 1 sE criar o ar(uivo 3.3 e in-ormar o caminho mapeado. Vamos criar um ar(uivo 3.3 com o nome de con-i&.ini com a se&uinte estrutura:( Voc deve adaptar para o seu caso particular)

[%eral] Ca&inho='()!este)teste.&db
0(ui eu criei um ca!ealho com o nome *eral e uma cha'e chamada Caminho. L 'alor atribudo a chave Caminho usa o drive 12#teste#teste.mdb. #este o caminho mapeado na rede% 0&ora podemos de-inir o roteiro para instalar o sistema nas # esta?es e no servidor: D L sistema dever* ser instalado em todas as m*(uinas " mas banco de dados dever* estar presente somente no servidor. D L ar(uivo con-i&.ini dever* estar presente em todas as m*(uinas sendo (ue nas 3 esta&4es vamos usar o ar(uivo com o se&uinte contePdo:

[%eral] Ca&inho='()!este)teste.&db
D )o ser$idor o contePdo do ar(uivo con-i&.ini ser* outro pois nele o acesso ao banco de dados 1 local. Podermos ter ento al&o como:

[%eral] Ca&inho=C()!este)teste.&db
- L cEdi&o usado para ler o ar(uivo con%ig.ini poder* estar em um mEdulo 5ain com o se&uinte cEdi&o:
Sub 5ain() +im camin6o as strin! %veri1ica se 78 68 uma inst9ncia do pro!rama sendo executado I1 pp.PrevInstance & 4rue 46en +im Form s Form For Eac6 Form In Forms :nload Form Set Form & Not6in! Next Form End End I1 %de1ine camin6o para base de dados" 6elp e ima!ens

camin6o & ReadINI(20eral2" 2;amin6o2"


% bre o banco de dados Set area & +>En!ine(/)

pp.Pat6 < 2=;on1i!.ini2)

Set db & area.'pen+atabase(camin6o)


1rm3o!in.S6o? vb5odal 1rmmenu.S6o? End Sub Para as esta?es o caminho do banco de dados lido no ar(uivo %on-i&.ini ser* :

Q:O5esteOteste.mdb

0ssim " em todas as esta?es estaremos acessando o banco de dados teste.mdb (ue esta presente no servidor.

Pronto o seu banco de dados esta compartilhado e sua aplicao VB esta -uncionando em um ambiente multiusu*rio... +imples " no 1 mesmo...

Ros1 %arlos Macoratti

Você também pode gostar