MyTetra Share
Делитесь знаниями!
Объект Workspace
Время создания: 16.03.2019 23:43
Текстовые метки: vba, DAO, CreateWorkspace, Workspace
Раздел: !Закладки - VBA - Access - DAO

firststeps.ru

www.ПЕРВЫЕ ШАГИ.ru :: Шаг 37 - Объект Workspace

5-7 минут


Описание
Объект Workspace определяет именованный сеанс работы пользователя. Этот объект содержит открытые базы данных и предоставляет механизмы для одновременного выполнения транзакций, а также, в рабочей области Microsoft Jet, поддерживает работу защищенной рабочей группы. Этот объект также определяет, осуществляется ли доступ к внешним данным через ядро базы данных Microsoft Jet или через механизм ODBCDirect.

Замечания
Объект Workspace является непостоянным объектом, который определяет, осуществляется ли доступ к внешним данным через ядро базы данных Microsoft Jet или через механизм ODBCDirect. Объект Workspace используется для управления текущим сеансом работы или для запуска дополнительного сеанса. В каждом работы допускается открытие нескольких баз данных или подключений, а также выполнение транзакций. Например, данный объект позволяет:

  1. Открыть именованный сеанс с использованием свойств Name, UserName и Type. Сеанс работы создает область определения, в которой возможно открытие нескольких баз данных и проведение одной серии вложенных транзакций.
  2. Вызвать метод Close для закрытия сеанса.
  3. Вызвать метод OpenDatabase для открытия одной или нескольких существующих баз данных в данном объекте Workspace.
  4. Использовать методы BeginTrans, CommitTrans и Rollback для управления вложенными транзакциями в пределах объекта Workspace, а также использовать несколько объектов Workspace для одновременного выполнения нескольких пересекающихся транзакций.

Кроме того, при работе с базой данных Microsoft Jet имеется возможность установить систему защиты, основанную на использовании имен пользователей и паролей:

  1. Семейства Groups и Users позволяют установить разрешения на доступ к объектам для пользователей и групп в объекте Workspace.
  2. Семейство IsolateODBCTrans позволяет изолировать множественные транзакции, в которых используется одна и та же база данных, подключенная к ядру 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 


Так же в этом разделе:
 
MyTetra Share v.0.53
Яндекс индекс цитирования