Если вы являетесь пользователем вашей базы данных, вам просто нужно закрыть соединение и скопировать его в файловую систему.
Если есть несколько пользователей, вам следует использовать другой метод. Если у вас действительно есть доступ, есть недокументированная команда, которая сделает резервную копию таблиц в файле Jet / ACE:
Application.SaveAsText 6, vbNullString, strTargetMDB
Теперь, поскольку это можно сделать только с открытой базой данных в пользовательском интерфейсе Access, требуется автоматизировать Access и работать с CurrentDB. Вот реализация, которая работает в Access:
Public Function CreateBackup(strMDBName As String, strBackupPath As String, _
Optional bolCompact As Boolean = False) As Boolean
On Error GoTo errHandler
Dim objAccess As Object
Dim strBackupMDB As String
Dim strCompactMDB As String
If Len(Dir(strBackupPath & "\*.*")) = 0 Then ' alternative: use File System Object for this
MkDir strBackupPath
End If
Set objAccess = New Access.Application
objAccess.Application.OpenCurrentDatabase strMDBName
strBackupMDB = "Backup" & Format(Now(), "YYYYMMDDhhnnss") & ".mdb"
Debug.Print strBackupPath & "\" & strBackupMDB
objAccess.Application.SaveAsText 6, vbNullString, strBackupPath & "\" & strBackupMDB
objAccess.Application.Quit
Set objAccess = Nothing
If bolCompact Then
strCompactMDB = strBackupPath & "\" & "c_" & strBackupMDB
Name strBackupPath & "\" & strBackupMDB As strCompactMDB
DBEngine.CompactDatabase strCompactMDB, strBackupPath & "\" & strBackupMDB
Kill strCompactMDB
End If
CreateBackup = (Len(Dir(strBackupPath & "\" & strBackupMDB)) > 0)
exitRoutine:
If Not (objAccess Is Nothing) Then
On Error Resume Next
objAccess.Application.Quit
On Error GoTo 0
Set objAccess = Nothing
End If
Exit Function
errHandler:
Select Case Err.Number
Case 75 ' Path/File access error -- tried to MkDir a folder that already exists
Resume Next
Case Else
MsgBox Err.Number & ": " & Err.Description, vbExclamation, "Error in CreateBackup()"
Resume exitRoutine
End Select
End Function
Чтобы запустить это из C #, вам нужно автоматизировать Access, и вам, вероятно, не нужна зависимость от Access.
Поскольку я работаю исключительно в Access, я использую этот метод, поэтому я никогда не программировал более сложные методы.
Если у вас есть эксклюзивный доступ к базе данных, вы можете использовать команду JRO CompactDatabase для сжатия к новому имени файла, но если у вас есть эксклюзивный доступ, вы также можете использовать файловую систему.
Итак, в основном, у вас есть выбор, как экспортировать таблицы данных в резервную базу данных. Вы можете использовать DoCmd.TransferDatabase для копирования всех таблиц данных, а затем скопировать отношения, или вы можете создать пустую базу данных шаблонов и добавить данные из каждой таблицы по очереди в копию шаблона (в порядке, который не будет нарушать РИ, конечно).
Ни то, ни другое не звучит для меня беспорядочно, и поэтому я использую метод SaveAsText! Но если бы я не запустил Access, две другие альтернативы стоили бы сделать.