你想想,你的要求是sclass既不为空,又能等于某个变量,就有点冲突了,如果传递过来的cid是6,然而对应的6又是为空的,这个不就是逻辑错误了吗?达到这样的要求显然是一种思想错误。还有,你的sclass是一个文本字段吗?既然cid都是数值,何必又将sclass转换成字符串类型,然后再'"&cid&"'这样以字符串的形式比较呢?为什么不直接把sclass字段设置为数值类型,然后sql直接写sql="select * from news where sclass="&cid&" order by shijian desc"呢? “原有代码sql="select * from news where cstr(sclass)='"&cid&"' order by shijian desc",sclass字段获取变量与常量null冲突。”-----很明显传递过来的cid在数据库中没能查询到sclass对应的数值,出错是肯定的! “sql="select * from news where sclass is not null order by shijian desc"”-----------这句理所当然能查询到所有sclass不为空的记录 “sql="select * from news where sclass is not null and cstr(sclass)='"&cid&"' order by shijian desc"”---------显然还是犯了何第一条一样的错误,逻辑上有错误的,你给的条件,在程序中无法满足,也就是说只有当cid传递过来的数值在数据库中有的时候才能显示,但是前提是你现在数据库中没有这个sclass,它的值为空, ============解决办法、========== 加个on error resume next在网页头部试试,因为asp有时候有这样的错误,就是当你在以前已经拥有数据的数据库中新建了某个以前没有的字段,字段是建立起来了,而且新添加的记录里面也能往这个字段里面添加数据,但是当你查询以前的文章,由于以前没有这个字段,所以这个字段为空,不管你程序如何写,他都出错,有点类似你这个问题,要么就吧以前的数据这个为空的字段人工的一条条添加进去,要么就加on error resume next来容错处理,但是你的问题终将是因为数据库中sclass为空造成的,所以只能建议你这样写一个判断 Set rs =server.createobject("adodb.recordset") sql="select * from news where cstr(sclass)='"&cid&"' order by shijian desc"‘一定要去掉那句sclass is not null,因为这个是逻辑错误 rs.open sql,conn,1,1 if rs.eof then '按照上面的语句查询记录,如果这个条件下,没有查询到数据就提示 response.write "对不起,没有查询到数据,可能是sclass为空,或者传递过来的cid在数据库中根本不存在!" else .... end if 祝你成功,只能想到这样解决了!
1楼说的好多,但是问题我感觉出在cstr上,SQL首先对字段进行了处理,当巧合的是首先遇到了空值,所以我的意见是不在SQL语句中进行处理,比如说sclass的字段类型,如数值型,SQL语句这么写 ="select * from news where sclass="&val(cid)&" order by shijian desc" 这样就不存在对NULL进行的操作,可以避免这个错误!
展开全部
收起
热心网友回答时间:2023-04-27 23:47
在查询之间做个判断,这样就不用在sql语句中*了。 if not(isnull(cid) or cid="") then sql="select * from news where sclass="&cid&" order by shijian desc" end if