2013-02-05 28 views
1

下面的代码打破了,当我放置一段时间而不是EOF在另一个而不是EOF。 这是不合法的ASP经典代码?我如何解决它?虽然不EOF在另一个虽然不是EOF不工作在ASP CLASSIC

<table cellspacing = "0" cellpadding = "3" class = "horiz "> 
    <tr> 
     <th width = "20%">Acronym</th> 
     <th width = "50%">Meaning</th> 
     <th width = "30%">Source</th> 
    </tr> 
    <% 
    count = 0 
    pletter = "z" 
    fletter = left(con("acronym"),1) 
    %> 
    <% while (NOT con.EOF) %> 
    <tr> 
     <td colspan = "3" ><h2><a name="A">A</a></h2></td> 
    </tr> 
    <% while (NOT con.EOF) %> 
    <tr> 
     <td><%=con("acronym")%></td> 
     <td><%=con("meaning")%></td> 
     <td><%=con("source")%></td> 
    </tr> 
    <% 
    con.MoveNext() 
    Wend 
    %> 
    <% 
    con.MoveNext() 
    Wend 
    %> 
</table> 
+0

我想执行第一个while循环一次,然后下一个while循环并重复该过程直到EOF。 – sephiith

回答

3

为什么不能有一个while循环。添加if语句以确定第一个字符是否已更改(例如,从A到B)。如果角色改变,则添加TR以显示角色。

dim lastCharacter = "" 
while (not con.EOF) 
    dim firstLetterOfAcronym = left(con("acronym"),1) 
    if lastCharacter <> firstLetterOfAcronym then 
     rem show TR of firstLetterOfAcronym 
     lastCharacter = firstLetterOfAcronym 
    end if 

    <tr>..... show row as usual </tr> 
    con.MoveNext() 
wend 
+0

我会让你从上面的伪代码中找出缺少的部分。 –

-1

一旦你记录(通过回路)的最终它不会重置回到开始(除非你告诉它太),所以一旦你记录结束第一循环当第二个循环开始时,它已经在最后。

我会重写你的代码,因为它不是真的合乎逻辑,但是如果你想让你的代码按照原样工作,在循环结束后添加movefirst以回到记录集的开始位置。

... 
</tr> 
<% 
con.MoveNext() 
Wend 
con.movefirst 
con.MoveNext() 
Wend 
%> 
</table> 

编辑:其实,如果你这样做,你最终会在一个循环中,第一个环和循环两种不同的记录与同一数据之前克隆记录。否则重新写一个小清洁。

+0

我不太喜欢这个解决方案。没有意义循环遍历每个记录两次。 –

+0

我也不喜欢它,你应该重写你的代码,不必循环两次,但这是原始海报的代码,因此我修改了它的工作来回答他的问题。你不能投票给我使用他的代码和回答他的问题:) – silver

+0

但是,你应该(尝试)给予有帮助的答案,不要让别人做错了什么。 –

1

假设您的记录集按照首字母缩写词排序。

这完全像@Valamas他的解决方案,意味着一个单一的循环,但一个更完整的例子。

<table cellspacing = "0" cellpadding = "3" class = "horiz"> 
    <tr> 
     <th width = "20%">Acronym</th> 
     <th width = "50%">Meaning</th> 
     <th width = "30%">Source</th> 
    </tr> 
    <% 
    mainletter = "" 

    While (NOT con.EOF) 
     letter = Left(con("acronym") 
     If mainletter <> letter Then 
      %> 
      <tr> 
       <td colspan = "3" ><h2><a name="<%=letter%>"><%=letter%></a></h2></td> 
      </tr> 
      <% 
      mainletter = Left(con("acronym"),1) 
     End If 
     <tr> 
      <td><%=con("acronym")%></td> 
      <td><%=con("meaning")%></td> 
      <td><%=con("source")%></td> 
     </tr> 
     <% 
     con.MoveNext() 
    Wend 
    %> 
</table>