2

У меня есть следующий код ... он захватывает данные, как это:VBScript: Сортировка предметов из Scripting.Dictionary

имя1, Name4, name2, name3

и список, как это ([ ] является флажок):

[] имя 1 [] имя 4 [] имя 2. [] название 3

<% 
    Set DicionarioMyData = CreateObject("Scripting.Dictionary") 
    Set MyData= TarefasConexaoMSSQL.Execute("SELECT A FROM TABLE") 
    If Not MyData.EOF Then 

     Do While Not MyData.EOF 
      ItensDoMyData = MyData("A") 

      If Not IsNull(ItensDoMyData) Then 
       ItensSeparadosDoMyData = Split(ItensDoMyData, ",") 

       For i = 0 To UBound(ItensSeparadosDoMyData) 
        ItensDoMyData = Trim(ItensSeparadosDoMyData(i)) 

        If Not DicionarioMyData.Exists(ItensDoMyData) Then 
         DicionarioMyData.Add ItensDoMyData, i 
         %> 
        <input name="itens" type="checkbox" value="<% Response.Write ItensDoMyData %>"><label><% Response.Write ItensDoMyData %></label> 
         <% 
        End If 
       Next 
      End If 
     MyData.MoveNext 
    End If 
%> 

Это работает, но я не в состоянии разобраться, поэтому правильный вывод должен быть:

[] имя 1 [] имя 2 [] имя 3 [] имя 4

Можно ли отсортировать этот вид выхода?

+0

Какие СУБД вы используете? – AnthonyWJones

+0

MSSQL 08.00.2055, Спасибо за ваше время. И спасибо за очищение кода! – Khrys

ответ

1

VBScript не предлагает хорошие варианты сортировки, однако на любом удаленно современном вам будет доступ к классам COM Visible, предоставляемым .NET, одним из которых является класс System.Collections.SortedList.

Поэтому ваш код может выглядеть примерно так

Dim sl : Set sl = CreateObject("System.Collections.SortedList") 

Dim rs : Set rs = conn.Execute("SELECT SomeField FROM SomeTable") 

If Not rs.EOF Then 

    Do While Not rs.EOF 
     If Not IsNull(rs("SomeField")) Then 
      AddStringListToSortedList rs("SomeField"), sl 
     End If 
    Loop 

End If 

rs.Close 

For i = 0 To sl.Count - 1 
    WriteCheckBox sl.GetKey(i) 
Next 

Sub AddStringListToSortedList(stringList, sortedList) 

    Dim arr: arr = Split(stringList, ",") 
    Dim i, item 
    For i = 0 To UBound(arr) 
     item = Trim(arr(i)) 
     If item <> "" Then 
      If Not sortedList.Contains(item) Then 
       sortedList.Add item, i 
      End If 
     End If 
    Next 

End Sub 

Function WriteCheckbox(value) 
%> 
<input name="itens" type="checkbox" value="<%=Server.HTMLEncode(value)%>" /><label><%=Server.HTMLEncode(value) %></label> 
<% 
End Function 
+0

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

+0

Кстати, мне действительно нужно сохранить его в классическом ASP. Я пытаюсь использовать этот скрипт: http://blogcastrepository.com/blogs/mattbro/archive/2006/11/10/2603.aspx пока еще не повезло ... – Khrys

+0

«Мне действительно нужно сохранить его в классическом ASP» , хорошо по этому определению «Scripting.Dictionary» тоже не «в» классическом ASP. Вы уверены, что ваш сервер настолько стар, что у него нет этого класса? Если нет, то почему класс SortedList COM меньше «ASP», чем «Scripting.Dictionary», просто потому, что он написан на .NET? – AnthonyWJones

Смежные вопросы