2011-12-21 3 views
0

이 코드는 현재까지 버퍼가 초과되었습니다. 나는이 일을하는 훨씬 더 좋은 방법이 있다는 것에 긍정적이지만, 나는 어떻게 생각할 수 없다.ASP 클래식 응답 버퍼가 초과되었습니다. 오류

내가하려는 것은 현재 날짜의 항목을 2 주 밖에 표시하지 않는 것입니다. 사용자는 그 2 주 기간 내에 날짜를 입력 할 수 있으며 표는 기본 "그린"범위로 그 사이 또는 그 이후의 공백을 채 웁니다. 오늘까지 일 해왔다. 나는 3 주 만에 그것을 만지지 않았고 나는 어떤 일이 일어 났는지 전혀 모른다. 나는 보스가 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 코드. 이렇게 지나치게 많이 사용하면 코드를 읽고 이해하기가 어려워집니다. 메모장에 소스 코드를 붙여 넣기 만하면된다.
  2. 처음 쿼리하는 동안 레코드 집합을 사용하지 않았습니다. Selectquery 결과를 통해 루프를 수행하려면 레코드 세트 개체를 사용하십시오. 일반적인 오류를 처리하고 예방하는 것이 더 쉽습니다. 레코드 세트를 사용하면 오류가 줄어 듭니다? 문제에 대한

:

당신은 IIS6.0 이상을 사용하십니까? .

  • 는 오프 Response.Buffer가 돌려 Response.Flush()
  • 사용 : 라! 그럼 다음과 같은 아이디어가 도움이 될 수 있다면 (I합니다 (idears는) here를 참조 stackoverflow.com에 게시 마이크로 소프트의 독일어 사이트에서 그것을 가지고 페이지 또는 전체 사이트에. 모든 ASP 코드 이전 페이지의 상단에 Response.Buffer = False.
  • 가 버퍼의 크기를 증가 (위치 '를 여기에서 볼'에 링크 참조).
  • 을 크기 Decrase 귀하의 답변 중
+0

코드 포맷을 입력 해 주셔서 감사합니다. 나는 형식을 취하는 가장 좋은 방법을 찾으려고 노력하고 있지만, 나는 아직도 아주 새롭다. 우리는 IIS6을 사용하고 Response.Buffer = False를 시도했지만 페이지가 깨지고 표시되는 동안 시간 초과가 발생하고 강제로 IE (예 : IE 만 사용하도록 강제 됨)가 종료됩니다. 나는 Response.Flush를 시도 할 것이고 어떤 일이 일어날지를 볼 것이다. 다시 한 번 감사드립니다! –

0

응답 버퍼가 오버 플로우되는 이유는 지금 표시 할 데이터가 더 많기 때문입니다. 그것을 정렬하는 가장 빠른 방법은 while 루프 내에서 Response.Flush를 몇 줄 (또는 응답 버퍼의 크기에 따라 다름)마다 실행하는 것입니다. 응답 버퍼를 끄면 거의 항상 페이지 렌더링 시간이 오래 걸립니다. 특히 컨텍스트 스위치를 많이 사용하는 경우에는 특히 그렇습니다.