难道 if rs.eof and rs.bof then 和 if rs.bof and rs.eof then 不相等?!
我有一段代码如下:
rs.open strsql,strcn
if rs.bof and rs.eof then
A
else
B
end if
当我的 rs.recordcount<>0 时却执行了A处的代码!
而我将判断改为:
if rs.eof and rs.bof then
A
else
B
end if
时,相同条件下却执行的是B处的代码!
难道 if rs.eof and rs.bof then 和 if rs.bof and rs.eof then 不相等?!
微软在MSDN98中不是提到可以用判断rs.eof 和 rs.bof 是否指向相同来判断结果集是否为空吗?
问题点数:20、回复次数:24Top
1 楼chinareny(编程浪子)回复于 2002-04-15 18:59:24 得分 0
怎么没人说话啊!Top
2 楼babyt(阿泰)回复于 2002-04-15 19:40:30 得分 0
你得到的rs.recordcount是不是等于-1啊?Top
3 楼zhuoren1(allok)回复于 2002-04-15 19:41:38 得分 0
我测试了一下,没发现你说得毛病,用下面的代码试一下
if rs.EOF then
Response.Write "eof<br>"
end if
if rs.BOF then
Response.Write "bof<br>"
end if
if rs.EOF and rs.BOF then
Response.Write "eof-bof<br>"
end if
if rs.EOF and rs.BOF then
Response.Write "eof-bof-1<br>"
else
Response.Write "eof-bof-2"
end if
if rs.EOF and rs.BOF then
Response.Write "bof-eof-1<br>"
else
Response.Write "bof-eof-2<br>"
end if
Response.Write rs.RecordCountTop
4 楼chinareny(编程浪子)回复于 2002-04-15 20:17:23 得分 0
我得到的recordcount不是等于-1
我试着换了rs.open参数,当结果等于-1时也是那样!
有人可以从结果集和游标方面进行一下说明吗?Top
5 楼zoze1026(木鱼)回复于 2002-04-15 22:15:18 得分 0
你执行了几遍?
我想还是要从数据库和sql语句上查问题,因为if 的条件只有 “真” 或 “假” 两个可能,一会儿真,一会儿假,不可能是条件本身的问题。Top
6 楼MeXP(秦汉风)回复于 2002-04-15 23:43:40 得分 0
我想改为这样就相等吧(也许是瞎猜)
if ((rs.eof) and (rs.bof)) then=if ((rs.bof) and (rs.eof)) thenTop
7 楼chinareny(编程浪子)回复于 2002-04-16 20:48:23 得分 0
我不是说一会儿真,一会儿假
而是如果用第一种方法的时候始终是不行的!
没有人可以帮我吗?Top
8 楼eshao(MrXie)回复于 2002-04-16 20:58:56 得分 0
bof是指rs在第一个纪录
eof是指纪录在最后一个纪录,表示为空
Top
9 楼chinareny(编程浪子)回复于 2002-04-16 21:05:54 得分 0
这个我知道啊!
我的问题是我的前后两个判断我认为应该是实现同样的功能!
可是在实际应用中却出现了不同的走向?
我想知道程序在作这个判断的时候到底是怎样进行的?
谢谢
Top
10 楼MeXP(秦汉风)回复于 2002-04-16 21:10:29 得分 0
我也认为是同样的,不加括号的判断有时不准,我曾遇到过,你先试试加上括号的
if ((rs.eof) and (rs.bof)) then=if ((rs.bof) and (rs.eof)) then
Top
11 楼eshao(MrXie)回复于 2002-04-16 21:13:09 得分 0
现在我在网吧,没办法做
回去以后才能做,不好意思Top
12 楼chinareny(编程浪子)回复于 2002-04-16 21:18:22 得分 0
不用这么客气,大家共同探讨嘛!我刚起步!Top
13 楼Random(随便)回复于 2002-04-16 21:37:37 得分 0
如果你两次在执行判断之前记录集的状态完全一样,从逻辑上分析是不可能的。Top
14 楼MeXP(秦汉风)回复于 2002-04-16 21:41:39 得分 12
我刚用interdev调试 “单步” 跟踪过你的代码,很遗憾,输出为bb,代码如下:
<%
set conn=Server.CreateObject("adodb.connection")
set rs=Server.CreateObject("adodb.recordset")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&server.mappath("test.mdb")
conn.Open connstr
sql="select id from test"
rs.Open sql,conn,3,3
%>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<%
if rs.bof and rs.eof then
Response.Write "a"
else
Response.Write "b"
end if
if rs.eof and rs.bof then
Response.Write "a"
else
Response.Write "b"
end if
%>
</body>
</html>
win2000 pro
access 2000
mdac 2.6
interdev 6Top
15 楼MeXP(秦汉风)回复于 2002-04-16 21:44:03 得分 0
补充
数据库无纪录时输出aa
数据库有记录时输出bb
test.mdb中只有表test
表中只有一个字段idTop
16 楼skyarea(Feel)回复于 2002-04-16 22:49:38 得分 0
用
if rs.recordcount=0 then
A
else
B
end if
就不会有这样的问题了Top
17 楼BrightEye(男儿当自强,靠别人不如靠自己)回复于 2002-04-17 09:01:11 得分 0
to mexp(秦汉风):
<%
if rs.bof and rs.eof then
Response.Write "a1"
else
Response.Write "b1"
end if%>
<%
if rs.eof and rs.bof then
Response.Write "a2"
else
Response.Write "b2"
end if
%>
分别测试一下才能说明问题.你的测试好象没有意义啊!:)
Top
18 楼MeXP(秦汉风)回复于 2002-04-17 15:07:23 得分 0
to BrightEye(问个不休)
我只想说明if rs.eof and rs.bof then 和 if rs.bof and rs.eof then 是相等的相等的,并未出现作者的情况Top
19 楼julyclyde(Java初学(大学不教只好自己学))回复于 2002-04-17 19:09:04 得分 0
我也觉得应该是相等的
可能作者的计算机放的方向不对。改个方向试试?风水的事……Top
20 楼eshao(MrXie)回复于 2002-04-17 22:41:05 得分 8
回去测试了一下,没有提问者的情况!
mexp说的完全正确
ro.eof and rs.bof ==========rs.bof and rs.eofTop
21 楼julyclyde(Java初学(大学不教只好自己学))回复于 2002-04-18 13:24:27 得分 0
可能作者的计算机放的方向不对。改个方向试试?风水的事……
Top
22 楼zoze1026(木鱼)回复于 2002-04-18 15:28:42 得分 0
多多重起吧。Top
23 楼playmud((猪头流氓)(抵制日货)(热烈庆祝火箭输球))回复于 2002-04-18 16:17:20 得分 0
准确地说呢,是显示器放反了,以后大家要注意这个问题。Top
24 楼chinareny(编程浪子)回复于 2002-04-18 20:41:32 得分 0
哎!我也发现可能是风水不好!呵呵。
今天当我再次测试那个页面时,再也没有出现问题!
其实当时我也时不相信,因为微软的MSDN上也说是相等的!
不过很感谢大家这么关心!分马上就送出!Top




