2010-04-22 1 views
1

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

С правильно написанным кодом порядок столбцов в наборе результатов не должен иметь значения вообще, вы не должны использовать позиционную индексацию, вместо этого используйте именованные индексы. –

+0

SP возвращает произвольное количество столбцов, имена которых также являются произвольными. – Sukotto

+0

Значит, заказ по типу столбца? Колонки данных являются произвольными, а столбцы суммирования также произвольно называются? – Harv

ответ

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 
0

Почему вам нужно изменить их порядок? Если вы знаете, что выход следует определенной схеме:

Дата, Data1, DataN, sum1, sum2

Вы Fields.Count, чтобы решить, как много столбцов DataN для отображения, и при котором индекс sum1 и Сумма находится.