Описание
Объект Workspace определяет именованный сеанс работы пользователя. Этот объект содержит открытые базы данных и предоставляет механизмы для одновременного выполнения транзакций, а также, в рабочей области Microsoft Jet, поддерживает работу защищенной рабочей группы. Этот объект также определяет, осуществляется ли доступ к внешним данным через ядро базы данных Microsoft Jet или через механизм ODBCDirect.
Замечания
Объект Workspace является непостоянным объектом, который определяет, осуществляется ли доступ к внешним данным через ядро базы данных Microsoft Jet или через механизм ODBCDirect. Объект Workspace используется для управления текущим сеансом работы или для запуска дополнительного сеанса. В каждом работы допускается открытие нескольких баз данных или подключений, а также выполнение транзакций. Например, данный объект позволяет:
Кроме того, при работе с базой данных Microsoft Jet имеется возможность установить систему защиты, основанную на использовании имен пользователей и паролей:
При первой ссылке или первом вызове объекта Workspace автоматически создается стандартная рабочая область DBEngine.Workspaces(0), в которой свойства Name и UserName по умолчанию получают значения, соответственно, "#Default Workspace#" и "Admin". Если система защиты баз данных активизирована, то значением свойства UserName становится имя подключенного пользователя.
Для создания объекта Workspace ODBCDirect, позволяющего избежать загрузки ядра базы данных Microsoft Jet в память, следует задать константу dbUseODBC в свойстве DefaultType объекта DBEngine или в аргументе тип метода CreateWorkspace.
В транзакциях участвуют все базы данных, входящие в состав данного объекта Workspace, даже если при этом открыто несколько объектов Database. Например, если пользователь вызывает метод BeginTrans, обновляет несколько записей в базе данных, а затем удаляет записи в другой базе данных, то при вызове метода Rollback свертываются (отменяются) и операции удаления, и операции обновления. Для того чтобы транзакции выполнялись независимо для разных объектов Database, следует создать или открыть независимые объекты Workspace.
Объекты Workspace создаются с помощью метода CreateWorkspace. Если предполагается ссылаться на новый объект Workspace через семейство, то необходимо после создания объекта добавить этот объект в семейство Workspaces.
Допускается также использование нового объекта Workspace без его добавления в семейство. Ссылки на объект при этом осуществляются через объектную переменную, которой присвоен объект.
При ссылках на объект Workspace используют его порядковый номер в семействе или значение свойства Name (имя):
DBEngine.Workspaces(0) DBEngine.Workspaces("имя") DBEngine.Workspaces![имя]
Пример
Следующая программа использует метод CreateWorkspace для создания рабочей области Microsoft Jet и рабочей области ODBCDirect. Затем печатаются списки свойств двух рабочих областей.
Sub CreateWorkspaceX() Dim wrkODBC As Workspace Dim wrkJet As Workspace Dim wrkLoop As Workspace Dim prpLoop As Property ' Создает рабочую область ODBCDirect. До создания рабочей ' области Microsoft Jet, ядро базы данных Microsoft Jet ' не будет загружено в память. Set wrkODBC = CreateWorkspace("ODBCWorkspace", "admin", "", dbUseODBC) Workspaces.Append wrkODBC DefaultType = dbUseJet ' Создает безымянный объект Workspace с типом, ' указанным в свойстве DefaultType объекта DBEngine ' (dbUseJet). Set wrkJet = CreateWorkspace("", "admin", "") ' Отображает семейство Workspaces. Debug.Print "Объекты Workspace в семействе Workspaces:" For Each wrkLoop In Workspaces Debug.Print " " & wrkLoop.Name Next wrkLoop With wrkODBC ' Отображает семейство Properties объекта ODBCDirect. Debug.Print "Свойства " & .Name On Error Resume Next For Each prpLoop In .Properties Debug.Print " " & prpLoop.Name & " = " & prpLoop Next prpLoop On Error GoTo 0 End With With wrkJet ' Отображает семейство Properties рабочей области ' Microsoft Jet. Debug.Print "Свойства безымянной рабочей области Microsoft Jet" On Error Resume Next For Each prpLoop In .Properties Debug.Print " " & prpLoop.Name & " = " & prpLoop Next prpLoop On Error GoTo 0 End With wrkODBC.Close wrkJet.Close End Sub