虽然我在 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
如果遇到这种情况应该怎么办?
问题是我在崩溃期间打开了一个新文件“my_file2.accdb”,并且忘记将代码中的目标数据库“my_file.accdb”更改为“my_file2.accdb”:
与此同时,我用新行填充了“my_file.accdb”中的“my_table”表。然后,当我重新打开“my_file.accdb”时,我可以再次处理该数据库,也可以再次关闭该实例。