Compartilhar via


Objeto Workspace (DAO)

Aplica-se ao: Access 2013, Office 2013

Um objeto Workspace define uma sessão nomeada por um usuário. Ele contém bancos de dados abertos e fornece mecanismos para transações simultâneas e, nos espaços de trabalho do Microsoft Access, suporte a grupos de trabalho seguros.

Comentários

Um Workspace é um objeto não persistente que define como o aplicativo interage com os dados — utilizando o mecanismo de banco de dados do Microsoft Access ou o ODBCDirect. Use o objeto Workspace para gerenciar a sessão atual ou para iniciar uma sessão adicional. Em uma sessão, você pode abrir vários bancos de dados ou conexões e gerenciar transações. Por exemplo, você pode:

  • Usar as propriedades Name, UserName e Type para estabelecer uma sessão chamada. A sessão cria um escopo no qual é possível abrir vários bancos de dados e realizar uma instância de transações aninhadas.

  • Usar o método Close para encerrar uma sessão.

  • Usar o método OpenDatabase para abrir um ou mais bancos de dados existentes em um Workspace.

  • Usar os métodos BeginTrans, CommitTrans e Rollback para gerenciar o processamento de transações aninhadas dentro de um Workspace e usar vários objetos Workspace para realizar diversas operações simultâneas e de sobreposição.

Quando se faz referência ou se usa um objeto Workspace pela primeira vez, cria-se automaticamente o espaço de trabalho padrão, DBEngine.Workspaces(0). As configurações das propriedades Name e UserName do espaço de trabalho padrão são "#Default Workspace#" e "Admin," respectivamente. Se a segurança estiver habilitada, a configuração da propriedade UserName é o nome do usuário conectado.

Quando você utiliza transações, todos os bancos de dados no Workspace especificado são afetados — mesmo se vários objetos Database forem abertos no Workspace. Por exemplo, você usa um método BeginTrans, atualiza vários registros em um banco de dados e, em seguida, exclui registros de outro banco de dados. Se você utilizar o método Rollback, as operações de atualização e exclusão serão canceladas e revertidas. Você pode criar objetos Workspace adicionais para gerenciar transações, de forma independente, nos objetos Database.

É possível criar objetos Workspace com o método CreateWorkspace. Depois de criar um novo objeto Workspace, você deve acrescentá-lo à coleção Workspaces se precisar se referir a ela a partir da coleção Workspaces.

Você pode usar um objeto Workspace recém-criado sem acrescentá-lo à coleção Workspaces. Entretanto, você deve se referir a ele pela variável de objeto que foi atribuída a ele.

Para referir-se a um objeto Workspace de uma coleção pelo número ordinal ou pela configuração da propriedade Name, use qualquer uma das formas de sintaxe a seguir:

DBEngine.Workspaces(0)

DBEngine.Workspaces("name")

DBEngine. Workspaces! [nome]

Observação

[!OBSERVAçãO] O Microsoft Access 2013 não oferece suporte para espaços de trabalho ODBCDirect. Use o ADO para acessar fontes de dados externas sem usar o mecanismo de banco de dados do Microsoft Access.

Exemplo

Este exemplo cria um novo objeto Microsoft Access Workspace e o acrescenta à coleção Workspaces. Em seguida, enumeram-se as coleções Workspaces e a coleção Properties de cada objeto Workspace.

Sub WorkspaceX() 
 
   Dim wrkNewAcc As Workspace 
   Dim wrkLoop As Workspace 
   Dim prpLoop As Property 
 
   ' Create a new Microsoft Access workspace. 
   Set wrkNewAcc = CreateWorkspace("NewAccessWorkspace", _ 
      "admin", "", dbUseJet) 
   Workspaces.Append wrkNewAcc 
 
   ' Enumerate the Workspaces collection. 
   For Each wrkLoop In Workspaces 
      With wrkLoop 
         Debug.Print "Properties of " & .Name 
         ' Enumerate the Properties collection of the new 
         ' Workspace object. 
         For Each prpLoop In .Properties 
            On Error Resume Next 
            If prpLoop <> "" Then Debug.Print "  " & _ 
               prpLoop.Name & " = " & prpLoop 
            On Error GoTo 0 
         Next prpLoop 
      End With 
   Next wrkLoop 
 
   wrkNewAcc.Close 
End Sub 

Este exemplo usa o método CreateWorkspace para criar um espaço de trabalho Microsoft Access. Em seguida, ele lista as propriedades dos dois tipos de espaço de trabalho.

Sub CreateWorkspaceX() 
 
   Dim wrkAcc As Workspace 
   Dim wrkLoop As Workspace 
   Dim prpLoop As Property 
 
 
   DefaultType = dbUseJet 
   ' Create an unnamed Workspace object of the type  
   ' specified by the DefaultType property of DBEngine  
   ' (dbUseJet). 
   Set wrkAcc = CreateWorkspace("", "admin", "") 
 
   ' Enumerate Workspaces collection. 
   Debug.Print "Workspace objects in Workspaces collection:" 
   For Each wrkLoop In Workspaces 
      Debug.Print "  " & wrkLoop.Name 
   Next wrkLoop 
 
   With wrkAcc 
      ' Enumerate Properties collection of Microsoft Access  
      ' workspace. 
      Debug.Print _ 
         "Properties of unnamed Microsoft Access workspace" 
      On Error Resume Next 
      For Each prpLoop In .Properties 
         Debug.Print "  " & prpLoop.Name & " = " & prpLoop 
      Next prpLoop 
      On Error GoTo 0 
   End With 
 
   wrkAcc.Close 
 
End Sub 

O exemplo a seguir mostra como usar uma transação no espaço de trabalho do Objetos de Acesso de Dados (DAO).

Código de exemplo fornecido por: a Referência do programador do Microsoft Access 2010.

    Public Sub TransferFunds()
        Dim wrk As DAO.Workspace
        Dim dbC As DAO.Database
        Dim dbX As DAO.Database
        
        Set wrk = DBEngine(0)
        Set dbC = CurrentDb
        Set dbX = wrk.OpenDatabase("e:\books\acc2007vba\myDB.accdb")
        
        On Error GoTo trans_Err
        
        'Begin the transaction
        
        wrk.BeginTrans
        
        'Withdraw funds from one account table
        dbC.Execute "INSERT INTO tblAccounts ( Amount, Txn, TxnDate ) SELECT -20, 'DEBIT', Date()", dbFailOnError
    
        'Deposit funds into another account table
        dbX.Execute "INSERT INTO tblAccounts ( Amount, Txn, TxnDate ) SELECT 20, 'CREDIT', Date()", dbFailOnError
        
        'Commit the transaction
        wrk.CommitTrans dbForceOSFlush
        
    trans_Exit:
        'Clean up
        wrk.Close
        Set dbC = Nothing
        Set dbX = Nothing
        Set wrk = Nothing
        Exit Sub
        
    trans_Err:
        'Roll back the transaction
        wrk.Rollback
        Resume trans_Exit
        
    End Sub