ASP如何在数据库中进行定位输入?

来源:百度知道 编辑:UC知道 时间:2024/06/23 02:30:58
数据库构成请见图

相关代码如下:
a=5
set rst=server.CreateObject("adodb.recordset")
rst.open "select * from jbr where xm like '%甲%'",conn,1,3
rst.addnew
rst("tj")=a
rst.update

这段代码运行结果虽然在字段“tj”里写入数据,但不是在xm为“甲”的那行,该怎么修改程序?

还有,不知道在select语句中该如何正确表述字段“xm”中的内容,所以用了模糊搜索like '% %' ,若有好的方法麻烦一并修改
set rst=server.CreateObject("adodb.recordset")
rst.open "select * from jbr where xm = '甲'",conn,1,3
rst("tj")=a
rst.update

你的情况根本不叫数据库记录定位。而是从书上看的例子,不懂addnew是什么意思就开始写了!

rs.addnew意思是增加新行(记录),在新记录中写出数据,但这种增加只是在ASP服务端的一个事实不存在的表中增加的,而再用rs.update才能回传SQL服务或是数据服务上进行更新的。

所以一楼让你去掉addnew就可以了,但是这种情况你的注意的是,只会更新其中的一条记录,也就是说你的like '%甲%'若取出了多条记录时,只会更新第一条的。要想使用这种方法全部更新时则要利用循环让记录指针一点点的移动。但如果没有取到记录时会出错,因为更新是站在记录的基础上的。没有记录你怎么更新?所以完整的程序应该是这样:

if rs.bof and rs.eof then
'response.write "没有记录查找到"
else
'这里当然是查到记录了
while not rs.eof
rs(1) = "5"
rs.movenext
wend
end if
rs(1)是以索引号进行的索引,就是结果集中的第二个属性,当然也可以使用字段名进行索引的!

但如果你只取出一条记录或是两条记录还好,如果多了,这种程序运算的效率低下,这时可以考虑使用批处理。

sql = "update [表名] set [列名]=值 where 条件"如对应你的就是:
sql = "update [jbr] set tj=5 where xm like '%甲%'"
然后让链接执行一次就可以了:
conn execute sql
这样就没有任何问题了,但这种是一种向数据库下命令的方式,也就是批量的进行修改,只要你的xm中含有"甲"字的记录都是修改,而不是一条的。

删除 rst.addnew 不要。

简单些:
<%
a=5
conn.ex