You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在VBScript中无法获取SELECT查询多行结果问题求助

解决Aveva Edge中VBScript查询SQL仅返回第一行的问题

问题原因

Aveva Edge(原Indusoft)的$DBExecute函数默认仅返回查询结果的第一行数据,后续行需要通过$DBFetch函数逐行读取,或者通过配置数据库选项实现一次性返回所有行。你尝试的多个单独标签或数组未生效,是因为没有正确处理多行结果的读取逻辑。

解决方案1:使用$DBFetch逐行读取(推荐)

先在Aveva Edge标签库中创建字符串数组标签(例如resultArray),设置数组大小为足够容纳查询结果的行数(比如3个元素,下标0-2),然后通过以下代码实现逐行读取:

Function getColumnNames(tableName)
    Dim sql, rst, rowCount, i
    rst = "resultArray" ' 关联已创建的字符串数组标签
    sql = "SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('precios') ORDER BY column_id ASC"
    
    ' 执行查询,返回结果总行数
    rowCount = $DBExecute("sqlExpress", sql, rst)
    
    ' 读取并输出所有行
    If rowCount > 0 Then
        ' 第一行已被$DBExecute填充到数组下标0
        MsgBox $resultArray(0)
        
        ' 循环读取剩余行
        For i = 1 To rowCount - 1
            $DBFetch("sqlExpress", rst) ' 将下一行数据填充到数组对应下标
            MsgBox $resultArray(i)
        Next
    End If
End Function

解决方案2:设置FetchSize一次性获取所有行

通过$DBOption设置数据库连接的FetchSize为0(表示一次性获取所有结果行),此时$DBExecute会自动将所有行数据填充到数组标签中:

Function getColumnNames(tableName)
    Dim sql, rst, rowCount
    rst = "resultArray" ' 关联已创建的字符串数组标签
    sql = "SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('precios') ORDER BY column_id ASC"
    
    ' 设置一次性获取所有查询结果行
    $DBOption("sqlExpress", "FetchSize", 0)
    
    ' 执行查询,数组将自动填充所有行数据
    rowCount = $DBExecute("sqlExpress", sql, rst)
    
    If rowCount > 0 Then
        MsgBox $resultArray(0)
        MsgBox $resultArray(1)
        MsgBox $resultArray(2)
    End If
End Function

关键注意事项

  • 必须提前在Aveva Edge标签库中创建对应的数组标签,类型为字符串,数组大小需大于等于查询结果的行数。
  • 不要使用多个单独的标签(如result1/result2/result3),$DBExecute不会自动将多行结果分配到这些独立标签中,数组标签是处理多行结果的标准方式。

内容的提问来源于stack exchange,提问作者user27926789

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 00:58:20