当我在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 :(得分: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
答案 1 :(得分: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>
答案 2 :(得分:-1)
一旦你到达记录集的末尾(通过循环),它不会重置回到开始(除非你也告诉它)所以一旦你在第一个循环中到达记录集的末尾时第二个循环开始它已经结束了。
我会重写你的代码,因为它不是真正合乎逻辑的但如果你希望你的代码能够正常工作,那么在循环结束后添加一个movefirst返回到记录集的开头。
...
</tr>
<%
con.MoveNext()
Wend
con.movefirst
con.MoveNext()
Wend
%>
</table>
编辑:实际上,如果你这样做,你将最终进入循环,在第一个循环之前克隆记录集,并使用相同的数据循环两个不同的记录集。否则重新写一点就好了。