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

标签 sql sql-server excel vba

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

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

Provider=SQLOLEDB.1;集成安全=SSPI;初始目录=XXXX;数据源=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

最佳答案

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

关于sql - VBA Excel - 通过 ADO 的 SQL 查询返回无限的空记录集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23019095/

相关文章:

sql - 从不同数据库进行备份/恢复导致恢复失败,无法获得独占访问权限

python - Pyspark 等同于 Pyodbc?

excel - 使无框用户窗体透明

excel - 从 GridView 导出到 Excel 无法正确显示波斯语

sql - Linq to SQL nvarchar问题

sql - Postgres pg_try_advisory_lock 阻塞所有记录

sql - 根据第 7 个分隔符拆分 sql 字符串值

sql-server - sql查询获取下一行的列作为一行的列

c# - 如何为新记录或更新记录创建 SQL 约束

excel - 调用返回 ArrayList 的函数