2016-08-19 3 views
0

Ich erstelle eine Tabelle direkt aus dem ADO-Recordset mit field.name und field.value. Wie von einem anderen früheren Beitrag gesehen Retrieve ADO Recordset Field names (Classic ASP).
Wenn ich einen Schritt weiter gehe, versuche ich die Tabellenüberschriften basierend auf Werten aus einer anderen Datenbank umzubenennen. Im Wesentlichen wenn th = Column_1 dann schreiben "Vorname" usw.Erstellen Sie eine Funktion mit While-Schleife ASP VBScript?

Ich kann dies individuell mit einer "wenn dann" -Funktion mit spezifischen Code tun. Allerdings habe ich eine andere Datenbank, die alle richtigen Überschrift Namen hat und würde lieber while-Schleife über ein Recordset verwenden. Anstatt jede Zeile zu schreiben - columneheading1 = x und columleheading2 = y etc würde ich lieber eine while-Schleife erstellen.

Auch hier funktionieren die einzelnen "if then" -Anweisungen gut, wie unten im Code angegeben, aber das Recordset nicht.
Ich habe versucht, das Recordset und die Schleife zu beheben, aber nicht gut. Irgendwelche Ideen, warum die while-Schleife (oder Wiederholungsregion) in der Funktion nicht funktionieren würde?

Unten ist das Beispiel:

<table> 
     <thead> 
      <tr> 

    <% 
    Function Header_Name_Sub(Header_NameX) 
    Header_Name_Write = Header_NameX 
    If Header_Name_Write = "Project_File_ID" Then 
    Header_Name_Write = "File ID" ' this works great. 
    End If 
    If Header_Name_Write = "Project_Assignment_Name" Then 
    Header_Name_Write = "Project Name" ' this works great. 
    End If 

    ' Have a data base of all header names based on column name ... this repeat is not working in the function. If I pull it out this section works fine elsewhere in the page... 
Do While Not RS_Build_Numeric_Names.EOF 
    If CStr(Header_Name_Write) = CStr((RS_Header.Fields.Item("True_Column_Name").Value)) Then ' thought maybe string issue is why CStr 
    Header_Name_Write = (RS_Build_Numeric_Names.Fields.Item("Fixed_Column_Name").Value 
    End If 
Loop 

    If Header_Name_Write = "Project_City" Then 
    Header_Name_Write = "City" ' this works great. 
    End If 
    End Function 
    %>  

      <%For Each fld in RS.Fields%> 
      <% 
      Header_Name_Sub(fld.Name) 
      %> 
    <th><span><%=Header_Name_Write%></span></th> 
      <%Next %> 
      </tr> 
     </thead> 
     <tbody> 
    <% 
     Do Until RS.EOF 
      OutputRow RS.Fields 
      RS.MoveNext 
     Loop 
    %> 
     </tbody> 
    </table> 
    <% 
    Sub OutputRow(fields) 
    %> 
      <tr> 
      <%For Each fld in fields%> 
       <td><span><%=(fld.Value)%></span></td> 
      <%Next %> 
      </tr> 
    <% 
    End Sub 
    %> 

hier So ist die Bearbeitung in einfacher Form nur wurde mir klar. Innerhalb der Funktion ...

If Header_Name_Write = "Project_File_ID" Then 
Header_Name_Write = "File ID" ' this works great. 
End If 

Funktioniert gut oben. Ich habe versucht, die While-Schleife zu verwenden, um die 50+ zusätzlichen 'If Then's' zu schreiben, als stattdessen einfach durchgeschleift wurde. Also wie kann ich in die Funktion die Extras eintragen?

If x = 1 Then Header_Name_Write = "File ID" End If 
If x = 2 Then Header_Name_Write = "Next Header" End If 
If x = 3 Then Header_Name_Write = "Another Header" End If 

Ist es stattdessen eine for-Schleife?

Etwas weiter entlang ...

For Each fld in RS_Build_Numeric_Names.Fields 
If Header_Confirm = (RS_Build_Numeric_Names.Fields.Item("Build_Project_Metric_Column_Name").Value) Then 
Header_Name_Write = (RS_Build_Numeric_Names.Fields.Item("Build_Project_Metric_Name").Value) 
End If 
Next 

Wenn ich ein für statment ist funktioniert für den ersten Datensatz nur in dem Re-Cord ... nicht die ganze Schleife.

+0

Sollte ich eine Server.CreateObject ("Scripting.Dictionary")? – Brewy

Antwort

0

da Header_Name_Sub() eine Funktion ist, sollten Sie tatsächlich erhalten das Ergebnis ordnungsgemäß zurückgeben, anstatt die Header_Name_Write Variable zu verwenden. In Ihrem Code wird erwartet, dass Header_Name_Write eine globale Variable ist. Da Sie dies jedoch nicht explizit mit einer DIM-Anweisung deklarieren, kann dies zu unerwarteten Ergebnissen führen.

Sie sollten die folgenden stattdessen versuchen:

<% 
    Function Header_Name_Sub(Header_NameX) 
    Dim Header_Name_Write '' make it local here 
    Header_Name_Write = Header_NameX 
    . 
    . 
    . 
    . 
    Header_Name_Sub = Header_Name_Write '' assign the local value and return it 
    End Function 

    For Each fld in RS.Fields 
    %><th><span><%=Header_Name_Sub(fld.Name)%></span></th><% 
    Next 
. 
. 
. 
+0

Danke für die Antwort zurück, und ich stimme zu helfen, den Code auch aufräumen. Immer noch kann die while nicht die Header zurückgeben. Versuche immer noch! – Brewy

+0

Mir ist gerade klar geworden, warum die Schleife nicht funktioniert. Weil es den Wert innerhalb der Schleife neu definiert. Doooop! Ich möchte, dass die Schleife alle notwendigen 'if then'-Anweisungen in die Funktion schreibt ... den Wert nicht ersetzt. Wie kann ich das erreichen? – Brewy

0

es Figured 99% aus. Es war richtig, ein Skriptwörterbuch zu verwenden, um die Kopfzeilennamen zu definieren.

<table border="1px"> 
    <thead> 
     <tr> 

<% 
Set Header_Options_All = Server.CreateObject("Scripting.Dictionary") 
Do While Not RS_Header_Options_2.eof 'one RS Loop 
    Header_Options_All.Add (RS_Header_Options_2.Fields.Item("Build_Project_Drop_Column_Name").Value), (RS_Header_Options_2.Fields.Item("Build_Project_Drop_Option_Name").Value) 
    RS_Header_Options_2.movenext 
Loop 
Do While Not RS_Build_Numeric_Names.eof 'Another RS Loop 
    Header_Options_All.Add (RS_Build_Numeric_Names.Fields.Item("Build_Project_Metric_Column_Name").Value), (RS_Build_Numeric_Names.Fields.Item("Build_Project_Metric_Name").Value) 
    RS_Build_Numeric_Names.movenext 
Loop 
Header_Options_All.Add "Project_File_ID", "File ID" 'singles I added 
Header_Options_All.Add "Project_ID", "ID" 
Header_Options_All.Add "Project_Assignment_Name", "Project Name" 
Header_Options_All.Add "Project_City", "City" 
%> 

<% 
Function Header_Name_Sub(Header_NameX) 
Dim Header_Name_Write 
Dim Header_Confirm 
Header_Name_Write = Header_NameX 
Header_Confirm = Header_NameX 
For Each elem In Header_Options_All 
Header_Name_Write = Header_Options_All.Item(Header_Confirm) 
Next 
Header_Name_Sub = Header_Name_Write 
End Function 
%>  

     <%For Each fld in RS_Full_List_Building_Inner_Join.Fields%> 
<th><span><%=Header_Name_Sub(fld.Name)%></span></th> 
     <%Next %> 
     </tr> 
    </thead> 

Jetzt kann ich die andere einfach nicht in füllen. Bedeutung, wenn es nicht einen Namen ich den Namen Standard will überein. Nahe genug!

0

Gerade dämmerte mir, warum die Schleife nicht funktioniert. Weil es den Wert innerhalb der Schleife neu definiert. Doooop! Ich möchte, dass die Schleife alle notwendigen 'if then'-Anweisungen in die Funktion schreibt ... den Wert nicht ersetzt. Wie kann ich das erreichen? -

Variable = Variable & "neue Daten"