Conteúdo

Redes - Acesso Exclusivo e Compartilhado.


Exemplo de Projeto - Comportamento Acesso Exclusivo e Compartilhado

Este projeto é bem simples mas serve para analisarmos como o Jet se comporta 
quando da abertura de arquivos em modo exclusivo e compartilhado em ambiente
multiusuário.

Iremos abrir o arquivo Biblio.mdb que esta no diretório c:\teste em modo
exclusivo e ver o como o Jet responde a uma tentativa de abrir o mesmo arquivo
por outro usuário primeiro em modo exclusivo e depois em modo compartilhado.Depois 
inverteremos os modos para ver o resultado.

Você não precisa instalar este aplicativo em uma rede para testar o compartamento
da abertura dos arquivos no modo exclusivo e no modo compartilhado.

Para a coisa funcionar basta você abrir duas instâncias do aplicativo
e colocar as janelas lado a lado.

Vamos ao Projeto , simples por sinal:

1-Crie um novo projeto denominado redes1.vbp. No form1 crie os objetos
  e as propriedades como listadas na tabela 1.0 e grave o formulário com o nome
  redes1.frm.

 Tabela 1.0 - Objetos e propriedades do form redes1.frm.
 ----------------------------------------------------------------------------
  Objeto             Propriedade         Configuração
 ----------------------------------------------------------------------------
  Form                  Name                 redes1.frm
                        Caption              Arquivo Fechado
 ----------------------------------------------------------------------------
  Frame                 Name                 frame1
                        Caption              Modo de Acesso
 ---------------------------------------------------------------------------
  OptionButton          Name                 optexclusivo
                        Caption              Modo Exclusivo
                        Value                True
 ---------------------------------------------------------------------------
  OptionButton          Name                 optcompartilhado
                        Caption              Modo Compartilhado
 ---------------------------------------------------------------------------
  CommandButton         Name                 cmdAbrir
                        Caption              "&Abrir Arquivo"
 ---------------------------------------------------------------------------
  CommandButton         Name                 cmdFechar
                        Caption              "&Fechar Arquivo"
                        Enabled              False
 ---------------------------------------------------------------------------                         
  CommandButton         Name                 cmdSair
                        Caption              "&Sair"
                        Cancel               True
 ---------------------------------------------------------------------------                         

2-Eis código do projeto :

  
-  Option Explicit

   Dim db as Database
   Dim dbname as String

  
-  Private Sub CmdAbrir_Click()  
   
   'inicia o tratamento de erros
   On Error GoTo AbrirError

   
   'Localiza e abre o banco de dados conforme as opções do sistema.
    dbname="C:\TESTE\BIBLIO.MDB"
    set db = DbEngine.Workspaces(0).OpenDataBase(dbname,iif(optexclusivo,True,False))

   
   'Mostra na barra do formulário através da propriedade Caption o modo
   de abertura do arquivo.
   Me.Caption = iif(optcompartilhado, "Modo Compartilahdo", "Modo Exclusivo")

   
   'Alterna os botões para Abrir e/ou Fechar conforme a opção escolhida
    e abandona a procedure. 
   cmdFechar.Enabled = True
   cmdAbrir.Enabled = False

   Exit Sub   
   
   
   'Inicia o tratamento de erros. 

   AbrirError:
     Dim msg as String
     
     if Err= 3356 then         
       'Este erro ocorre quanto o usuário tenta abrir um arquivo que
        já está aberto no modo exclusivo ou quando o usuário tenta
        abrir no modo exclusivo um arquivo que já está aberto 
        quer no modo exclusivo quer no modo compartilhado.

        if optcompartilhado then        
       'O usuário tentou abrir o arquivo no modo compartilhado mas
        o mesmo já estava aberto no modo exclusivo.
            
          msg = "O arquivo esta aberto no modo exclusivo ,"
          msg = msg & " você não pode abri-lo agora, tente mais tarde."

        else        
       'O usuário tentou abrir o arquivo no modo exclusivo mas
        o mesmo já estava aberto por outro usuário.

          msg = "O arquivo já está aberto, e você não pode abri-lo "
          msg = msg & " no modo exclusivo agora, tente mais tarde "

        endif

     Else        
       'Se ocorrer qualquer outro erro...
        
       msg = Err.Description

     Endif        
       'Mostra a mensagem de erro ao usuário e sai da procedure.

       MsgBox msg , vbExclamation        

    Exit Sub
       
   End Sub


  
-  Private Sub cmdFechar_Click()

    
   '1-Fecha o arquivo 
    2-alterna as opções dos botões de abertura e fechamento do arquivo
    3-altera o status da barra do formulário.   

    db.close

    cmdAbrir.enabled = True
    cmdFechar.enabled = False
  
    Me.Caption = " Arquivo Fechado "

   End Sub

  
-  Private Sub cmdSair_Click()

        End

   End Sub


3-Depois de pronto compile o projeto e execute duas instâncias do aplicativo 
  e coloque as janelas lado a lado como a fig 1.0 abaixo:
   
fig 1.0 1 - Primeiro abra o arquivo em modo exclusivo na janela da esquerda. - Feito isto tente a mesma coisa na janela da direita - Você recebera uma mensagem de erro informando que o banco de dados já esta aberto 2 - Agora abra o arquivo no modo compartilhado na janela da esquerda. - Abra o arquivo no mesmo modo na janela da direita - Observe que agora você tem o arquivo aberto nas duas instâncias do aplicativo. - Feche o arquivo e tente abrí-lo no modo exclusivo na janela da direita. - O Jet retornará uma mensagem de erro. Até mais...
Retorna