You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:40:39