当我更改 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”时,我可以再次使用该数据库,也可以再次关闭该实例。