Embora eu tenha alterado algum código VBA no MS Access para preencher novas colunas que adicionei a uma tabela do Access, tive dificuldades com uma instância travada que permaneceu aberta mesmo se eu clicasse em "Fechar"/ X
.
Segui o primeiro hit de pesquisa [Acesso] Você não pode modificar a estrutura da tabela porque ela já está em uso por outra pessoa ou processo :
Tente reiniciar, se ainda não o fez. Se isso não funcionar, tente copiar o banco de dados e tente editar a cópia. Se funcionar, exclua o original e renomeie a cópia como era.
Eu queria evitar uma reinicialização completa para fazer uma cópia do arquivo e trabalhar nisso. O bom é que eu estava em uma nova instância em um novo arquivo, e também pude fechá-lo novamente. A instância estava funcionando. Mas quando adicionei uma nova coluna na tabela e tentei preenchê-la, me deparei com o erro:
Não é possível modificar a estrutura da tabela "xyz", pois ela já está em uso por outra pessoa ou processo.
E mais, o código fazia alguma coisa, mas não preenchia a tabela em questão, funcionava em outra tabela oculta, ao que parecia. Achei que isso viria da falha, de modo que a instância travada dominasse aquela em que eu estava trabalhando.
O código:
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
O que deve ser feito se você se deparar com isso?
O problema é que eu abri um novo arquivo "my_file2.accdb" durante a falha e esqueci de alterar o banco de dados de destino "my_file.accdb" no código para "my_file2.accdb":
Nesse ínterim, preenchi a tabela "my_table" em "my_file.accdb" com novas linhas. E quando reabri o "my_file.accdb", pude trabalhar naquele banco de dados novamente e também fechar a instância novamente.