我终于得到了我需要的代码,在我的机器上按预期执行并返回我期望从许多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
答案 0 :(得分:0)
删除On Error Resume Next后,我能够收到特定的错误代码,提醒我这个问题。经过一些研究,我发现代码并没有在其他人的机器上执行,因为没有安装SQL Server Native Client 11。感谢恩德兰在正确的方向上轻推。