1

当我在另一个而不是 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>
4

3 回答 3

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
于 2013-02-05T00:41:27.180 回答
1

假设您的记录集按 Acronym 排序。

这就像@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>
于 2013-02-08T10:54:29.720 回答
-1

一旦到达记录集的末尾(通过循环),它就不会重置回起点(除非您也告诉它),所以一旦在第二个循环开始时到达第一个循环中的记录集的末尾,它就是已经在最后了。

我会重写您的代码,因为它不是很合乎逻辑,但是如果您希望代码按原样工作,请在循环结束后添加 movefirst 以返回记录集的开头。

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

编辑:实际上,如果你这样做,你最终会进入一个循环,在第一个循环之前克隆记录集并循环两个具有相同数据的不同记录集。否则重写以更清洁一点。

于 2013-02-05T03:58:50.300 回答