返回一个二维数组

Returning a 2d array

我有以下功能

Function GetSearchField2dArray(tableName)
    sql = "SELECT * FROM "&tableName&" WHERE TEST IS NULL"

    set rstField = DataConn.execute(sql)

    Dim rv : rv = ConvertSqlResponseTo2dArray (rstField, "")

    set rstField = Nothing

    GetTCLSSearchFields2dArray = rv
End Function

此函数采用 sql 结果集并使用 ConvertSqlResponseTo2dArray 将其转换为二维数组。我已经验证 rv 确实是一个完美的数组。

这里有ConvertSqlResponseTo2dArray供参考:

Function ConvertSqlResponseTo2dArray(rstField, strExclude)
    iField_tmp = 0

    ReDim arrField(2, 0)
    For i = 0 To rstField.Fields.Count - 1
        If InStr(strExclude, "," & rstField.Fields(i).Name & ",") = 0 Then
            strFieldType = rstField.Fields(i).Type
            ReDim Preserve arrField(2, iField_tmp)
            arrField(0, iField_tmp) = rstField.Fields(i).Name
            If strFieldType = adDate Or strFieldType = adDBDate Or strFieldType = adDBTime Or strFieldType = adDBTimeStamp Then
                ' Date
                arrField(1, iField_tmp) = "date"
            ElseIf strFieldType = adSmallInt Or strFieldType = adInteger Or strFieldType = adTinyInt Or strFieldType = adUnsignedTinyInt Or strFieldType = adUnsignedSmallInt Or strFieldType = adUnsignedInt Or strFieldType = adBigInt Or strFieldType = adUnsignedBigInt Then
                ' Integer
                arrField(1, iField_tmp) = "num"
            ElseIf strFieldType = adSingle Or strFieldType = adDouble Or strFieldType = adCurrency Or strFieldType = adDecimal Or strFieldType = adVarNumeric Then
                ' Decimal
                arrField(1, iField_tmp) = "num"
            ElseIf strFieldTYpe = adBoolean Then
                ' Boolean
                arrField(1, iField_tmp) = "boolean"
            Else
                arrField(1, iField_tmp) = "string"
            End If
            iField_tmp = iField_tmp + 1
        End If
    Next

    ConvertSqlResponseTo2dArray = arrField
End Function

然后我有我正在使用的代码

Session("SearchFields") = GetSearchField2dArray("Test1")

Session("SearchFields") 是空的,不是数组。它是 returns 之前的二维数组,而不是 returns 之后的二维数组。为此苦苦挣扎了将近一个小时。

我已经尝试将 GetSearchField2dArray 的结果设置为一个变量,但它仍然有同样的问题。

打字错误。 GetSearchField2dArray returns Empty 因为没有给它赋值。
函数的最后一行必须是 GetSearchField2dArray = rv 而不是 GetTCLSSearchFields2dArray = rv.

请记住使用 Option Explicit 以防止此类混淆。