0

在 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
4

1 回答 1

0

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

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

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

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

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

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

或者找到一种方法来关闭通过 DoCmd 打开的连接 [DoCmd.Close() - 不关闭连接]

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

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

http://support.qodbc.com

于 2017-09-13T14:43:06.770 回答