【问题标题】:vbscript won't return multidimensional arrayvbscript 不会返回多维数组
【发布时间】:2013-08-19 20:37:59
【问题描述】:

这真的很烦人。以下是自定义数据库类中包含的方法。我将数据查询到记录集中,然后尝试将此数据转换为不带字段名称的数组。它似乎在函数内工作,因为我设置了一个 response.write 来检查是否有任何值。但是一旦退出函数,事情就会变得混乱(数组不一样)。

Public Function To2Array()
    dim A, x, columns
    columns = Rs.Fields.Count
    Rs.MoveFirst()
    x = 0
    do until Rs.EOF
        Redim A(x+1,columns)
        for y = 0 to columns - 1
            A(x,y) = Rs.Fields.Item(y)
                            response.write A(x,y) 'returns correct value
        Next
        x = x + 1       
        Rs.MoveNext()
    loop
    To2Array = A
End Function 

我分配了返回数组,但似乎什么都没有。

arr = db.To2Array()
response.write(arr(1,0)) 'returns nothing

谁能弄清楚我做错了什么?

【问题讨论】:

    标签: asp-classic vbscript


    【解决方案1】:
    1. 您只能增加 VBScript 数组的最后一个维度。那么你 需要一个 colsXrows 数组。
    2. 要保留动态数组的“旧”部分,您必须 ReDim Preserve。
    3. 要从记录集中获取二维数组,请使用.GetRows - 并避免所有“自己动手”的风险。

    【讨论】:

    • 使用GetRows 是理想的。 @annoying_squid 请注意,应避免在循环中使用ReDim。如果您真的想“自己动手”,那么您可以阅读RecordCountReDim 一次。但GetRows 是更好的选择。
    • 我的脑子里全是 C 数组。 @Andy 为什么GetRows 比自己滚动更好?
    • GetRows 旨在一次性将记录从记录集检索到数组中。阅读 Ekkehard 提供的链接,注意如果不提供行数,它将从记录集中检索所有行。
    【解决方案2】:

    每次重新调整时都会丢失 A 中的值。使用 redim preserve 可以防止这种情况,但您只能在使用 preserve 时重新调整最后一个数组维度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多