Изменение порядка столбцов (полей) в наборе записей ADO - PullRequest
1 голос
/ 22 апреля 2010

У меня есть классическая веб-страница asp, написанная на vbscript, которая выводит результаты сторонней хранимой процедуры.Мой пользователь хочет, чтобы на странице отображались столбцы данных в другом порядке, нежели они поступают из базы данных. Существует ли простой и безопасный способ переупорядочения столбцов в наборе записей 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 ]

1 голос
/ 22 апреля 2010

Получите имена столбцов, затем установите для них порядок:

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
0 голосов
/ 25 апреля 2010

Зачем вам их менять порядок? Если вы ЗНАЕТЕ, что вывод соответствует определенному шаблону:

Дата, Данные1, ДанныеN, Сумма1, Сумма2

У вас есть Fields.Count, чтобы вы могли решить, сколько столбцов DataN отображать и в каком индексе Sum1 и Sum расположены.

...