下等日柱就是命不好吗:高手救我!BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录

来源:百度文库 编辑:高校问答 时间:2024/05/03 02:58:02
<body>
<form id="form1" name="form1" method="POST" action="<%=MM_editAction%>">
<table width="300" border="1" align="center">
<tr>
<td width="94"> </td>
<td width="190"><a href="MainPage">返回</a></td>
</tr>
<% If Not rsmessage.EOF Or Not rsmessage.BOF Then %>
<tr>
<td><div align="center">信息编号</div></td>
<td><label>
<input name="txtID" type="text" id="txtID" value="<%=(rsMessage.Fields.Item("MsgID").Value)%>" />
</label></td>
</tr>
<tr>
<td><div align="center">信息标题</div></td>
<td><label>
<input name="txtTitle" type="text" id="txtTitle" value="<%=(rsMessage.Fields.Item("MsgTitle").Value)%>" />
</label></td>
</tr>
<tr>
<td><div align="center">信息内容</div></td>
<td><label>
<textarea name="textarea" rows="15"><%=(rsMessage.Fields.Item("MsgContant").Value)%></textarea>
</label></td>
</tr>
<tr>
<td><div align="center">信息日期</div></td>
<td><label>
<input name="txtDate" type="text" id="txtDate" value="<%=(rsMessage.Fields.Item("MsgDate").Value)%>" />
</label></td>
<% End If%>
</tr>
<tr>
<td><div align="center"></div></td>
<td><p>
<label>
<input type="submit" name="Submit" value="删除" />
</label>
</p> </td>
</tr>
<tr>
<td colspan="2"><div align="center">
<% If rsMessage.EOF And rsMessage.BOF Then %>
成功删除信息
<% End If ' end rsMessage.EOF And rsMessage.BOF %>
</div></td>
</tr>
</table>

<input type="hidden" name="MM_delete" value="form1">
<input type="hidden" name="MM_recordId" value="<%= rsMessage.Fields.Item("MsgID").Value %>">
</form>

</body>

这里老是报错:
错误类型:
ADODB.Field (0x800A0BCD)
BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
/testsite/DeleteDetailPage.asp, 第 163 行

高手帮帮忙啦!小弟感激不尽!

粗略一看,你的代码中确实存在记录集为空但仍然执行的漏洞,例如你的下面两句:
If Not rsmessage.EOF Or Not rsmessage.BOF Then 中的OR应该改为AND才行,后面的代码你自己检查一下看是否也存在这样的漏洞。

看来你需要了解一下EOF和BOF是干什么用的,我给你些资料你看看:

BOF指示当前记录的位置在 Recordset 对象的第一个记录之前。
EOF指示当前记录的位置在 Recordset 对象的最后一个记录之后。

使用 BOF 和 EOF 属性确定 Recordset 对象是否包含记录,或者从一个记录移动到另一个记录时是否超出 Recordset 对象的限制。
如果当前记录位于第一个记录之前,则 BOF 属性返回 True ()。
如果当前记录是第一个记录或位于第一个记录之后,则返回 False。
如果当前记录位于最后一个记录之后,则 EOF 属性返回 True。
如果当前记录是最后一个记录或位于最后一个记录之前,则返回False。
如果 BOF 或 EOF 属性为 True,则没有当前记录。

如果打开不包含记录的 Recordset 对象,则 BOF 和 EOF 属性被设置为 True,Recordset 对象的 RecordCount 属性设置为零。当打开至少包含一个记录的 Recordset 对象时,第一个记录是当前记录,并且 BOF 和 EOF 属性均为 False。

如果删除 Recordset 对象中保留的最后一个记录,BOF 和 EOF 属性将保持 False,直到重新定位当前记录为止。

if rs.eof and rs.bof then
Response.Write "无信息"
else
.......