我有一个用vbscript编写的经典asp网页,它输出第三方存储过程的结果。我的用户希望页面以与从数据库进入的顺序不同的顺序显示数据列。 是否有一种简单安全的方法来重新排序ADO记录集中的列?
我没有写这个页面,也无法更改SP。 我可以在这里完成工作的最小变化是什么,而不是冒险搞砸页面中的所有其他内容?
代码看起来像
dim Conn, strSQL, RS
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ServerName
Set strSQL = "EXEC storedProc @foo = " & Request("fooParam")
'This stored procedure returns a date column, an arbitrary '
' number of data columns, and two summation columns. We '
' want the two summation columns to move so they appear '
' immediately after the data column '
Set RS = Server.CreateObject("ADODB.RecordSet")
RS.ActiveConnection = Nothing
RS.CursorLocation = adUseClient
RS.CursorType = adOpenStatic
RS.LockType = adLockBatchOptimistic
RS.Open strSQL, Conn, adOpenDynamic, adLockOptimistic
dim A
' ----- '
' Insert some code here to move the columns of the RS around '
' to suit the whim of my user '
' ----- '
' Several blocks of code that iterate over the RS and display it various ways '
RS.MoveFirst
For A = 0 To RS.Fields.Count -1
' do stuff '
Next
...
RS.MoveFirst
For A = 0 To RS.Fields.Count -1
' do more stuff '
Next
RS.Close : Set RS = Nothing
Conn.Close : Set Conn = Nothing
答案 0 :(得分:1)
获取列名称,然后为它们设置排序:
dim ColumnNames
set ColumnNames = CreateObject( "Scripting.Dictionary" )
For A = 0 To RS.Fields.Count -1
ColumnNames.Add A, RS.Fields(A).Name
Next
此处,ColumnNames包含要用于每个位置的列的名称。应用任何有意义的规则,您现在可以更改顺序:
'' swap order of columns 1 and 2
dim temp
temp = ColumnNames.item( 1 )
ColumnNames.item( 1 ) = ColumnNames.item( 2 )
ColumnNames.item( 2 ) = temp
最后,要获得新订单,请按以下方式打印:
For A = 0 To RS.Fields.Count -1
Response.write( ColumnNames.item( A ) )
Next
答案 1 :(得分:0)
为什么需要重新排序?如果您知道输出遵循某种模式:
Date,Data1,DataN,Sum1,Sum2
您可以使用Fields.Count来决定要显示的DataN列数,以及Sum1和Sum所在的索引。