VBA Excel – 通过ADO的SQL查询返回无限空logging集

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

在四个不同的SQL服务器上有四个SQL DB被命中。 当他们运行这个脚本的时候,其他人的机器上的前三个函数就是预期的。 第四个SQL调用在非EOF行时进入无限循环。 SQL查询返回空值的无限logging集,而不pipe查询是否正常返回任何数据。 这不会发生在我的机器上,而是发生在我们testing过的其他机器上。 这个调用和其他调用之间的一个区别是连接string。 其他服务器使用以下连接string语法进行连接:

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;

这个连接string是唯一与这个版本的SQL服务器一起工作的string。

你觉得什么可能会导致这个查询返回一个无限的空logging集每次调用其他人的机器,但不是我的?

我们已经检查了Excel,操作系统,硬件体系结构,补丁,SQL服务器的访问,通过SSMS运行SQL查询,安装SQL相关组件的版本 – 甚至还有其他人login到我的机器并运行带有必要凭证的电子表格。 仅适用于我的机器。

'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 

删除On Error Resume Next后,我能够收到特定的错误代码,提醒我该问题。 经过一番研究,我发现代码没有在其他人的计算机上执行,因为没有安装SQL Server Native Client 11。 感谢enderland在正确的方向推动。