日期:2014-05-16  浏览次数:20814 次

删除产品信息和删除文章时,除了删除数据库记录,怎么同时删除其中的附件
文章和产品信息都是放在news表内。
         1,文章是用编辑器写的,图片的路径信息和文章内容混合在一起,放在字段:cntnt 内,其物理存放路径随编辑器设置变动;
         2,产品信息的图片路径和文件名信息是放在pic1,pic2,pic3,pic4,pic5这五个字段内的,其中可以有空值(因为并不是每个产品都有5个图片),其物理存放路径基本是固定在一个大文件夹下的.

删除数据库记录很容易,一句rs.delete就行,可是如何才能同时删除这条数据库记录内的图片信息呢。
------解决方案--------------------
仅供参考:

<%
'前面数据库连接语句...
dim id,idlist,idarr,nid
if  isempty(trim(request("chkid"))) then '这里的chkid相当于你的文章或者产品id.
    response.write "<SCRIPT language=JavaScript>alert('非法请求,您未选择删除项!');"
    response.write"this.history.back(-1);></SCRIPT>" 
    response.end
else
idlist=trim(request("chkid")) '取得上一个页面传过来的待删除id值
 if instr(idlist,",")>0 then  'instr函数用于判断上一个页面传过来的id数量,其值大于0,就表示是批量选择
   idarr=split(idlist)       '构建id数组。
    for i = 0 to ubound(idarr)  '开始遍历,以id数组的最大个数为循环次数
     nid=cint((idarr(i)))
     call deleteannounce(nid)  '循环删除每个id值的新闻以及图片的函数。
   next
 else           '如果不是批量,只有一个id值,就表示只删除一笔
  call deleteannounce(idlist)  '直接调用删除函数。
 end if
end if 

 conn.close
 set conn=nothing

response.write "<SCRIPT language=JavaScript>alert('删除成功!');"
response.write"this.location.href='news_list.asp';</SCRIPT>" 
response.end

sub deleteannounce(did)    '用于删除数据(包括数据库记录和附件)的函数定义
 
dim rs,sql,picstr
set rs=server.createobject("adodb.recordset")
sql="select D_SavePathFileName from news where news_id="&did
rs.open sql,conn,1,1
picstr=rs("D_SavePathFileName")
rs.close
set rs=nothing
if picstr<>"" then
picstr=replace(picstr,"/","\")
Set FObject=Server.CreateObject("Scripting.FileSystemObject")'建立对象 
if instr(picstr,"
------解决方案--------------------
")>0 then  '如果是多张图片,就循环删除
dim picArr
picArr=split(picstr,"
------解决方案--------------------
")
for i=0 to ubound(picArr)
 
if Fobject.FileExists(Server.MapPath(picArr(i))) then '判断文件是否存在 
        Fobject.deleteFile server.mapPath(picArr(i)) 
end if 
next
else   '如果是单张图片,就直接判断删除。
if Fobject.FileExists(Server.MapPath(picstr)) then '判断文件是否存在 
        Fobject.deleteFile server.mapPath(picstr) 
end if 
end if
set FObject=nothing
 
end if
 
sql="delete from news where news_id="&(did)   '删除新闻的数据。
conn.execute sql
sql1="delete from newspl where ssnews="& did   '删除相关的评论。
conn.execute sql1
if err.Number<>0 then
err.clear
response.write "删 除 失 败 !<br>"
end if
End sub
conn.close
set conn=nothing
%>

------解决方案--------------------
再删