2011-12-21 2 views
0

Этот код работал до сегодняшнего дня. Я продолжаю получать превышение буфера. Я уверен, что есть намного лучший способ сделать это, но я понятия не имею, как это сделать.Ошибка ASP отклика ASP отклика

Что я пытаюсь сделать, это показать любую запись с текущей даты до двух недель. Пользователи могут вводить любую дату в течение этого двухнедельного периода, и таблица заполняет пробелы между ними или после этого по умолчанию с диапазоном «ЗЕЛЕНЫЙ». Я работал до сегодняшнего дня. Я не тронул его через три недели, и я понятия не имею, что случилось. Я скромный графический дизайнер, который боссы не знают разницы между приложениями html/css и asp/sql. Пожалуйста, помогите, прежде чем я сойду с ума ...

 <div class="cond_holder"> 
     <div class="dir_name">PEDS CARDIOLOGY</div> 
<% 
     Dim this_day_peds_cardio 
     this_day_peds_cardio = Date 

     Dim Conditions_peds_cardio 
     Dim Conditions_peds_cardio_cmd 
     Dim Conditions_peds_cardio_numRows 

     Set Conditions_peds_cardio_cmd = Server.CreateObject ("ADODB.Command") 
     Conditions_peds_cardio_cmd.ActiveConnection = MM_webdbs_STRING 
     Conditions_peds_cardio_cmd.CommandText = "SELECT * FROM dbo.ryg_conditions WHERE aoc='1' AND Day >= DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0) ORDER BY aoc ASC, Day ASC" 
     Conditions_peds_cardio_cmd.Prepared = true 

     Set Conditions_peds_cardio = Conditions_peds_cardio_cmd.Execute 
     Conditions_peds_cardio_numRows = 0 

     Dim Repeat_peds_cardio__numRows 
     Dim Repeat_peds_cardio__index 

     Repeat_peds_cardio__numRows = 14 
     Repeat_peds_cardio__index = 0 
     Conditions_peds_cardio_numRows = Conditions_peds_cardio_numRows + Repeat_peds_cardio__numRows 

     While ((Repeat_peds_cardio__numRows <> 0) AND (NOT Conditions_peds_cardio.EOF)) 
      If DateDiff("d", (Conditions_peds_cardio.Fields.Item("Day").Value), this_day_peds_cardio)=0 Then 
%> 
       <span class="daily_condition <%=(Conditions_peds_cardio.Fields.Item("ryg").Value)%>"> 
        <span style="display: none;"><%=(Conditions_peds_cardio.Fields.Item("aoc").Value)%></span> 
        <%=(Conditions_peds_cardio.Fields.Item("ryg").Value)%> 
        <span class="reason"><%=(Conditions_peds_cardio.Fields.Item("reasoning").Value)%></span> 
       </span><!-- /.daily_condtion --> 
<% 
       this_day_peds_cardio = DateAdd("d", 1, this_day_peds_cardio) 
      Else 
       While DateDiff("d", (Conditions_peds_cardio.Fields.Item("Day").Value), this_day_peds_cardio)<>0 
%> 
        <span class="daily_condition GREEN">GREEN</span><!-- SPACER --> 
<% 
        this_day_peds_cardio = DateAdd("d", 1, this_day_peds_cardio) 
       Wend 
%> 
       <span class="daily_condition <%=(Conditions_peds_cardio.Fields.Item("ryg").Value)%>"> 
        <span style="display: none;"><%=(Conditions_peds_cardio.Fields.Item("aoc").Value)%></span> 
        <%=(Conditions_peds_cardio.Fields.Item("ryg").Value)%> 
        <span class="reason"><%=(Conditions_peds_cardio.Fields.Item("reasoning").Value)%></span> 
       </span><!-- /.daily_condtion --> 

<% 
       this_day_peds_cardio = DateAdd("d", 1, this_day_peds_cardio) 
      End if 

      Repeat_peds_cardio__index=Repeat_peds_cardio__index+1 
      Repeat_peds_cardio__numRows=Repeat_peds_cardio__numRows-1 
      Conditions_peds_cardio.MoveNext() 
     Wend 

     While loop_ctr_peds_cardio < 14 
%> 
      <span class="daily_condition GREEN">GREEN</span><!-- FILLER --> 
<% 
      loop_ctr_peds_cardio = loop_ctr_peds_cardio +1 
     Wend 
%> 
    </div><!-- /#cond_holder --> 

ответ

0

Когда я прочитал исходный код, я пришел с двумя думает:

  1. Вы используете слишком много тегов сценария (<%%>), даже для разделения кода vbscript. Это чрезмерное использование затрудняет чтение и понимание вашего кода. Мне пришлось вставить исходный код в Notepad ++, чтобы привести в порядок и прочитать ваш код.
  2. Вы не использовали набор записей для первого запроса. Если вы хотите, чтобы цикл в результате использования элемента Selectquery использовал объект набора записей. Лучше обращаться и предотвращать некоторые общие ошибки. Используется ли набор записей для устранения ошибки?

Для вашей проблемы:

Используете ли вы IIS6.0 или выше? Если да, то следующие идеи могут помочь (я получил его от немецкого сайта Microsoft, публикуемого в stackoverflow.com (см here) The idears являются:!.

  • Использование Response.Flush()
  • Включите Response.Buffer от на странице или на всем сайте. Response.Buffer = False в верхней части страницы до любого кода ASP.
  • Увеличение размера буфера (см ссылку на «смотрите здесь» позиции).
  • Decrase размера вашего ответа.
+0

Благодарим за ввод данных о форматировании кода. Я пытаюсь найти лучший способ форматирования, но я все еще очень новичок, и именно так мне показали, как это сделать. Мы используем IIS6, и я пробовал Response.Buffer = False, но он разбивает страницу, и пока она будет отображаться, произойдет тайм-аут, а затем заставляет IE (да, я вынужден использовать только IE) выйдет. Я собираюсь попробовать Response.Flush и посмотреть, что произойдет. Еще раз спасибо! –

0

Причина, по которой ваш буфер ответа переполнен, заключается в том, что теперь у вас больше данных. Самый быстрый способ получить его сортировку должен состоять в том, чтобы выдать Response.Flush каждые пару строк или около того (в зависимости от того, насколько велик буфер ответов) внутри цикла while. Отключение буфера ответа почти всегда приводит к тому, что страница занимает больше времени для рендеринга, особенно если у вас много переключателей контекста, как вы.

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