2012-05-10 19 views
1

主要使用宏录制器,我创建了一个VBA宏,用于设置Excel和QuickBooks文件之间的供应商列表连接。重新加载我的工作簿时,如何解决“未找到数据库”ODBC连接错误?

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文件的打开,这段代码大部分时间都在运行。这是我想改变的方式,我认为可以实现的方式有两种:

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

选项2.我认为有更好的方法来设置ODBC连接,所以不必为了刷新而重新创建它。只要QuickBooks和Excel文件保持打开状态,我就可以使用Excel中的内置刷新按钮(在Data - > Refresh All下)。不过,如果我关闭Excel文件和QuickBooks的文件,重新打开它们,并尝试按刷新,我碰到下面的错误,这是我创建了一个宏来重新创建ODBC连接的原因:

Database not found ODBC error

回答

1

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

可以编写VBA代码来创建并保持打开ODBC连接,以便您不必每次会话都要经历多次登录过程。但是,这不仅仅是复制代码的一小部分,你必须有一个连接的全局变量并正确管理它。

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

+0

好的,这清除了一些东西。我知道QODBC驱动器随Enterprise提供,所以我认为这就是我使用的;-)我如何使用/查找我的企业版附带的QODBC驱动程序?当我安装QB时,它是否安装在我的电脑上? –

+0

您必须下载并安装驱动程序。请在QuickBooks帮助中搜索“ODBC”以获取相关说明,或访问http://www.qbes.com/odbc –

+0

感谢您的回复,我今天将详细讨论此问题。 –

相关问题