重新排序ADO Recordset中的列(字段)

时间:2010-04-22 16:56:19

标签: asp-classic vbscript ado

我有一个用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

2 个答案:

答案 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所在的索引。