2010-12-30 5 views
6

Ich versuche, eine ASP Classic App zu reparieren und wenn ich versuche, ein Array aus einem Recordset-Objekt zu erstellen. Aber ich kann es nicht richtig funktionieren.Classic ASP 3.0 Create Array von einem Recordset

Dieser Code gibt mir einen einzelnen Datensatz (die letzten), aber soweit ich sehen kann, ist es richtig:

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

diesen Code gibt mir einen „Index außerhalb des Bereichs:‚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))) 

Irgendwelche Ideen sehr geschätzt ...

Antwort

13

Ihr fast da sind, ist das Problem, dass GetRows() einen 2-dimensionalen Array zurückgibt, und Sie müssen Tell Ubound welche Dimension möchten Sie.

Arbeitscode:

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

Geht nur um Ihnen zu zeigen, ein PHP-Programmierer sollte nicht ASP-Code schreiben ... hahaha. Danke Eduardo! –

+17

Niemand sollte ASP-Code schreiben. :O – ctorx

0

der erste Codeblock sieht richtig wäre. sind Sie sicher, dass Sie die Daten in der zweiten Dimension des zurückgegebenen Arrays liest? das ist, wie die GetRow füllt das Array auf.

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

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

und so weiter. Auch

Dim arrProducts()

sollte

Dim arrProducts

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

0

Um auf amit_g Erklärung zu erweitern:

<% 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

Ich denke, die größte verwirrende Sache für einen PHP-Programmierer in ASP arbeiten, ist, dass die Array-Dimensionen sind in umgekehrter Reihenfolge was du erwartest.

Kommend von PHP würde ich erwarten, dass dieArray (0,2) der erste Datensatz, dritte Spalte. Nee. Das ist die erste Spalte des dritten Datensatzes. Und wenn Sie etwas haben wollen, das assoziativen Arrays ähnelt, müssen Sie in die Erstellung von "Wörterbüchern" schauen