Artigo: 198756 - Última revisão: quinta-feira, 23 de Junho de 2005 - Revisão: 3.0

COMO: Utilizar controlo de ligação para impedir o utilizador iniciar sessão em tempo de execução no Access 2000

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sumário

Utilizar o Microsoft Visual Basic for Applications no Microsoft Access, pode impedir que os utilizadores iniciem sessão a uma base de dados Jet. Se os utilizadores já encontram na base de dados, irá permanecem com sessão iniciadas; no entanto, outros utilizadores não será possível abrir a base de dados. Isto é chamado um encerramento passivo.

O exemplo de código neste artigo demonstra como efectuar um encerramento passivo e, assim como exportar uma lista de utilizadores que já estão como iniciado sessão na base de dados.

O controlo de ligação

Impede a funcionalidade de controlo (também conhecido como encerramento passivo) de ligação a ligar a uma base de dados. Esta capacidade é útil para um administrador de base de dados que precisa obter acesso exclusivo a uma base de dados para efectuar manutenção, por exemplo, compactar a base de dados, ou que necessita de efectuar actualizações para o esquema da base de dados ou aplicações.

Quando é invocado o controlo de ligação, os utilizadores actualmente ligados a uma base de dados permanecerão inalterados até a desligar. Nessa altura, será possível voltar a ligar até que o controlo de ligação é revogado.

Os cenários seguintes fornecem informações adicionais para esta capacidade de funcionamento:
  • Cinco utilizadores estão na base de dados. Utilizador cinco inicia o encerramento passivo. Utilizador seis tenta ligar à base de dados, mas é negado o acesso e uma mensagem de erro é devolvida indicando que esse utilizador cinco está a impedir a base de dados a ser aberto.
  • Cinco utilizadores estão na base de dados. Utilizador cinco inicia o encerramento passivo. Utilizador um fecha a base de dados e tenta ligar novamente à base de dados, mas é negado acesso e uma mensagem de erro é devolvido indicando que esse utilizador cinco está a impedir a base de dados a ser aberto.
  • Cinco utilizadores estão na base de dados. Utilizador cinco inicia o encerramento passivo. Utilizador cinco fecha a base de dados. Utilizador seis tenta abrir a base de dados e é efectuada com êxito. Isto acontece porque o encerramento passivo persistir apenas enquanto o utilizador que chamou permanece ligado à base de dados.
  • Cinco utilizadores estão na base de dados. Utilizador cinco inicia o encerramento passivo. Utilizadores 1 através de quatro sair da base de dados. Utilizador cinco chama a funcionalidade de lista de utilizador e determinar que não existem outros utilizadores na base de dados. Utilizador cinco fecha a base de dados e imediatamente compacta a base de dados.

A lista de utilizadores

A funcionalidade de lista utilizador fornece uma forma de determinar quem está actualmente ligado a uma base de dados Microsoft Jet. A lista pode ser obtida através da interface de programação ADO e devolve as seguintes informações para cada utilizador:
  • Nome do computador que está a ser utilizado.
  • Nome de segurança, ou seja, o ID do utilizador.
  • Se o utilizador está actualmente ligado à base de dados (ID de utilizador permanece na base de dados de bloqueio até que o último utilizador se desliga ou até que a ranhura é recuperada para uma nova ligação de utilizador.).
  • Se a ligação do utilizador terminou normalmente.
A capacidade da lista de utilizadores pode ser utilizada em conjunto com a capacidade de controlo de ligação para determinar quais os utilizadores que ainda estão ligados, para que estes podem ser solicitadas a desligar.

A capacidade da lista de utilizadores também é útil para isolar problemas relacionados com danos na base de dados associada de actividades de um utilizador específico.

Exemplo de código

A Microsoft fornece exemplos de programação apenas, para fins sem garantia expressa ou implícita. Isto inclui, mas não está limitado a, as garantias implícitas de comercialização ou adequação a um fim específico. Este artigo pressupõe que está familiarizado com a linguagem de programação apresentada e as ferramentas que são utilizadas para criar e depurar procedimentos. Os técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às necessidades específicas do utilizador. Para demonstrar o exemplo de código, siga estes passos:
  1. Copie a base de dados de exemplo Adamastor para o directório C:\.
  2. No Microsoft Access, abra c:\Adamastor.
  3. Crie um novo módulo chamado ShutDownDB .
  4. No menu Ferramentas , clique em References .
  5. Na caixa de diálogo referências , clique para seleccionar a seguinte referência:
    Microsoft ActiveX Data Objects 2.1 Library
  6. Escreva 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 Sub
    
    ErrHandler:
    
        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 Next
    
    End Sub
    					

  7. Feche a base de dados Adamastor e quando lhe for pedido, guarde alterações para ShutDownDB. (Isto deve ser feito para libertar um bloqueio exclusivo na base de dados devido ao código que acabou de adicionar.)
  8. Reabra C:\Northwind.mdb.
  9. Prima CTRL+G para abrir a janela Immediate no Editor do Visual Basic.
  10. Escreva o seguinte na janela Immediate e prima ENTER:
    ShowUserRosterAndPassiveShutdown
    					
Repare na lista de utilizadores de base de dados apresentados na janela imediata.






A informação contida neste artigo aplica-se a:
  • Microsoft Access 2000 Standard Edition
Palavras-chave: 
kbmt kbhowto kbhowtomaster KB198756 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 198756  (http://support.microsoft.com/kb/198756/en-us/ )