Разница между DBEngine.BeginTrans и DBEngine.Workspaces (0) .BeginTrans - PullRequest
6 голосов
/ 08 января 2009

В Access, в чем разница между этими двумя утверждениями?

DBEngine.BeginTrans

и

DBEngine.Workspaces(0).BeginTrans

Документация для обоих ведет в одно и то же место.

Ответы [ 4 ]

7 голосов
/ 08 января 2009

Посмотрите здесь: Рабочая область DAO
И затем здесь: Рабочая область DAO: открытие отдельного пространства транзакций

(ссылки для MFC, но они применимы ко всему, что вы кодируете.)

DBEngine.Workspaces(0) - рабочее пространство по умолчанию. Могут быть созданы другие рабочие пространства, которые позволяют вам работать с отдельными сессиями; идея заключается в том, что BeginTrans и EndTrans применяются ко всему рабочему пространству, но если вам нужно что-то делать вне этой транзакции, вы можете создать другое рабочее пространство и использовать его независимо от ваших транзакций в первом рабочем пространстве.

Лично мне никогда не приходилось использовать более одного рабочего пространства при выполнении DAO в VBA. * пожав плечами *

2 голосов
/ 08 января 2009

Мой собственный ответ:

Похоже, что DBEngine.BeginTrans и DBEngine.Workspaces (0) .BeginTrans делают то же самое, потому что этот код работает (см. Ниже). «Рабочие пространства» является членом DBEngine по умолчанию.

Dim db As Database
Set db = CurrentDb

DBEngine.BeginTrans
db.Execute "Update Table1 SET CITY='Newark'"
DBEngine.Workspaces(0).Rollback
0 голосов
/ 02 июня 2009

Как однажды сказал Спок, разница, которая не имеет значения, не имеет значения ...

0 голосов
/ 10 января 2009

В интерфейсе приложения Access одновременно может быть открыт только один контейнер базы данных. В коде VBA вы можете открыть несколько экземпляров базы данных в рабочей области. См. Документацию файла справки для метода Workspace.OpenDatabase (или http://msdn.microsoft.com/en-us/library/bb243164.aspx) для примера, когда в одной рабочей области открыто более одной базы данных.

Можно сделать вывод, что когда транзакции поддерживаются всеми базовыми базами данных, открытыми в рабочей области, метод BeginTrans рабочей области будет применяться ко всем базам данных. Я подозреваю, что там будут драконы, но я уверен, что он будет работать с двумя MDB внутри одного рабочего пространства. Если в рабочей области открыта только одна база данных, Workspace.BeginTrans и Database.BeginTrans действительно совпадают.

...