文件未被释放

2024-04-28 13:49:28 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我必须在access07中运行一些查询,然后压缩并修复它。我使用python和win32com来完成这个任务。我现在使用的代码是这个。在

import os;
import win32com.client;
DB1 = 'db1.mdb'
DB2 = 'db1N.mdb'
DB3 = 'db2.mdb'
DBR = r'db1.mdb'
access = win32com.client.Dispatch("Access.Application")
access.OpenCurrentDatabase(DBR)
DB = access.CurrentDb()
access.DoCmd.OpenQuery("1")
access.DoCmd.OpenQuery("2")
access.DoCmd.OpenQuery("3")
access.CloseCurrentDatabase()
access.Application.Quit();
os.system('copy "db1.mdb" "db2.mdb"')
access = win32com.client.Dispatch("Access.Application")
access.CompactRepair(DB3,DB2)
access.Application.Quit();
os.remove("db2.mdb")
os.remove("db1.mdb")
os.rename("db1N.mdb","db1.mdb")

问题是我得到了这个错误。在

^{pr2}$

我不知道为什么我得到这个错误,因为我要退出访问,应该关闭文件。如果你知道如何解决这个问题,我们将不胜感激。在


Tags: importclientaccessapplicationoswin32commdbdbr
2条回答

我做了一些改变让你的例子对我有用。要解决您的问题,请添加数据库关闭()

import os;
import win32com.client;
path='C:/project/714239'
os.chdir(path)
DB1 = 'db1.mdb'
DB2 = 'db1N.mdb'
DB3 = 'db2.mdb'
access = win32com.client.Dispatch("Access.Application")
access.OpenCurrentDatabase(path + '/' + DB1, False)
DB = access.CurrentDb()

DB.Close(); #ADDED THIS

access.CloseCurrentDatabase()
access.Application.Quit();

os.system('copy ' + DB1 + ' ' + DB2)

access = win32com.client.Dispatch("Access.Application")
access.CompactRepair(path + '/' + DB2, path + '/' + DB3, True)
access.Application.Quit();

os.remove(DB2)
os.remove(DB1)
os.rename(DB3,DB1)

您的代码包括以下行:

DB = access.CurrentDb()

当该行执行时,CurrentDb()引用db1.mdb。然后,您将在以下位置获得WindowsError

^{pr2}$

所以我想知道变量DB是否仍然包含对db1.mdb的引用。也许你可以先在os.remove()之前尝试del DB。在

或者,因为你的代码实际上没有使用这个DB变量,所以就把它去掉。在

相关问题 更多 >