Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access数据库-模块/函数/VBA

Access数据库备份不求人——用VBA实现一键自动备份

时 间:2026-06-29 09:35:06
作 者:张志   ID:8  城市:上海  QQ:3059255点击这里给张志发消息
摘 要:数据无价,备份先行
正 文:

一、为什么说Access数据库备份必不可少?

在日常使用Microsoft Access数据库的过程中,很多人可能都遇到过这样的场景:辛辛苦苦录入的数据,某天打开数据库时突然弹出一个错误提示——“无法识别的数据库格式”或者“3343:Unrecognized Database Format”。那一刻的心慌,相信经历过的人都懂。


Access数据库为什么会损坏? 原因其实比你想象的要普遍得多。


从硬件层面来看,数据存储设备故障是常见原因之一。如果你的硬盘存在坏扇区,而Access MDB文件恰好存储在这些扇区中,就可能导致只能读取文件的一部分,或者读出的数据错误百出。网络设备故障同样不容忽视——当Access数据库驻留在服务器上,通过网络链路访问时,网卡、路由器、集线器等任何环节出问题,都可能使远程访问的MDB数据库损坏。此外,电源故障也是一个重要隐患,如果在访问MDB数据库时发生电源故障或突然断电,MDB文件很可能直接损坏。


从软件层面来看,风险同样无处不在。写操作中止是最常见的情况之一——在打开和写入MDB数据库时,如果Access异常关闭(比如通过任务管理器“结束任务”强行退出,或者直接关机而没有正常退出Access),Jet数据库引擎可能会将数据库标记为可疑或已损坏。病毒或其他恶意软件也可能感染并损坏Access MDB文件。文件系统恢复不正确同样可能导致问题——有时文件系统损坏后,即使找了数据恢复工具或专家来抢救,恢复的文件可能仍然损坏或不完整。


简单总结一下,任何影响计算机稳定工作的非正常因素都有可能破坏Access数据库的完整性:电源电压不稳、死机、硬盘空间不够、硬盘损坏、没有正确关闭应用程序、病毒、网络通讯不稳定……甚至程序因某种原因非正常退出,都可能导致Access数据库损坏。


正因为Access数据库如此“脆弱”,定期备份就显得尤为重要。 备份可以防止因硬件故障、软件错误或人为错误导致的数据丢失;在数据损坏或丢失时,可以通过备份文件快速恢复数据;定期备份还能保留数据的历史版本,便于回溯和审计。


二、一次开发中的“备份刚需”

最近我在开发一个基于Access的软件项目,项目中有两个核心数据库文件:Main.mdb和Data.mdb。每次对软件进行修改或功能迭代后,都需要对这两个数据库进行备份,以防万一。


起初我都是手动复制、粘贴、重命名,操作虽然简单,但重复性极高。今天改一个功能备份一次,明天修一个Bug又备份一次,一天下来可能要手动操作好几遍。更让人头疼的是,每次都要手动输入日期时间作为文件名前缀,一不小心就容易输错格式。


于是我想:为什么不写一个自动备份的VBA代码呢? 每天打开数据库后,点一下按钮就能自动完成备份,既省时省力,又不会出错。


说干就干,代码写出来后效果非常好。今天就把这段代码分享给大家,希望能帮到有同样需求的朋友。


三、VBA自动备份代码

这段代码需要在 备份.mdb中运行。假设当前文件夹下存在Main.mdb、Data.mdb以及一个名为Backup的子文件夹,代码会将两个数据库文件备份到Backup文件夹中,并按“日期(含小时和分钟)+文件名”的格式命名。

Public Sub BackupMainAndData()
    Dim strPath As String
    Dim strBackupPath As String
    Dim strTimeStamp As String
    Dim strMainSource As String
    Dim strDataSource As String
    Dim strMainDest As String
    Dim strDataDest As String


    ' 获取当前数据库所在路径(即 Backup.mdb 所在目录)
    strPath = CurrentProject.Path
    If Right(strPath, 1) <> "\" Then strPath = strPath & "\"


    ' 目标备份文件夹(Backup 子文件夹)
    strBackupPath = strPath & "Backup\"


    ' 生成时间戳,格式:YYYY-MM-DD_HH_MM
    strTimeStamp = Format(Now, "yyyy-mm-dd_hh_nn")


    ' 源文件完整路径
    strMainSource = strPath & "Main.mdb"
    strDataSource = strPath & "Data.mdb"


    ' 目标文件完整路径(时间戳 + 原文件名)
    strMainDest = strBackupPath & strTimeStamp & "Main.mdb"
    strDataDest = strBackupPath & strTimeStamp & "Data.mdb"


    ' 复制 Main.mdb(若目标已存在则先删除)
    If Dir(strMainDest) <> "" Then Kill strMainDest
    FileCopy strMainSource, strMainDest


    ' 复制 Data.mdb(若目标已存在则先删除)
    If Dir(strDataDest) <> "" Then Kill strDataDest
    FileCopy strDataSource, strDataDest


    MsgBox "备份完成!" & vbCrLf & _
           "Main.mdb → " & strMainDest & vbCrLf & _
           "Data.mdb → " & strDataDest, vbInformation, "备份成功"
End Sub

代码说明:


自动获取路径:通过CurrentProject.Path获取当前数据库所在目录,无需手动指定路径。

时间戳命名:使用Format(Now, "yyyy-mm-dd_hh_nn")生成形如2026-06-28_09_12的时间戳,精确到分钟。

自动覆盖:如果目标文件已存在(同一分钟内多次备份),会自动删除旧文件再复制新文件。

友好提示:备份完成后弹出消息框,显示备份文件的完整路径。

备份后的文件命名示例:

2026-06-28_09_12Main.mdb
2026-06-28_09_12Data.mdb


四、示例文件下载

为了方便大家学习和测试,我制作了一个示例点击下载此附件


Access软件网QQ交流群 (群号:54525238)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助