Conteúdo

Acesso a Tabelas nas opções dbDenyRead , dbDenyWrite e dbReadOnly.


Acesso a Tabelas usando as opções dbDenyRead , dbDenyWrite e dbReadOnly.

Como sabemos o VB abre as tabelas para acesso compartilhado e faz o bloqueio de 
registros durante a atualização dos mesmos.

Se você necessitar bloquear alguns dados dentro de um conjunto de registros poderá
utilizar as opções dbDenyRead,dbDenyWrite e dbReadOnly dependendo do tipo
do conjunto de registros que estiver acessando.(Ver tabela 1.0 abaixo)

Restrição                               Constante         RecordSet
-------------------------------------------------------------------------
Proibe a outros usuários ver os dados   dbDenyRead        Table
-------------------------------------------------------------------------
Proibe a outros usuários modificar ou   dbDenyWrite       Table,SnapShot
acrescentar dados                                         Dynaset   
-------------------------------------------------------------------------
Permite acesso somente de Leitura aos   dbReadOnly        Table,Dynaset
Dados
-------------------------------------------------------------------------
Tabela 1.0 

Ao usar estas opções para acessar uma tabela você deve estar preparado para lidar com
as possíveis mensagens de erro que o Jet retornará caso outro usuário tentar abrir a
mesma tabela com as mesmas opções que você utilizou.

Uma forma de reduzir o número de erros que você receberá do Jet , quando precisar de
acesso somente para leitura, é abrir a tabela como um Snapshot. 

Iremos usar o arquivo Biblio.mdb que esta no diretório c:\teste e abrir a tabela
Publishers com as opções mencionadas e ver o comportamento do Jet.

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

Inicio do Projeto :

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

 Tabela 1.0 - Objetos e propriedades do form redes2.frm.
 ----------------------------------------------------------------------------
  Objeto             Propriedade         Configuração
 ----------------------------------------------------------------------------
  Form                  Name                 redes2.frm
                        Caption              "Banco de Dados - BiBlio.mdb"
                        ControlBox           False
 ----------------------------------------------------------------------------
  Frame                 Name                 frame1
                        Caption              "Abertura da Tabela Publishers - Modo"
 ---------------------------------------------------------------------------
  optionbutton          Name                 option1(0)
                        Caption              "Não Permite Acesso aos Dados - dbDenyRead
 ---------------------------------------------------------------------------
  optionbutton          Name                 option1(1)
                        Caption              "Não permite modificar Dados - dbDenyWrite
 ---------------------------------------------------------------------------
  optionbutton          Name                 option1(2)
                        Caption              "Permite Acesso so de leitura aos Dados - dbReadOnly
 ---------------------------------------------------------------------------
  CommandButton         Name                 command1(2)
                        Caption              "&Incluir Registro"
                        Enabled              False
 ---------------------------------------------------------------------------
  CommandButton         Name                 command1(1)
                        Caption              "&Fechar Tabela"
                        Enabled              False
 ---------------------------------------------------------------------------                         
  CommandButton         Name                 command1(3)
                        Caption              "&Sair"
                        Cancel               True
 ---------------------------------------------------------------------------                         
  CommandButton         Name                 command1(0)
                        Caption              "&Abrir a Tabela"
 ---------------------------------------------------------------------------                         

2-Código do Projeto:

  
-  Option Explicit
   
   Dim db as Database
   Dim rs as Recordset
   Dim dbname as string     


  
-  Private Sub Form_load()  
   
   'Localiza e abre o arquivo Biblio.mdb no modo compartilhado.
    dbname="C:\TESTE\BIBLIO.MDB"
    set db = DbEngine.Workspaces(0).OpenDataBase(dbname)

   End Sub

  
-  Private Sub Command1_Click()  
   
  Dim msg As String
  
  Select Case Index
     
     Case 0 ' processar abertura da tabela com opçao escolhida
      
      On Error GoTo abrir_erro
      
      If Option1(0).Value = True Then
         Set rs = db.OpenRecordset("publishers", dbOpenTable, dbDenyRead)
      End If
      If Option1(1).Value = True Then
         Set rs = db.OpenRecordset("publishers", dbOpenTable, dbDenyWrite)
      End If
      If Option1(2).Value = True Then
         Set rs = db.OpenRecordset("publishers", dbOpenTable, dbReadOnly)
      End If
      
      rs.Index = "Primarykey"
      DBEngine.Idle dbFreeLocks
      
      Command1(0).Enabled = False
      Command1(1).Enabled = True
      Command1(2).Enabled = True
      
      Exit Sub
abrir_erro:
     Select Case Err
        Case 3261
             msg = "Não posso abrir a tabela agora "
        Case Else
             msg = Err.Description
     End Select
         
         MsgBox msg, vbExclamation
             
     Case 1 ' fechar tabela
       
       rs.Close
       Command1(0).Enabled = True
       Command1(1).Enabled = False
       Command1(2).Enabled = False
   
     Case 2 'incluir registro na tabela
        
        On Error GoTo inclui_erro
        Dim chave As Long
        
        rs.MoveLast
        chave = rs("pubid") + 1
        
        rs.AddNew
        
        rs("pubid") = chave
        rs("name") = "!!! TESTE DE INCLUSÃO !!!"
     
        rs.Update
        
        MsgBox "Um registro foi incluido na tabela Publishers"
     
        Exit Sub
inclui_erro:
        Select Case Err
           Case 3027
               msg = "A tabela esta aberta apenas para leitura você não pode modificá-la"
     
           Case 3260
              msg = "O registro esta atualmente bloqueado , tente mais tarde. "
     
           Case Else
              msg = Err.Description
         End Select
         MsgBox msg, vbExclamation
     
     Case 3 'sair da aplicação
       End
  End Select

   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 na janela da esquerda selecione a opção com dbDenyRead. - Abra a Tabela e clique em incluir registros. Até aqui tudo bem ! - Agora tente abrir a tabela do lado direito com qualquer das opções - DbDenyRead , dbDenyWrite e dbReadOnly. - Provavelmente você receberá uma mensagem de que não pode abrir a tabela nestes modos. 2 - Agora feche tabela da janela da esquerda desative a opção dbDenyRead e ative a opção dbDenyWrite. - Tente abrir a tabela na janela do lado direito com as duas primeiras opções : dbDenyRead e dbDenyWrite. Você será informado que não pode abrir a tabela nestes modos. - Agora tente abrir a tabela do lado direito com a opção de somente Leitura dbReadOnly , desta vez você conseguira abrir a tabela. - Tente incluir um registro clicando em incluir registro e uma mensagem o informará de que a tabela esta aberta no modo somente leitura e você não pode incluir registros. Tchau...
Retorna