Acesso a Tabelas nas opções dbDenyRead , dbDenyWrite e dbReadOnly.
|
Conteúdo
|
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