【问题标题】:Trying to make a connection to QODBC, Import a table, and then close the connection尝试与 QODBC 建立连接,导入表,然后关闭连接
【发布时间】:2018-02-16 10:18:30
【问题描述】:

在 VBA 中使用 Access 2007:

基本上我目前的工作没有错误,但我可能违反了代码中的某些内容(可能是 adodb 和 DAO?),无论我无法在代码完成时结束连接。如果我删除“导入”的代码,那么连接会启动,执行任何代码,然后关闭这是我想要做的,但需要导入。

我这样做的原因是 QODBC 访问进入 Quickbooks 的用户帐户,然后提取信息。问题是“用户”基本上保持登录状态,这不好,因为我们需要访问单用户模式以及您拥有什么。这是我到目前为止的代码。请帮忙!

Private Sub Connect_Click()
On Error GoTo ErrorHandler
'*****************************************************
'Connects the DB to QODBC, imports, and queries the info
'*****************************************************

Dim msg As String
Dim oConnection
Dim sConnectString
Dim dbs As DAO.Database
Dim lngRowsAffected As Long

'Sets connection string
sConnectString = "DSN=Quickbooks Data;OLE DB Services=-2;"
Set oConnection = CreateObject("ADODB.Connection")
oConnection.Open sConnectString

        Set dbs = CurrentDb

' Import from QODBC
        DoCmd.TransferDatabase acImport, "ODBC Database", "ODBC;DSN=QuickBooks Data;DFQ=C:\Users\Public\Documents\Intuit\QuickBooks\Sample Company Files\QuickBooks 2012\sample_manufacturing business.QBW;SERVER=QODBC;OptimizerDBFolder=%AppData%\QODBC Driver for QuickBooks\Optimizer;OptimizerCurrency=Y;OptimizerAllowDirtyReads=D;OptimizerSyncAfterUpdate=Y;SyncFromOtherTables=N;ForceSDKVersion=<default SDK>;LicenseYear=2018", acTable, "SalesOrder", "SalesOrder1"
'Executes a query that appends a table called 'SalesOrder' from a table called 'SalesOrder1'
        dbs.Execute "qryAppendSalesOrder", dbFailOnError
'Bypasses warning messages through an execution of query but this grabs the total appended
        lngRowsAffected = dbs.RecordsAffected
'Function that logs how many lines were appended. Basically just an activity table
        Globals.Logging "Sales Orders Appended: " & lngRowsAffected
'Updates the 'SalesOrder' from 'SalesOrder1'
        dbs.Execute "qryUpdateSalesOrder", dbFailOnError
'Deletes the 'SalesOrder1' table that was imported
        DoCmd.DeleteObject acTable, "SalesOrder1"
        lngRowsAffected = dbs.RecordsAffected


'Closes Connection
oConnection.Close
Set oConnection = Nothing

ErrorHandler:
    If Err.Number <> 0 Then
        msg = "Error # " & Str(Err.Number) & " was generated by " _
        & Err.Source & Chr(13) & "Error Lne: " & Erl & Chr(13) & Err.Description
        MsgBox msg, , "Error", Err.HelpFile, Err.HelpContext
    End If

End Sub

【问题讨论】:

  • 那么它是否有效? speciifc 问题是什么,没有办法用minimal reproducible example 重现它吗?
  • 我想具体的问题是我需要启动一个连接,从那个连接导入一个表,然后关闭那个连接。现在,它将打开连接并正确执行所有代码,但不会关闭与 ODBC 源的连接。但是,如果我完全删除代码的“导入”部分。连接将打开,在里面执行任何代码,然后成功关闭连接。我相信导入正在调用它自己的连接?
  • 它还需要连接字符串做什么?
  • 我想除了调用连接之外没有其他原因。您认为我可以以某种方式引用在代码开头打开的连接吗?还是有办法在导入后的某个时间关闭连接?
  • 你为什么还需要oConnection?你打开它,然后关闭它——它从未使用过。摆脱它。或者,看看TransferDatabase 是否可以使用ADODB.Connection 对象而不是连接字符串(值得怀疑)。

标签: vba odbc ms-access-2007 quickbooks qodbc


【解决方案1】:

oConnection.Open - 打开 QuickBooks 数据的第一个连接。

DoCmd.TransferDatabase - 打开 QuickBooks Data 的第二个连接。

oConnection.Close - 第一个连接已关闭

当您使用 DoCmd 时,MS Access 将打开到 DSN=QuickBooks Data 的连接,并且在您关闭 MS Access 应用程序之前不会关闭它。

与 QODBC DSN 和 QuickBooks 的连接处于活动状态,因此您无法关闭 QuickBooks 应用程序。

您可能必须关闭 MS Access 应用程序才能释放连接。 Manually Close ODBC DSN Connection

或者想办法关闭通过 DoCmd 打开的连接 [DoCmd.Close() - 不关闭连接]

或使用 oConnection 将数据从 QODBC 表传输到 MS Access 表。阅读每一行并将其添加到您的 MS Access 表中。

如需更多帮助,请创建支持票证或在我们的支持系统页面搜索此问题:

http://support.qodbc.com

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 2020-09-08
    • 2017-06-24
    • 2018-06-24
    • 1970-01-01
    相关资源
    最近更新 更多