Вы можете создать несколько рабочих пространств и соответствующих объектов базы данных, которые имеют отдельные транзакции, даже в базе данных, которая в настоящее время открыта. Обратите внимание, что это не сработает, если у вас есть эксклюзивная блокировка базы данных.
Dim wsLog As DAO.Workspace
Dim wsImport As DAO.Workspace
Dim dbImport As DAO.Database
Dim dbLog As DAO.Database
Dim dbe As DAO.DBEngine
Set dbe = DBEngine
Set wsLog = dbe.CreateWorkspace("wsLog", "Admin", "")
Set wsImport = dbe.CreateWorkspace("wsImport", "Admin", "")
Set dbLog = wsLog.OpenDatabase(CurrentProject.FullName)
Set dbImport = wsImport.OpenDatabase(CurrentProject.FullName)
wsImport.BeginTrans
dbImport.Execute "INSERT INTO Table1(Field1) VALUES(1)" 'Do your imports/processing in this workspace
wsLog.BeginTrans
dbLog.Execute "INSERT INTO Table2(Field1) VALUES(1)" 'And logging here
wsLog.CommitTrans 'Commit log
wsImport.Rollback 'Rollback import afterwards
'Result: Table2 is changed, Table1 isn't
Обратите внимание, что, хотя не требуется, использовать отдельную базу данных журналов, если вы используете Access для хранилище, я рекомендую его.
И, как сказано в комментариях, вы также можете просто работать с временной таблицей.
Вы создаете постоянно невидимую таблицу, предназначенную для временного использования, используя CreateTableDef
с константой dbHiddenObject
:
CreateTableDef("TableName", dbHiddenObject)
Он не будет удален автоматически, поэтому в этом смысле он не временный. И имейте в виду, что удаление + воссоздание временных таблиц увеличит размер базы данных, что, вероятно, потребует более компактных операций.