MS Access:尝试删除电子表格时数据库崩溃

Posted

技术标签:

【中文标题】MS Access:尝试删除电子表格时数据库崩溃【英文标题】:MS Access: DB is crashing when trying to delete a spreadsheet 【发布时间】:2017-04-14 14:20:37 【问题描述】:

我有一个导出文件的按钮,但首先它会检查该文件是否存在。如果是,则删除该文件并在其位置写入一个新文件。问题是单击此按钮会立即使数据库崩溃。任何想法为什么?这个问题最近才出现——它之前在 Acess 2013 和 Access 2016 上都运行良好。环境是一个商业环境(公司笔记本电脑,而不是个人笔记本电脑),我们所做的大部分事情都由 IT 管理。管理员。

代码:

Private Sub Command370_Click()

    Dim myQueryName As String
    Dim myExportFileName As String

    myQueryName = "qry_SAP_FGCheck"
    myExportFileName = "J:\2017\SAP\SAPExports\DailyFGCheck_Export.xlsx"
    If Len(myExportFileName) > 0 Then
        On Error GoTo Err_Msg
        Kill myExportFileName
    End If
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, myQueryName, myExportFileName
    Application.FollowHyperlink myExportFileName

Err_Msg: If (Err.Number = 70) Then MsgBox "Error: (" & Err.Number & ")" & Err.description & ". You must close the spreadsheet in order to export.", vbOKOnly Else Resume Next


End Sub

【问题讨论】:

【参考方案1】:

可能在按钮单击事件中调用的机器上没有这样的目录。您使用驱动器号J:\ 建议将用户定义的映射驱动器路径映射到网络目录。用户可能已映射到不同的驱动器号。试试完整的 UNC,它可以在 cmd 行 net use:

myExportFileName = "\\SomeNetwork\Path\2017\SAP\SAPExports\DailyFGCheck_Export.xlsx"

事实上,现在该文件总是被删除,因为您正在检查 VBA 字符串的长度(它总是非零),因为您之前分配它而不是实际的文件系统对象。

考虑在删除或导出前是否存在这样的目录文件路径:

If Len(Dir(myExportFileName, vbDirectory)) > 0 Then
    On Error GoTo Err_Msg
    Kill myExportFileName

    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _
                              myQueryName, myExportFileName
    Application.FollowHyperlink myExportFileName
End If

甚至考虑保存到数据库的当前路径,这样用户可用的目录就无关紧要,甚至避免覆盖其他用户的导出。

myExportFileName = Application.CurrentProject.Path & "\DailyFGCheck_Export.xlsx"

If Len(Dir(myExportFileName, vbDirectory)) > 0 Then
    On Error GoTo Err_Msg
    Kill myExportFileName

    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _
                              myQueryName, myExportFileName
    Application.FollowHyperlink myExportFileName
End If

理想情况下,每个用户都在本地 CPU 上使用他/她自己的前端(即C:\ 驱动器)。

【讨论】:

以上是关于MS Access:尝试删除电子表格时数据库崩溃的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Access 中导入电子表格数据时出现错误消息

MS Access中表之间的关系

将 Excel 电子表格导入 MS Access 数据库

VBA Excel - 从 MS Access 将列名保存到电子表格

MS Access 2003 - Access 表单上的嵌入式 Excel 电子表格

在使用 VBA 的 MS Access 链接的 Excel 电子表格中指定“开放式”范围