2010-12-30 21 views
6

Estoy tratando de arreglar una aplicación ASP Classic y cuando intento crear una matriz desde un objeto Recordset. Sin embargo, no puedo hacer que funcione correctamente.Classic ASP 3.0 Crear matriz desde un conjunto de registros

Este código me da un solo registro (el último), pero por lo que puedo ver es correcta:

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() 

Utilizando este código me da una "Subíndice fuera del intervalo: '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))) 

Cualquier idea sería muy apreciada ...

Respuesta

13

Estás casi allí, el problema es que GetRows() devuelve una matriz de 2 dimensiones, y es necesario dígale Ubound qué dimensión quiere.

código de trabajo:

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>" 
%> 
+5

Solo sirve para mostrarle que un programador PHP no debe escribir código ASP ... jajaja. Gracias Eduardo! –

+17

Nadie debería escribir código ASP. : o – ctorx

0

el primer bloque de código es correcto. ¿estás seguro de que usted está leyendo los datos de la segunda dimensión de la matriz devuelta? Así es como el GetRow completa la matriz.

arrProducts (0, 0) => prod_id - fila 1 arrProducts (1, 0) => prod_description - fila 1

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

y así sucesivamente. También arrProducts

Dim()

deben ser

arrProducts

Dim

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

0

Para ampliar la explicación 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>" 

%> 
0

Creo que el mayor cosa confusa para un programador PHP trabaja en ASP es que las dimensiones de la matriz están en el orden inverso al de lo que estás esperando

Viniendo de PHP esperaría que TheArray (0,2) sea el primer registro, tercera columna. Nop. Esa es la primera columna del tercer registro. Y si desea algo que se asemeje a matrices asociativas, debe buscar crear "diccionarios"

Cuestiones relacionadas