Access如何释放ODBC
Posted
技术标签:
【中文标题】Access如何释放ODBC【英文标题】:How let Access release the ODBC 【发布时间】:2018-11-13 12:06:58 【问题描述】:我有 2 个访问数据库,一个用作 CRM,另一个仅使用 ODBC 保存与 firebird 数据库的链接表。这个 firebird 数据库 (fdb) 只允许一个用户访问。
CRM 通过 ODBC 更新表时,没有释放 ODBC 连接(Firebird),这意味着其他需要访问的应用程序无法打开数据库。只有在关闭 CRM 时才会释放 ODBC 连接。
Dim dba as database
Dim strODBCname as string
strODBCname = "OSF_ODBC.accdb"
Set dbs = OpenDatabase(ValidatePath(CurrentProject.Path, False) & strODBCname)
dbs.execute .... (etc.)
在所有记录 R/W 完成后
set dbs = nothing
还有其他方法可以强制释放 ODBC 连接吗?
彼得
【问题讨论】:
【参考方案1】:我目前不知道如何显式释放当前会话的 ODBC 连接,但您可以在第二个 Access 应用程序会话(内存中的第二个 MsAccess.exe)中打开数据库并在工作后释放它:
Const ODBC_NAME As String = "OSF_ODBC.accdb"
With CreateObject("Access.Application")
.OpenCurrentDatabase ValidatePath(CurrentProject.Path, False) & ODBC_NAME
.CurrentDb.Execute ...
.CurrentDb.Close
.Quit
End With
这应该肯定会释放连接。
【讨论】:
【参考方案2】:我不知道您使用的是哪个版本的 Access。但是在你创建一个新的应用对象之前,你应该尝试一下
Set wrkAcc = CreateWorkspace("", "admin", "", dbUseJet)
Set dbs = wrkAcc.OpenDatabase(ValidatePath(CurrentProject.Path, False) & strODBCname)
或更高一级:
dim dbe=dao.dbengine
set dbe=CreateObject("dao.dbengine")
Set dbs= dbe.OpenDatabase(ValidatePath(CurrentProject.Path, False) & strODBCname)
更全局地,您可以修改控制 ODBC 连接缓存的注册表设置。
【讨论】:
以上是关于Access如何释放ODBC的主要内容,如果未能解决你的问题,请参考以下文章