【问题标题】:How can I fix my "database not found" ODBC connection error when re-loading my workbook?重新加载工作簿时,如何修复“找不到数据库”ODBC 连接错误?
【发布时间】:2012-05-10 21:31:56
【问题描述】:

主要使用宏记录器,我创建了一个 VBA 宏,用于在 Excel 和 QuickBooks 文件之间建立供应商列表连接。

Sub RefreshVendorList()
'
' RefreshVendorList Macro

'DatabaseName=3ae39a3bfa964f61a6f974654c1ddbe9;

Columns("C:E").Select
Selection.Delete Shift:=xlToLeft

With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
    "ODBC;Driver={QB SQL Anywhere};UID=Purchasing;;ServerName=QB_data_engine_21;AutoStop=NO;" _
    ), Array("Integrated=NO;Debug=NO;DisableMultiRowFetch=NO")), Destination:= _
    Range("$C$1")).QueryTable
    .CommandText = Array( _
    "SELECT v_lst_vendor.name AS 'Vendor Name', v_lst_vendor_type.name AS 'Type', v_lst_vendor.is_hidden" & Chr(13) & "" & Chr(10) & "FROM QBReportAdminGroup.v_lst_vendor v_lst_vendor, QBReportAdminGroup.v_lst_vendor_type v_lst_vendo" _
    , _
    "r_type" & Chr(13) & "" & Chr(10) & "WHERE v_lst_vendor_type.id = v_lst_vendor.vendor_type_id AND ((v_lst_vendor.is_hidden=0) AND (v_lst_vendor_type.name='MBO'))" & Chr(13) & "" & Chr(10) & "ORDER BY v_lst_vendor.name, v_lst_vendor_type.name" _
    )
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .ListObject.DisplayName = "Table_PA_Vendor_List"
    .Refresh BackgroundQuery:=False
End With

'delete the "ishidden" column
Columns("E:E").Delete

End Sub

我将代码附加到一个按钮上,以便用户可以更新供应商列表。在 QuickBooks 文件打开的情况下,这个 sn-p 大部分时间都可以工作。这是我想改变的,我认为有两种方法可以实现:

选项 1. 每次按下按钮(并重新创建 ODBC 连接)时,它都会要求用户输入密码。我想传递密码而不是询问用户。将 .SavePassword 更改为 True 不会这样做。

选项 2。我认为有一种更好的方法来设置 ODBC 连接,因此它不必通过宏“重新创建”来刷新它。只要 QuickBooks 和这个 Excel 文件保持打开状态,我就可以使用 Excel 中的内置刷新按钮(在数据 -> 全部刷新下)。但是,如果我关闭 Excel 文件和 QuickBooks 文件,重新打开它们并尝试按刷新,我会收到以下错误,这就是我创建宏来重新创建 ODBC 连接的原因:

【问题讨论】:

    标签: vba excel odbc quickbooks


    【解决方案1】:

    您正在使用自定义报告 ODBC 驱动程序。这由 QuickBooks 提供,仅用于报告目的。您只能在公司文件打开时使用此功能,并且每次连接时都必须输入报告用户的密码。这就是 Intuit 设计的工作方式。

    可以编写 VBA 代码来创建并保持打开 ODBC 连接,这样您就不必在每个会话中多次执行登录过程。但是,这不仅仅是要复制的 sn-p 代码;您必须有一个用于连接的全局变量并正确管理它。

    更简单的解决方案是使用the QODBC driver 而不是自定义报告驱动程序。我相信您会得到一份与 QuickBooks Enterprise 捆绑在一起的副本。我假设你有企业版,因为你有自定义报告。 QODBC 需要一些设置,但是一旦设置好,您应该能够避免登录提示并获得与数据库的一致连接。

    【讨论】:

    • 好的,这解决了一些问题。我知道 QODBC 驱动器随 Enterprise 一起提供,所以我认为这就是我正在使用的 ;-) 如何使用/查找 Enterprise 附带的 QODBC 驱动程序?我安装QB的时候有没有安装在我的电脑上?
    • 您必须下载并安装驱动程序。在 QuickBooks 帮助中搜索“ODBC”以获取说明或转到 qbes.com/odbc
    • 感谢您的回复,我今天会调查此事。
    猜你喜欢
    • 2018-10-26
    • 2019-09-15
    • 2013-06-09
    • 2019-11-01
    • 2023-03-12
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    相关资源
    最近更新 更多