2010-12-30 14 views
6

ASPクラシックアプリケーションを修正しようとしています。また、レコードセットオブジェクトから配列を作成しようとしています。しかし、私はそれが正しく動作するようにすることはできません。クラシックASP 3.0レコードセットから配列を作成する

このコードは私に単一のレコード(最後の1)を与えるが、私の知る限り、それは正しいです: 『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() 
arrProducts = Products.GetRows() 

は私の範囲外」添字を与えます

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

任意のアイデアをいただければ幸いです...

答えて

13
あなたがほとんど存在し

する必要があり、問題はGetRows()は、2次元配列を返し、あなたがする必要があるということです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>" 
%> 
+5

PHPプログラマにASPコードを書いてはいけません。ありがとうエドゥアルド! –

+17

誰もASPコードを書くべきではありません。 :o – ctorx

0

最初のコードブロックが正しいようで。あなたが返される配列の第2次元のデータを読んでいることを確認していますか?それはどのようにあります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()

薄暗いarrProducts

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

0

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

私はASPで働いPHPプログラマーのための最大の混乱の事は、その配列の次元は、逆の順序であると思いますあなたは何を期待しているのですか?

PHPから来て、私はtheArray(0,2)が最初のレコードの3番目の列であると思います。いいえ。これは3番目のレコードの最初の列です。連想配列に似たものが欲しい場合は、 "辞書"の作成に目を向ける必要があります