Compartir a través de


Objeto Workspace (DAO)

Se aplica a: Access 2013, Office 2013

Un objeto Workspace define una sesión con nombre para un usuario. Contiene bases de datos abiertas y proporciona mecanismos para transacciones simultáneas y, en áreas de trabajo de Microsoft Access, compatibilidad con grupos de trabajo seguros.

Comentarios

Un Workspace es un objeto no persistente que define cómo interactúa la aplicación con los datos usando el motor de base de datos de Microsoft Access. Use el objeto Workspace para administrar la sesión actual o iniciar una sesión adicional. En una sesión, puede abrir varias bases de datos o conexiones y administrar transacciones. Por ejemplo, puede:

  • Usar las propiedades Name, UserName y Type para establecer una sesión con nombre. La sesión crea un ámbito en el que se pueden abrir varias bases de datos y realizar una instancia de transacciones anidadas.

  • Usar el método Close para finalizar la sesión.

  • Usar el método OpenDatabase para abrir una o más bases de datos existentes en un área de trabajo.

  • Usar los métodos BeginTrans, CommitTrans y Rollback para administrar el procesamiento de transacciones anidadas dentro de un área de trabajo y usar varios objetos Workspace para llevar a cabo varias transacciones simultáneas y superpuestas.

Cuando haga referencia por primera vez a un objeto Workspace o lo utilice, creará automáticamente el área de trabajo predeterminada, DBEngine.Workspaces(0). La configuración de las propiedades Name y UserName del área de trabajo predeterminada son "#Default Workspace #" y "Admin", respectivamente. Si está habilitada la seguridad, la configuración de la propiedad UserName es el nombre del usuario que ha iniciado la sesión.

Cuando se usan transacciones, todas las bases de datos del área de trabajo especificada se ven afectadas, incluso si se abren varios objetos Database en el área de trabajo. Por ejemplo, se usa un método BeginTrans , se actualizan varios registros en una base de datos y, a continuación, se eliminan los registros de otra base de datos. Si usa el método Rollback , las operaciones de actualización y eliminación se cancelan y se revierten. Puede crear objetos Workspace adicionales para administrar las transacciones de forma independiente entre objetos Database .

Puede crear objetos Workspace con el método CreateWorkspace. Después de crear un nuevo objeto Workspace, debe anexarlo a la colección Workspaces si necesita hacer referencia a él desde la colección Workspaces.

Puede usar un objeto Workspace recién creado sin anexarlo a la colección Workspaces. Sin embargo, debe hacer referencia a él por la variable de objeto que le asignó.

Para hacer referencia a un objeto Workspace de una colección por su número ordinal o por su propiedad Name, use cualquiera de las formas sintácticas siguientes:

DBEngine.Workspaces(0)

DBEngine.Workspaces("name")

DBEngine. Áreas de trabajo [nombre]

Nota:

[!NOTA] Las áreas de trabajo de ODBCDirect no se admiten en Microsoft Access 2013. Use ADO si quiere acceder a orígenes de datos externos sin usar el motor de base de datos de Microsoft Access.

Ejemplo

En este ejemplo, se crea un nuevo objeto Workspace de Microsoft Access y se lo anexa a la colección Workspaces. Luego se enumeran las colecciones Workspaces y la colección Properties del 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 

En este ejemplo, se usa el método CreateWorkspace para crear un área de trabajo de Microsoft Access. A continuación, se enumeran las propiedades del área de trabajo.

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 

En el ejemplo siguiente, se muestra cómo usar una transacción en un área de trabajo de objetos de acceso a datos (DAO).

Código de ejemplo proporcionado por la Referencia del programador de 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