【问题标题】:Classic ASP 3.0 Create Array from a Recordset经典 ASP 3.0 从记录集创建数组
【发布时间】:2011-06-01 08:01:38
【问题描述】:

我正在尝试修复 ASP Classic 应用程序,当我尝试从 Recordset 对象创建数组时。但是我无法让它正常工作。

这段代码给了我一条记录(最后一条),但据我所知,它是正确的:

Dim Products
Dim Products_cmd
Dim Products_numRows

Set Products_cmd = Server.CreateObject ("ADODB.Command")
Products_cmd.ActiveConnection = Conn
Products_cmd.CommandText = "SELECT prod_id, prod_description FROM dbo.products ORDER BY prod_description ASC" 
Products_cmd.Prepared = true

Set Products = Products_cmd.Execute
Products_numRows = 0

Dim arrProducts()
arrProducts = Products.GetRows()

使用此代码给我一个“下标超出范围:'UBound'

Dim Products
Dim Products_cmd
Dim Products_numRows

Set Products_cmd = Server.CreateObject ("ADODB.Command")
Products_cmd.ActiveConnection = Conn
Products_cmd.CommandText = "SELECT prod_id, prod_description FROM dbo.products ORDER BY prod_description ASC" 
Products_cmd.Prepared = true

Set Products = Products_cmd.Execute
Products_numRows = 0
Dim arrProducts()
Dim counter

For counter = 0 to Products.RecordCount - 1
    ReDim Preserve arrProducts(counter,2)
    arrProducts(counter,0) = Products.Fields.Item("prod_id").Value
    arrProducts(counter,1) = Products.Fields.Item("prod_description").Value
    Products.MoveNext
Next
Response.Write(Str(UBound(arrProducts)))

任何想法都将不胜感激......

【问题讨论】:

    标签: vbscript asp-classic ado


    【解决方案1】:

    你快到了,问题是GetRows()返回一个二维数组,你需要告诉Ubound你想要什么维度。

    工作代码:

    Dim Products
    Dim Products_cmd
    Dim Products_numRows
    
    Set Products_cmd = Server.CreateObject ("ADODB.Command")
    Products_cmd.ActiveConnection = Conn
    Products_cmd.CommandText = "SELECT prod_id, prod_description FROM dbo.products ORDER BY prod_description ASC" 
    Products_cmd.Prepared = true
    
    Set Products = Products_cmd.Execute
    
    Dim arrProducts
    arrProducts = Products.GetRows()
    
    dim i
    response.write "<table>"
    For i = 0 to ubound(arrProducts, 2)
       response.write "<tr>"
       response.write("<td>" + trim(i+1))
       response.write("<td>" + trim(arrProducts(0,i)))
       response.write("<td>" + trim(arrProducts(1,i)))
    next
    response.write "</table>"
    %>
    

    【讨论】:

    • 只是告诉你一个PHP程序员不应该写ASP代码......哈哈哈。谢谢爱德华多!
    【解决方案2】:

    扩展amit_g的解释:

    <% OPTION EXPLICIT %>
    <%
    
    sub echo(x)
        response.write x
    end sub
    
    dim conn : set conn = server.createobject("ADODB.CONNECTION")
    conn.open("Provider=SQLOLEDB;Data Source=.\SQLEXPRESS;Initial Catalog=tinker;uid=sa;pwd=devpassword")
    
    dim sql : sql = "select '1a' as ColA , '1b' as ColB union all select '2a' , '2b' union all select '3a' , '3b' "
    
    dim rs : set rs = conn.execute(SQL)
    
    dim arr : arr = rs.GetRows()
    
    dim cols : cols = ubound(arr,1)
    dim rows : rows = ubound(arr,2)
    
    dim x , y
    
    echo "<table border='1' style='border-collapse:collapse;'>"
    echo  "<tr>"
    echo   "<td>&nbsp;</td>"
    for x = 0 to cols
        echo   "<th>Col " & x & "</th>"
    next
    echo  "</tr>"
    for y = 0 to rows
        echo  "<tr>"
        echo   "<th>Row " & y & "</th>"
        for x = 0 to cols
            echo   "<td>" & arr(x,y) & "</td>"
        next
        echo  "</tr>"
    next
    echo "</table>"
    
    %>
    

    【讨论】:

      【解决方案3】:

      第一个代码块看起来是正确的。您确定您正在读取返回数组的第二维数据吗?这就是 GetRow 填充数组的方式。

      arrProducts(0, 0) => prod_id - 第 1 行 arrProducts(1, 0) => prod_description - 第 1 行

      arrProducts(0, 1) => prod_id - 第 2 行 arrProducts(1, 1) => prod_description - 第 2 行

      等等。还有

      暗淡 arrProducts()

      应该是

      Dim arrProducts

      http://www.asp101.com/samples/viewasp.asp?file=db_getrows.asp

      【讨论】:

        【解决方案4】:

        我认为对于在 ASP 中工作的 PHP 程序员来说,最大的困惑是数组维度的顺序与您期望的相反。

        来自 PHP,我希望 theArray(0,2) 成为第一条记录,第三列。没有。这是第三条记录的第一列。如果你想要类似关联数组的东西,你需要考虑创建“字典”

        【讨论】:

          猜你喜欢
          • 2011-04-19
          • 1970-01-01
          • 2020-10-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多