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 ...
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...