COMO FAZER: Use o Controle de Conexão para Evitar que Usuários Efetuem Logon em Tempo de Execução no Access 2002

Este artigo foi publicado anteriormente em BR287655
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Avançado: Requer conhecimentos avançados de codificação, interoperabilidade e multiusuário.

Para obter uma versão deste artigo do Microsoft Access 2000, consulte 198756.

NESTA TAREFA

Sumário
Usando o Microsoft Visual Basic para Aplicações no Microsoft Access, você pode evitar q ue usuários efetuem logon num banco de dados do Jet. Se os usuários já estão no banco de dados, estes irão permanecer conectados; porém, nenhum outro usuário poderá abrir o banco de dados. Isto é chamado de desconexão passiva.

O código de exemplo neste artigo demonstra como executar uma desconexão passiva e também como dar saída de uma lista dos usuários que já estão conectados no banco de dados.

voltar para o topo

O Controle de Conexão

O recurso do controle de conexão (também conhecido como desconexão passiva) evita que usuários se conectem num banco de dados. Esta capacidade é útil para um administrador de banco de dados que precise adquirir acesso exclusivo num banco de dados para executar manutenção, por exemplo, para compactar o banco de dados, ou quem precisa fazer atualizações no esquema ou nas aplicações do banco de dados.

Quando o controle de conexão é invocado, os usuários conectados atualmente num banco de dados irão permacer conectados até que se desconectem. Neste ponto, eles não conseguem se reconectar até que o controle de conexão seja revogado.

Os seguintes cenários fornecem esclarecimentos adicionais sobre como esta capacidade funciona:
  • Cinco usuários estão no banco de dados. O quinto usuário inicia a desconexão passiva. O sexto usuário tenta se conectar ao banco de dados, mas o acesso é negado e uma mensagem de erro é retornado declarando que o quinto usuário está evitando o banco de dados de ser aberto.
  • Cinco usuários estão no banco de dados. O quinto usuário inicia a desconexão passiva. O primeiro usuário fecha o banco de dados e tenta se reconectar, mas o acesso é negado e uma mensagem de erro é retornada declarando que o quinto usuário está evitando o banco de dados de ser aberto.
  • Cinco usuários estão no banco de dados. O quinto usuário inicia a desconexão passiva. O quinto usuário fecha o banco de dados. O sexto usuário tenta abrir o banco de dados e é bem sucedido. Isto porque a desconexão passiva só persiste enquanto o usuário que chamou esta permanece conectado no banco de dados.
  • Cinco usuários estão no banco de dados. O quinto usuário inicia a desconexão passiva. Os quatro primeiros usuários saem do banco de dados. O quinto usuário chama a funcionalidade da lista e determina que nenhum outro usuário esteja no banco de dados. O quinto usuário fecha o banco de dados e imediatamente compacta o banco de dados.
voltar para o topo

A Lista de Usuários

O recurso da lista de usuários fornece uma maneira de determinar quem está atualmenteconectado num banco de dados do Microsoft Jet. A lista pode ser obtida via interface de programação ADO e retorna as seguintes informações para cada usuário:
  • Nome do computador que está em uso.
  • Nome de segurança, isto é, o ID do usuário.
  • Se o usuário está ou não conectado atualmente ao banco de dados (Um ID de usuário permanece nos bloqueios de banco de dados até que o último usuário se desconecte ou até que a abertura seja regenerada para uma nova conexão de usuário).
  • Se a conexão do usuário foi terminada normalmente ou não.
A capacidade da lista de usuário pode ser usada em conjunto com o controle de conexão para determinar quais usuários ainda estão conectados, assim estes podem ser solicitados a se desconectarem.

A capacidade da lista de usuários é também útil no isolamento de problemas com a corrupção do banco de dados que está associado às atividades de um usuário específico.

voltar para o topo

Código de Exemplo

A Microsoft fornece exemplos de programação somente para ilustração, sem garantia expressa ou implícita, mas não limitado, às garantias implícitas de comercialização e/ou para um propósito particular. Esse artigo assume que você está familiarizado com as linguagens de programação que estão sendo demonstradas e as ferramentas utilizadas para criar e procedimentos de depuração. Os engenheiros de suporte da Microsoft podem ajudá-lo explicando a funcionalidade de um procedimento particular, mas eles não modificarão estes exemplos para prover funcionalidades adicionais ou construir procedimentos para satisfazer suas necessidades específicas. Se a sua experiência com programação é limitada, entre em contato com um Parceiro Certificado Microsoft para informações sobre como obter suporte técnico pago. Para obter informações adicionais sobre Parceiros Certificados da Microsoft, veja o seguinte site da Web da Microsoft:Para obter informações adicionais sobre as opções de suporte que estão disponíveis e sobre como contatar a Microsoft, visite o seguinte site Web da Microsoft: Para demonstrar o código de exemplo, siga esses passos:
  1. Copie o banco de dados Northwind.mdb para o diretório raiz da unidade C.
  2. No Microsoft Access, abra C:\Northwind.mdb.
  3. Crie um novo módulo chamado ShutDownDB.
  4. No menu Ferramentas, clique em Referências .
  5. Na caixa de diálogo Referências , clique para selecionar a seguinte referência:
    Microsoft ActiveX Data Objects 2.1 Library
  6. Digite o seguinte código no novo módulo:
    Sub ShowUserRosterAndPassiveShutdown()    Dim cn As New ADODB.Connection    Dim cn2 As New ADODB.Connection    Dim cn3 As New ADODB.Connection    Dim rs As New ADODB.Recordset    Dim j As Long    On Error GoTo ErrHandler        cn.Provider = "Microsoft.Jet.OLEDB.4.0"    cn.Open "Data Source=c:\Northwind.mdb"        cn2.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _    & "Data Source=c:\Northwind.mdb"        ' Restrict other users from opening the database    cn.Properties("Jet OLEDB:Connection Control") = 1        ' Attempt to open another connection to the database    cn3.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _    & "Data Source=c:\Northwind.mdb"        ' The user roster is exposed as a provider-specific    ' schema rowset in the Jet 4 OLE DB provider.  You have to use    ' a GUID to reference the schema, as provider-specific schemas    ' are not listed in ADO's type library for schema rowsets        Set rs = cn.OpenSchema(adSchemaProviderSpecific, , _    "{947bb102-5d43-11d1-bdbf-00c04fb92675}")        ' Output the list of all users in the current database.    Debug.Print rs.Fields(0).Name, "", rs.Fields(1).Name, _    "", rs.Fields(2).Name, rs.Fields(3).Name        Do While Not rs.EOF       Debug.Print rs.Fields(0), rs.Fields(1), _       rs.Fields(2), rs.Fields(3)       rs.MoveNext    Loop        ' Close one of the remaining connections    cn2.Close        ' Reopen the user roster to verify that no other users are in the    ' database Output the list of all users in the current database.        Set rs = cn.OpenSchema(adSchemaProviderSpecific, , _    "{947bb102-5d43-11d1-bdbf-00c04fb92675}")        Debug.Print rs.Fields(0).Name, "", rs.Fields(1).Name, _    "", rs.Fields(2).Name, rs.Fields(3).Name        Do While Not rs.EOF       Debug.Print rs.Fields(0), rs.Fields(1), _       rs.Fields(2), rs.Fields(3)       rs.MoveNext    Loop        cn.Close        Exit SubErrHandler:    For j = 0 To cn.Errors.Count - 1       Debug.Print "Conn Err Num : "; cn.Errors(j).Number       Debug.Print "Conn Err Desc: "; cn.Errors(j).Description    Next j        For j = 0 To cn2.Errors.Count - 1       Debug.Print "Conn Err Num : "; cn2.Errors(j).Number       Debug.Print "Conn Err Desc: "; cn2.Errors(j).Description    Next j        For j = 0 To cn3.Errors.Count - 1       Debug.Print "Conn Err Num : "; cn3.Errors(j).Number       Debug.Print "Conn Err Desc: "; cn3.Errors(j).Description    Next j        Resume NextEnd Sub

  7. Feche o banco de dados Northwind e então quando for solicitado, salve as alterações para ShutDownDB. (Isto tem quer feito para liberar um bloqueio exclusivo no banco de dados dedvido ao código que você adicionou).
  8. Abra de novo C:\Northwind.mdb.
  9. Pressione CTRL+G para abrir a janela Imediata no Editor do Visual Basic.
  10. Digite a seguinte linha na janela Imediata, e então pressione ENTER:
    ShowUserRosterAndPassiveShutdown
Anote a lista de usuários do banco de dados exibida na janela Imediata.

voltar para o topo


Referências
Para obter um artigo que mostre como efetuar a desconexão uma aplicação de acesso personalizada remotamente, veja o seguinte artigo na Base de Dados de Conhecimento da Microsoft:
304408 ACC2002: How to Shut Down a Custom Access Application Remotely


voltar para o topo







OfficeKBHowTo inf
Propriedades

ID do Artigo: 287655 - Última Revisão: 12/06/2015 00:21:52 - Revisão: 2.3

Microsoft Access 2002 Standard Edition

  • kbnosurvey kbarchive kbdta kbhowto kbhowtomaster KB287655
Comentários