指定过滤器后,Recordset中的第一行将被删除

时间:2015-07-01 15:31:16

标签: vbscript ado

我知道一个事实,我用来填充下面的Recordset的查询返回我正在寻找的所有7行。但是,问题是第一行(PageId = 1)在指定应该包含该行的过滤器后立即被省略。

下面的ASP代码返回一个包含所有7行的表。

<%
    response.write "<table>" & vbNewLine
    do while not Rs.eof
        response.write "<tr><td>" & Rs.Fields("question").Value & "</td></tr>" & vbNewLine
        Rs.MoveNext
    loop
    response.write "</table>" & vbNewLine
 %>

在下面的ASP代码中,我在顶部添加了一个指定过滤器的新行。它仍然循环7次,但第一行现在是空白的。如果我在循环之前尝试Rs.MoveFirst,也会发生同样的事情。就好像第一行以某种方式被删除了,即使它应该符合过滤条件。

<%
    Rs.Filter="PageId <= 7"
    response.write "<table>" & vbNewLine
    do while not Rs.eof
        response.write "<tr><td>" & Rs.Fields("question").Value & "</td></tr>" & vbNewLine
        Rs.MoveNext
    loop
    response.write "</table>" & vbNewLine
%>

以下是我打开Recordset的代码:

Set cmd = Server.CreateObject("ADODB.Command")
DIM Rs
SET Rs = Server.CreateObject("ADODB.recordset")
cmd.ActiveConnection = conn
cmd.CommandText = "sp_getQuestions"
cmd.CommandType = 4
cmd.Parameters.Refresh
cmd.Parameters("@qID") = 545
Set Rs = cmd.Execute
Set cmd=nothing

1 个答案:

答案 0 :(得分:0)

对于常见记录集,您可以在之前和之后使用 Rs.RecordCount ,以确保您拥有相同数量的结果。您还可以使用 Rs.AbsolutePosition (从1开始)来确保您仍然在第一条记录上。当我对RS开始的地方有疑问或问题时,我使用 Rs.MoveFirst 来确保它在开头。

对于存储过程,您可以考虑使用.GetRows然后使用UBound(+1)进行计数...循环遍历结果数组以显示:

If NOT rs.EOF Then
    arrResultSet = rs.GetRows()
    arrRowCount = UBound(arrResultSet,2)
End If

我没有使用过这种方法,但看起来你可以保证更真实的结果。

希望这有帮助。