Access 2019备份代码运行时出现Run-Time error '70': Permission denied错误
Access备份窗体Run-Time error '70' 权限拒绝问题排查与解决
核心问题分析
出现Run-Time error '70': Permission denied主要有两类原因:代码逻辑缺陷导致路径错误,或系统权限限制导致无法写入目标位置。结合你的代码,先看最可能的代码问题:
1. 备份路径未包含完整文件名
你的backupPathBtn_Click事件选择的是文件夹路径(比如D:\Backup),但FileCopy函数要求目标路径必须是完整文件名(比如D:\Backup\Database_Backup.accdb)。直接用文件夹作为目标路径,系统会误以为要把源数据库文件覆盖成文件夹,必然触发权限错误。
2. 未处理配置表无记录的情况
SaveBackupPath函数只更新已有的BackupPath记录,如果tblConfig里没有这条记录,备份时会使用默认路径,但默认路径的文件夹可能不存在,也会导致写入失败。
3. 目标路径无写入权限
如果选择的是系统保护目录(比如C:\、C:\Program Files、C:\Windows),普通用户没有写入权限,也会触发该错误。
代码修正步骤
修正路径选择逻辑
修改backupPathBtn_Click事件,在选择文件夹后自动拼接备份文件名:
Private Sub backupPathBtn_Click() Dim dlg As FileDialog Dim selectedFolder As String Dim fullBackupPath As String Set dlg = Application.FileDialog(msoFileDialogFolderPicker) If dlg.Show = -1 Then selectedFolder = dlg.SelectedItems(1) ' 拼接完整备份文件名 fullBackupPath = selectedFolder & "\Database_Backup.accdb" Me.backupPath.Value = fullBackupPath MsgBox fullBackupPath Else ' 默认完整路径 fullBackupPath = "C:\myapp\backup\Database_Backup.accdb" Me.backupPath.Value = fullBackupPath MsgBox fullBackupPath End If ' 保存路径到配置表 SaveBackupPath End Sub
完善配置表记录处理
修改SaveBackupPath函数,新增不存在的BackupPath记录:
Private Sub SaveBackupPath() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("tblConfig", dbOpenDynaset) rs.FindFirst "SettingName = 'BackupPath'" If Not rs.NoMatch Then rs.Edit rs!SettingValue = Me.backupPath.Value rs.Update Else ' 新增记录 rs.AddNew rs!SettingName = "BackupPath" rs!SettingValue = Me.backupPath.Value rs.Update End If rs.Close Set rs = Nothing Set db = Nothing End Sub
添加文件夹自动创建逻辑
新增函数确保备份文件夹存在,避免因文件夹不存在导致的写入失败:
Private Sub CreateFolderIfNotExists(folderPath As String) ' 检查文件夹是否存在,不存在则创建 If Dir(folderPath, vbDirectory) = "" Then MkDir folderPath End If End Sub
然后在GetBackupPath函数中调用:
Private Function GetBackupPath() As String Dim db As DAO.Database Dim rs As DAO.Recordset Dim defaultFolder As String Set db = CurrentDb Set rs = db.OpenRecordset("tblConfig", dbOpenDynaset) rs.FindFirst "SettingName = 'BackupPath'" If Not rs.NoMatch Then GetBackupPath = rs!SettingValue Else defaultFolder = "C:\myapp\backup" ' 创建默认文件夹 CreateFolderIfNotExists defaultFolder GetBackupPath = defaultFolder & "\Database_Backup.accdb" End If rs.Close Set rs = Nothing Set db = Nothing End Function
系统权限检查
- 避免选择系统保护目录作为备份位置,优先选择用户目录(比如
C:\Users\你的用户名\Documents\Backup、桌面等)。 - 如果必须写入系统目录,右键Access程序选择以管理员身份运行,再测试备份功能。
内容的提问来源于stack exchange,提问作者hayder majid
相关产品推荐
相关产品推荐

