VBA Excel - 通过ADO进行的SQL查询返回无限空记录集

时间:2014-04-11 17:34:34

标签: sql sql-server excel vba

我终于得到了我需要的代码,在我的机器上按预期执行并返回我期望从许多SQL服务器获得的结果。问题是代码的一部分只适用于我的机器。我们正在运行具有特定凭据的Excel电子表格(使用以不同用户身份运行),但以下代码仅在我的机器(用于开发代码的机器)上正确执行。

在四个不同的SQL服务器上有四个SQL DB被命中。前三个功能在运行此脚本时可用于其他人的计算机。第四个SQL调用在while而不是EOF行上进入无限循环。无论查询是否正常返回任何数据,SQL查询都会返回空值的无限记录集。这不会发生在我的机器上,但会发生在我们测试过的其他机器上。此调用与其他调用之间的一个区别是连接字符串。其他服务器使用以下连接字符串语法连接:

Provider = SQLOLEDB.1; Integrated Security = SSPI; Initial Catalog = XXXX; Data Source = XXXX;

有问题的SQL查询(如下所示)使用以下语法:

Driver = {SQL Server Native Client 11.0}; Server = XXXX; Database = XXXX; Trusted_Connection = yes;

此连接字符串是唯一适用于此版本SQL Server的连接字符串。

您认为每次调用其他人的计算机时,该查询是否会返回无限空记录集,而不是在我的计算机上?

我们已经检查了Excel,操作系统,硬件架构,补丁,SQL服务器访问,通过SSMS运行SQL查询,安装了SQL相关组件的版本 - 甚至让其他人登录我的机器并运行必要的电子表格证书。仅适用于我的机器。

    'Variables
    Set objMyConn = New ADODB.Connection
    Set objMyCmd = New ADODB.Command
    Set objMyRecordset = New ADODB.Recordset

    'Open connection
    objMyConn.ConnectionString = "Driver={SQL Server Native Client 11.0};Server=XXXX;Database=XXXX;Trusted_Connection=yes;"
    objMyConn.Open

    'Set and execute SQL command
    Set objMyCmd.ActiveConnection = objMyConn

    objMyCmd.CommandText = "<Valid SQL Statement>"

    objMyCmd.CommandType = adCmdText

    'Open recordset
    Set objMyRecordset.Source = objMyCmd
    objMyRecordset.Open objMyCmd

    sbuildStr = ""

    While Not objMyRecordset.EOF ' HERE IS WHERE THE PROBLEM LIES ON THE MACHINES OF OTHERS
        strPSTPath = CStr(objMyRecordset("foox"))
        strPSTSize = CStr(objMyRecordset("PSTSize"))
        sbuildStr = sbuildStr & strPSTPath & " - " & strPSTSize & Chr(10) & Chr(13)
        objMyRecordset.MoveNext
    Wend

    ThisWorkbook.Sheets("WORKBOOK").Cells(i, 11).Value = sbuildStr

1 个答案:

答案 0 :(得分:0)

删除On Error Resume Next后,我能够收到特定的错误代码,提醒我这个问题。经过一些研究,我发现代码并没有在其他人的机器上执行,因为没有安装SQL Server Native Client 11。感谢恩德兰在正确的方向上轻推。