2011-12-21 34 views
0

此代码正在工作,直到今天我不断收到缓冲区超出错误。我很积极有更好的方式来做到这一点,但我不知道如何。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或更高?如果是这样那么下面的想法可以帮助(我是从一个德国网站微软的,张贴在stackoverflow.com(见here)的idears是:!

  • 使用Response.Flush()
  • 关闭将Response.Buffer关闭在页面上,或整个网站。 Response.Buffer = False页面之前的任何ASP代码的顶部。
  • 增加缓冲区的大小(请参阅“在这里看到”位置的链接)。
  • Decrase大小的回复。
+0

感谢您在代码格式上的输入。我试图找到格式化的最佳方式,但我仍然很新,这就是我被证明这么做的方式。我们使用的是IIS6,我尝试了Response.Buffer = False,但它打破了页面,当它显示时,发生超时,然后强制IE(是的,我只能使用IE)将退出。我要去尝试Response.Flush,看看会发生什么。再次感谢! – 2011-12-21 15:45:03

0

你的响应缓冲区溢出的原因是你现在有更多的数据需要显示。获得排序的最快方法应该是在while循环内每隔几行发出一个Response.Flush(取决于响应缓冲区的大小)。关闭响应缓冲区几乎总是会导致页面渲染时间更长,特别是如果您有许多上下文切换,就像您一样。