用于创建Access Backup的VBA代码

时间:2016-02-29 21:28:15

标签: ms-access access-vba database-backups

我只想创建访问的备份文件,因此前端的用户可以按下按钮并创建备份。

我正在尝试此代码,这使得数据库的副本,但也复制我的VBA代码。我只是想复制表格。没有表格,没有报道。

是否可以从VBA中压缩它?

Function fMakeBackup()

Dim Source As String
Dim Target As String
Dim retval As Integer


Source = CurrentDb.Name

Target = "C:\Users\Documents\FileName"
Target = Target & Format(Date, "dd-mm") & "   "
Target = Target & Format(Time, "hh-mm") & ".accdb"

' create the backup
retval = 0
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
retval = objFSO.CopyFile(Source, Target, True)
Set objFSO = Nothing

End Function

更新1 使用@Sergey提供的解决方案

我修改了以下代码

功能fMakeBackup()

Dim Target As String
Target = "C:\Users\adarsh.madrecha\Downloads\Delete "
Target = Target & Format(Date, "dd-mm") & " "
Target = Target & Format(Time, "hh-mm") & ".accdb"

' create the Blank file for copying
Access.DBEngine.CreateDatabase Target, DB_LANG_GENERAL

Dim tdf As TableDef    
For Each tdf In CurrentDb.TableDefs
   DoCmd.CopyObject Target, , acTable, tdf.Name
Next

End Function

当我执行此操作时,会显示一个弹出窗口

Access Security Box

如果我点击选项中的任何一个,代码就会出错。

Runtime error 3024 
Copy object action was canceled 

2 个答案:

答案 0 :(得分:2)

您可以将数据库对象逐个复制到远程数据库。例如,对于表,使用如下代码:

DoCmd.CopyObject TargetFileName, "MyLocalTableName", acTable, "MyRemoteTableName"

目标文件应该已经创建。

用于将所有本地表复制到远程数据库:

Dim tdf As TableDef

For Each tdf In CurrentDb.TableDefs
    DoCmd.CopyObject TargetFileName, tdf.Name, acTable, tdf.Name
Next

答案 1 :(得分:1)

默认情况下,Access不允许启用新创建的目标数据库,因此会出现错误。如果您创建目标并确保通过信任中心设置启用它,则可以解决此问题(但这也意味着您需要重新考虑如何通过添加日期和时间来重命名数据库)。