2010-04-22 9 views
1

J'ai une page Web ASP classique écrite en vbscript qui affiche les résultats d'une procédure stockée tierce. Mon utilisateur souhaite que la page affiche les colonnes de données dans un ordre différent de celui de la base de données. Existe-t-il un moyen facile et sûr de réorganiser les colonnes dans un jeu d'enregistrements ADO?Réorganisation de colonnes (champs) dans un jeu d'enregistrements ADO

Je n'ai pas écrit cette page et je ne peux pas modifier le SP. Quel est le minimum de changement que je peux faire ici pour faire le travail et ne pas risquer de vider tous les autres éléments de la page?

Le code ressemble à

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

Avec un code correctement écrit, l'ordre des colonnes dans le jeu de résultats ne devrait pas importer du tout, vous ne devriez pas utiliser l'indexation positionnelle, utilisez plutôt des index nommés. –

+0

Le SP renvoie un nombre arbitraire de colonnes dont les noms sont également arbitraires. – Sukotto

+0

Donc la commande est par type de colonne? Les colonnes de données sont arbitraires et les colonnes de sommation sont également nommées arbitrairement? – Harv

Répondre

1

Obtenir les noms de colonnes, puis mis en place une commande pour eux:

dim ColumnNames 
set ColumnNames = CreateObject("Scripting.Dictionary") 
For A = 0 To RS.Fields.Count -1 
    ColumnNames.Add A, RS.Fields(A).Name 
Next 

Ici, ColumnNames détient le nom de la colonne à utiliser pour chaque position . L'application de toutes les règles de sens, vous pouvez maintenant changer l'ordre comme ceci:

'' swap order of columns 1 and 2 
dim temp 
temp = ColumnNames.item(1) 
ColumnNames.item(1) = ColumnNames.item(2) 
ColumnNames.item(2) = temp 

Enfin, pour obtenir le nouvel ordre, imprimer comme suit:

For A = 0 To RS.Fields.Count -1 
    Response.write(ColumnNames.item(A)) 
Next 
0

Pourquoi avez-vous besoin de les réorganiser? Si vous savez que la sortie suit un certain modèle:

Date, Données1, DataN, Som1, Sum2

Vous avez Fields.Count pour vous permettre de décider combien de colonnes datan à afficher et à l'index et Som1 La somme est localisée.

Questions connexes