Asp classic ASP表和EOF-获取错误';80020009';

Asp classic ASP表和EOF-获取错误';80020009';,asp-classic,Asp Classic,考虑一个包含四行的记录集,如下所示 Team NumDocs OPS10 2 OPS4 1 OPS5 2 OPS7 3 还可以考虑表格中的以下行来显示这些内容 <td> <% If Trim(RS("Team")) = "OPS1" And not RS.EOF Then Response.Write(RS("NumDocs")) RS.MoveNext End If%> </td> <td> <% If Trim(RS("Te

考虑一个包含四行的记录集,如下所示

Team  NumDocs
OPS10 2
OPS4  1
OPS5  2
OPS7  3
还可以考虑表格中的以下行来显示这些内容

<td>
<% If Trim(RS("Team")) = "OPS1" And not RS.EOF Then
Response.Write(RS("NumDocs")) 
RS.MoveNext 
End If%>
</td>
<td>
<% If Trim(RS("Team")) = "OPS10" And not RS.EOF Then
Response.Write(RS("NumDocs")) 
RS.MoveNext
End If%>
</td>
<td>
<% If Trim(RS("Team")) = "OPS2" And not RS.EOF Then
Response.Write(RS("NumDocs")) 
RS.MoveNext 
End If%>
</td>
<td>
<% If Trim(RS("Team")) = "OPS3" And not RS.EOF Then
Response.Write(RS("NumDocs")) 
RS.MoveNext 
End If%>
</td>
<td>
<% If Trim(RS("Team")) = "OPS4" And not RS.EOF Then
Response.Write(RS("NumDocs")) 
RS.MoveNext 
End If%>
</td>
<td>
<% If Trim(RS("Team")) = "OPS5" And not RS.EOF Then
Response.Write(RS("NumDocs")) 
RS.MoveNext 
End If%>
</td>
<td>
<% If Trim(RS("Team")) = "OPS6" And not RS.EOF Then
Response.Write(RS("NumDocs")) 
RS.MoveNext 
End If%>
</td>
<td>
<% If Trim(RS("Team")) = "OPS7" And not RS.EOF Then
Response.Write(RS("NumDocs")) 
RS.MoveNext 
End If%>
</td>
<td>
<% If Trim(RS("Team")) = "OPS8" And Not RS.EOF Then
Response.Write(RS("NumDocs")) 
RS.MoveNext 
End If%>
</td>
<td>
<% If Trim(RS("Team")) = "OPS9" And Not RS.EOF Then
Response.Write(RS("NumDocs")) 
RS.MoveNext 
End If%>
</td>

标题行包含10个硬编码标题,OPS1、OPS10、OPS2等

上面填充OPS7列的部分很好,值“2”写入单元格。然后我在OPS8的下一列中得到一个错误-显然没有返回值,因为它只上升到OPS7。这就是为什么我在IF语句中添加了一个Not-EOF,但仍然得到了错误


有人可以帮忙吗?

您应该将RS.EOF移到IF语句中的第一个检查位置,例如,从此处开始

If Trim(RS("Team")) = "OPS9" And Not RS.EOF Then
对此

If Not RS.EOF Then
    If Trim(RS("Team")) = "OPS9" Then
        ... logic here ...
    End If
End If

问题在于,在经典asp中,
不是短路操作。

您应该将RS.EOF移动到IF语句中的第一个check,例如,从此处开始

If Trim(RS("Team")) = "OPS9" And Not RS.EOF Then
对此

If Not RS.EOF Then
    If Trim(RS("Team")) = "OPS9" Then
        ... logic here ...
    End If
End If

问题在于,在经典asp中,
不是短路操作。

不幸的是,没有与此代码相关的错误消息


80020009=访问EOF记录集的数据

不幸的是,没有与此代码相关的错误消息


80020009=访问EOF记录集的数据

我认为问题在于它在写入最后一条记录的NumDocs值后遇到的RS.MoveNext。它不喜欢这样一个事实,即即使下一条记录不存在,我仍试图移动下一条记录?@ben:Kane的想法是正确的,但没有意识到VB逻辑表达式不是捷径。当
Not RS.EOF
为false时,仍将尝试读取字段“Team”,这将生成错误。@Ben您必须编写两个if..then blocks:if Not RS.EOF then[新行]if Trim(RS(“Team”)=“OPS9”,然后…我曾考虑在同一if中创建一个新if,但它似乎不起作用。所以我所做的是,如果RS.EOF=True,那么Variable=“Nothing”ElseIf Trim(RS(“Team”))=“OPS9”,那么……它似乎起作用了。我想也许像Unix一样,它会在下一个if之前期待某种声明。如果againI认为问题是在写入最后一条记录的NumDocs值后遇到的RS.MoveNext,那么我将使用上面建议的解决方案,直接从那一条转到另一条。它不喜欢这样一个事实,即即使下一条记录不存在,我仍试图移动下一条记录?@ben:Kane的想法是正确的,但没有意识到VB逻辑表达式不是捷径。当
Not RS.EOF
为false时,仍将尝试读取字段“Team”,这将生成错误。@Ben您必须编写两个if..then blocks:if Not RS.EOF then[新行]if Trim(RS(“Team”)=“OPS9”,然后…我曾考虑在同一if中创建一个新if,但它似乎不起作用。所以我所做的是,如果RS.EOF=True,那么Variable=“Nothing”ElseIf Trim(RS(“Team”))=“OPS9”,那么……它似乎起作用了。我想也许像Unix一样,它会在下一个if之前期待某种声明。我会玩弄上面建议的解决方案,尽管从那时起我会直接去另一个