数据库重复入库问题

doseed 2009-06-05 07:12:29
先说一下问题.我这个是做电影站的。move页是电影的列表页,也就是有电影名称,图片,并有连到播放页地址的那一页。

原本我有进行重复入库的判断,只要是标题一样的。就不入库。不一样的才入库。。。

但问题出现了,那就是比如
传说中的七公主(20)集
这是第一次采的标题。存入数据库。入库后,如果我再采。。就会判断数据已存在不会在入库了。
过了几天出了.
传说中的七公主(21)集
这时。。进行入库操作。。。
结果发现入库是入库了。。但是变成入新的ID了。也就是说不是修改原来那一条传说中的七公主(20)集的ID。而是重新生成一个ID。变成数据库里有两个 传说中的七公主 一个20集,一个21集。。。。

为了解决这个办法。。。。

我又多写了个字段ypmc,也就是影片名称。这个字段只采名字,就是比如传说中的七公主(20)集这个内容。只采传说中的七公主这几个字。原来采全传说中的七公主(20)集这个字段是name
我的想法是先判断数据库move这个表里的ypmc,查一查采集的内容在数据库里有没有,如果没有就行更新。如果有,那再判断name 是否等于采集内容的标题,如果等于。。那就判断数据已存,如果不等于,那就进行修改。好了下面把代码发出来。大家帮我看看是哪里写错了。先谢了。

dim pass
pass=0
sql1="select * from move where ypmc='"&title&"'" ‘这里的title是采集的变量名
set rs1=conn.execute(sql1)
if rs1.eof and rs1("ypmc")="" then '如果为空,就准备全新入库

感觉应该是上面这句有问题

pass=1

else '相等,那就修改入库
pass=2
end if

rs1.close
set rs1=nothing

sql="select * from move"
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,3


if pass=2 then
if rs.eof and rs("name")<>"&name&" then '不等于标题
上面这句可能也有错,还有下面这句修改入库不知怎么写

sql="update move set name='"&name&"' where ypmc='"&title&"'" '进行修改标题
set rs=conn.execute(sql)
response.write "重新更新了"&name&"" &vbcrlf
response.Flush
end if
end if


if pass=1 then
rs.addnew
'添加新记录
rs("name") = name '标题
rs("ypmc") = title '影片名称
rs.update

'更新数据库
rs.close
set rs=nothing

response.write ""&name&"-开始入库" &vbcrlf
response.Flush
end if
...全文
212 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
doseed 2009-06-05
  • 打赏
  • 举报
回复
哈哈10楼说的没错。我刚刚也是改了这个就行了。。回来想给分。。想不到你也答了哈。
郭大侠_ 2009-06-05
  • 打赏
  • 举报
回复
if rs("name") <>"&name&" then '不等于标题
改为
if rs("name") <>name then '不等于标题

哪有这么写的?
doseed 2009-06-05
  • 打赏
  • 举报
回复
按6楼的方法进行了修改。。。

结果全都只执行了这句
if rs("name") <>"&name&" then '不等于标题
上面这句可能也有错,还有下面这句修改入库不知怎么写
rs("name") = name
rs.update
response.write "重新更新了"&name&"" &vbcrlf
response.Flush
end if

不知哪里出问题了。。判断的竟然都是不等于name....
doseed 2009-06-05
  • 打赏
  • 举报
回复
谢谢。我先试试。
郭大侠_ 2009-06-05
  • 打赏
  • 举报
回复
if rs1.eof and rs1("ypmc")="" then '如果为空,就准备全新入库
if rs.eof and rs("name") <>"&name&" then '不等于标题

别的我没细看,这两句的有问题
分析这一句 if rs1.eof and rs1("ypmc")="" then
当 rs1.eof 条件成立时,引用 rs1("ypmc") 就会出错,你的程序中应该有 on error resume next 把,你把这个注释掉就能看出来
第二句有同样的问题,一般分开判断
if rs1.eof then
'既然 rs1 在记录尾部,就别引用rs1的字段了
end if
ncluj 2009-06-05
  • 打赏
  • 举报
回复



dim pass
pass=1 '默认全新入库
sql1="select * from move where ypmc='"& title& "'" '这里的title是采集的变量名
set rs1=conn.execute(sql1)
if Not rs1.eof then '如果不为空,就修改
pass=2
end if
'原语句 如果rs1是eof,则取rs1("ypmc")会出错,因为记录不存在。这段建议用select count(id)来做,效率更好一些。拼接sql的时候,注意防注入

rs1.close
set rs1=nothing




sql="select * from move where ypmc='"& title& "'"
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,3

if pass=2 then

if rs("name") <>"&name&" then '不等于标题
上面这句可能也有错,还有下面这句修改入库不知怎么写
rs("name") = name
rs.update
response.write "重新更新了"&name&"" &vbcrlf
response.Flush
end if
end if


if pass=1 then
rs.addnew
'添加新记录
rs("name") = name '标题
rs("ypmc") = title '影片名称
rs.update

'更新数据库
rs.close
set rs=nothing

response.write ""&name&"-开始入库" &vbcrlf
response.Flush
end if


doseed 2009-06-05
  • 打赏
  • 举报
回复
在线等。。。会的帮下忙。谢谢
doseed 2009-06-05
  • 打赏
  • 举报
回复
一个放名称一个放集数。。。
这样行是行。。可是我不清楚。。怎么修改这个。。。

比如在MOVE表里。。。存个放集数的字段。。。

那这时21集出来了。。
那么这个字段还是要修改。。。
用什么代码进行这个字段的修改?

而且我电影已经更新上千集了。。如果用你这个方法。。我要把数据全删了重新采集才行。。。。
所以最好能有别的办法。。。

如果没有。。那用这个办法也是可以的。。但也不知怎么修改。。你能说清楚一下吗。谢谢
doseed 2009-06-05
  • 打赏
  • 举报
回复
嗯。更准确来说应该是判断数据库是否重复,如果没有就进行全新入库,或修改原标题的问题


不过上面我给的这段代码没有判断数据库是否重复,因为我这个应该是不用判断重复的。。能发生的我都写好了。应该不用判断重复了
lzp4881 2009-06-05
  • 打赏
  • 举报
回复
你的数据库字段应该一个放影片名称:说中的七公主
一个放集数:20集

更新的时候先找影片名称,如果存在就更新集数,如果不存在,就插入新记录

28,409

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧