“您无法修改表“xyz”的结构,因为它已被其他人或进程使用。”,并且无法关闭 Access 实例

“您无法修改表“xyz”的结构,因为它已被其他人或进程使用。”,并且无法关闭 Access 实例

当我更改 MS Access 中的某些 VBA 代码来填充添加到 Access 表的新列时,我遇到了一个崩溃的实例,即使我单击“关闭”,该实例仍然保持打开状态X

我关注了第一个搜索结果[Access] 您无法修改表的结构,因为它已被其他人或进程使用

如果尚未重新启动,请尝试重新启动。如果这不起作用,请尝试复制数据库,然后尝试编辑副本。如果有效,请删除原始文件并将副本重命名为原来的名称。

我想避免完全重启,因此我复制了文件并在其中工作。好处是我处于新文件的新实例中,我也可以再次关闭它。实例正在运行。但是当我在表中添加新列并尝试填充它时,我遇到了错误:

您无法修改表“xyz”的结构,因为它已被其他人或进程使用。

在此处输入图片描述

更糟糕的是,代码做了一些事情,但它并没有填充手边的表格,它似乎在另一个隐藏的表格上工作。我认为这是由于崩溃造成的,因此崩溃的实例控制着我正在处理的实例。

代码:

Option Compare Database

Sub DurchsucheAccessDatenbanken()
    Dim fso As Object
    Dim fld As Object
    Dim db As Object
    Dim rs As Object
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fld = fso.GetFolder("K:\MS Access\my_folder")
    
    Dim targetDB As Object
    Dim Objekttyp As String
    Dim Objektart As String
    Set targetDB = Application.DBEngine.Workspaces(0).OpenDatabase("K:\MS Access\my_file.accdb")
    
    For Each file In fld.Files
        file_Name = file.Name
        If Right(file_Name, 4) = ".mdb" Or Right(file_Name, 6) = ".accdb" Then
            Set db = Application.DBEngine.Workspaces(0).OpenDatabase(file.Path)
            
            ' Hier kannst du den Code ergänzen, um die Objekten der Datenbank auszulesen
            For Each obj In db.TableDefs
                obj_Name = obj.Name
                If Left(obj_Name, 4) <> "MSys" And Left(obj_Name, 1) <> "~" Then
                    Set rs = targetDB.OpenRecordset("my_table")
                    rs.AddNew
                    rs("Database").Value = file_Name
                    rs("obj_Name").Value = obj_Name
                    rs("LastUpdated").Value = obj.LastUpdated
                    rs.Update
                End If
            Next obj
    Next file
    
    targetDB.Close
End Sub

如果碰到这种情况该怎么办?

答案1

问题是我在崩溃期间打开了一个新文件“my_file2.accdb”,却忘记将代码中的目标数据库“my_file.accdb”更改为“my_file2.accdb”:

Set targetDB = Application.DBEngine.Workspaces(0).OpenDatabase("K:\MS Access\my_file2.accdb")

与此同时,我已经用新行填充了“my_file.accdb”中的“my_table”表。当我重新打开“my_file.accdb”时,我可以再次使用该数据库,也可以再次关闭该实例。

相关内容