【问题标题】:DAO connection via ODBC Manager not closing通过 ODBC 管理器的 DAO 连接未关闭
【发布时间】:2019-05-31 07:04:22
【问题描述】:

我正在使用以下代码来创建 DAO 连接:

Set myWorkspace = DBEngine.CreateWorkspace("MYAPP", "admin", "")

Set DB = myWorkspace.OpenDatabase(DBName, dbDriverNoPrompt, True, IDatenbank_BuildConnectionString(ODBCConnection))

IDatenbank_BuildConnectionString = "ODBC" & _
                                  ";DSN=" & ODBCConnection.Name & _
                                  ";Uid=" & ODBCConnection.User & _
                                  ";Pwd=" & ODBCConnection.Password

在哪里

IDatenbank_BuildConnectionString = ODBC;DSN=US Company Int;Uid=ALA1Bala;Pwd=hihihi

我正在使用以下代码关闭连接:

Set myWorkspace = Nothing

Set DB = Nothing

DB.Close()

问题是即使 DB 对象设置为 null,连接也没有关闭。由于以前的原因,当新用户登录时,旧凭据被用于连接,并且连接对象是使用以前连接的属性创建的。连接会话似乎存在于 Oracle 数据库中。

使用 DAO 驱动程序时如何销毁连接?此外,我不得不提一下,我可以通过使用 ADO 连接来使用替代日志记录选项,并且我没有遇到类似问题,并且连接已关闭并正确重新创建。

【问题讨论】:

    标签: excel vba odbc ado dao


    【解决方案1】:

    我可以用不同的方式创建连接,这样连接就会关闭:

    Dim DB as DAO.Database
    Dim DBE as DBEngine
    
    Set DBE = new DBEngine
    Set DB = DBE.Workspaces(0).OpenDatabase(DBName, dbDriverNoPrompt, true, IDatenbank_BuildConnectionString(ODBCConnection))
    
    Call DB.Close
    Set DB = Nothing
    Set DBE = Nothing
    

    如果您有一个活动会话,要检查 SQL 开发人员:

    select * from v$session where username='<enter_your_username>'
    

    【讨论】:

    • 如果您提出解决方案,请不要问他们是否已经解决了。即使他们这样做了,您的也可能会更好或对其他人有所帮助。
    • 之前做过,但没有成功。该问题是由本地存储凭据的 DAO 驱动程序引起的,唯一有效的选项似乎是更改使用的驱动程序(ADO 是一个选项)。
    猜你喜欢
    • 1970-01-01
    • 2021-05-13
    • 2012-10-07
    • 2012-01-21
    • 1970-01-01
    • 2020-02-24
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多