Chinapromoter Blog

生活, 艺术, 网络, 技术, 工业, 消费, 记录趣味生活的点点滴滴。

« 生成静态页出现undefined错误解决办法 - SXWO 目录脚本+FLASH 效果代码, 兼容IE和FF浏览器 »

修正编辑记录时程序效率低下问题 - SXWO 目录

在config_admin.asp 加入2个函数如下,目的的是在类别表,生成完整路径的地址,避免在修改具体记录时,重复大量的计算, 耗费服务器资源, 也影响程序执行效率。在类别表, 需要增加一个文本字段FullFolderName,长度是250。

'函数:单条类别记录生成完整路径的地址
function getfullfoldername(id)
    dim rootid,typeid,tmp
    if id=0 then
        tmp=""
        exit function
    end if
    rootid=conn.execute("select rootid from typelist where id="&id)(0)
    tmp=conn.execute("select typename from typelist where id="&id)(0)
    do while rootid<>0
        typeid=rootid
        rootid=conn.execute("select rootid from typelist where id="&rootid)(0)
        tmp=conn.execute("select typename from typelist where id="&typeid)(0)&">"&tmp
        if rootid=0 then exit do
    loop
    sql="update typelist set fullfoldername='"& tmp &"' where id=" & id
    conn.execute sql 
end function

'函数:全部类别记录生成完整路径的地址
function getAllfullfoldername()
    dim rootid,typeid,tmp
    rs.open "select id from typelist order by orderid desc,id",conn,1,1
    do while not rs.eof
        id=rs("id")
        rootid=conn.execute("select rootid from typelist where id="&id)(0)
        tmp=conn.execute("select typename from typelist where id="&id)(0)
        do while rootid<>0
            typeid=rootid
            rootid=conn.execute("select rootid from typelist where id="&rootid)(0)
            tmp=conn.execute("select typename from typelist where id="&typeid)(0)&">"&tmp
            if rootid=0 then exit do
        loop
        sql="update typelist set fullfoldername='"& tmp &"' where id=" & id
        conn.execute sql 
        rs.movenext
    loop
    rs.close

end function

创建createfullfoldername.asp,在类别表以前没有生成完整路径的网站, 调用函数getAllfullfoldername,执行生成。文件如下:

<!--#include file="config_admin.asp"-->
<%
call opendb(session(website&"_lang"))
set rs=server.createobject("adodb.recordset")

call getAllfullfoldername
%>
<body>
在TYPELIST表, 完整路径全面更新成功!
</body>

在edittype.asp,调用以上函数getfullfoldername, 生成完整路径的地址。

在行29, 对于新增类别,加入:

'新增类别生成完整路径
getfullfoldername conn.execute("select max(id) from typelist")(0)

修改后代码:

case "add"
    btypename=chkstr(request.form("btypename"),1,"Please insert type name")
    orderid=chknum(request.form("orderid"),"Index id must be a number")
    foldername=chkstr(request.form("foldername"),1,"Please insert type folder name")
    foldername=clearstr(foldername)
    description=request.form("description")
    isshow=request.form("isshow")
    conn.execute "insert into typelist(rootid,typename,foldername,description,orderid) values("&rootid&",'"&btypename&"','"&foldername&"','"&description&"',"&orderid&")"
    if isexistfolder(server.mappath(webpath(session(website&"_lang"))&getfolder(rootid)&foldername)) =false then call createfolder(server.mappath(webpath(session(website&"_lang"))&getfolder(rootid)&foldername))
    '新增类别生成完整路径
    getfullfoldername conn.execute("select max(id) from typelist")(0)

修改前代码:

   case "add"
    btypename=chkstr(request.form("btypename"),1,"Please insert type name")
    orderid=chknum(request.form("orderid"),"Index id must be a number")
    foldername=chkstr(request.form("foldername"),1,"Please insert type folder name")
    foldername=clearstr(foldername)
    description=request.form("description")
    isshow=request.form("isshow")
    conn.execute "insert into typelist(rootid,typename,foldername,description,orderid) values("&rootid&",'"&btypename&"','"&foldername&"','"&description&"',"&orderid&")"
    if isexistfolder(server.mappath(webpath(session(website&"_lang"))&getfolder(rootid)&foldername)) =false then call createfolder(server.mappath(webpath(session(website&"_lang"))&getfolder(rootid)&foldername))

在行45, 对于已经存在类别,加入:

'更新完整路径
getfullfoldername id

修改后代码:

   case "edit"
    id=chkstr(request.form("id"),1,"url error")
    btypename=chkstr(request.form("btypename"),1,"Please insert type name")
    orderid=chknum(request.form("orderid"),"Index id must be a number")
    description=request.form("description")
    foldername=chkstr(request.form("foldername"),1,"Please insert main type folder name")
    foldername=clearstr(foldername)
    rs.open "select * from typelist where id="&id,conn,1,1
    if lcase(rs("foldername"))<>lcase(foldername) then
         call movefolder(server.mappath(webpath(session(website&"_lang"))&getfolder(id)),server.mappath(webpath(session(website&"_lang"))&getfolder(rootid)&foldername))
    end if
    rs.close
    conn.execute "update typelist set typename='"&btypename&"',foldername='"&foldername&"',orderid="&orderid&",description='"&description&"' where id="&id
    if isexistfolder(server.mappath(webpath(session(website&"_lang"))&getfolder(id))) =false then call createfolder(server.mappath(webpath(session(website&"_lang"))&getfolder(id)))
    '更新完整路径
    getfullfoldername id

修改前代码:

case "edit"
    id=chkstr(request.form("id"),1,"url error")
    btypename=chkstr(request.form("btypename"),1,"Please insert type name")
    orderid=chknum(request.form("orderid"),"Index id must be a number")
    description=request.form("description")
    foldername=chkstr(request.form("foldername"),1,"Please insert main type folder name")
    foldername=clearstr(foldername)
    rs.open "select * from typelist where id="&id,conn,1,1
    if lcase(rs("foldername"))<>lcase(foldername) then
         call movefolder(server.mappath(webpath(session(website&"_lang"))&getfolder(id)),server.mappath(webpath(session(website&"_lang"))&getfolder(rootid)&foldername))
    end if
    rs.close
    conn.execute "update typelist set typename='"&btypename&"',foldername='"&foldername&"',orderid="&orderid&",description='"&description&"' where id="&id
    if isexistfolder(server.mappath(webpath(session(website&"_lang"))&getfolder(id))) =false then call createfolder(server.mappath(webpath(session(website&"_lang"))&getfolder(id)))

在editproduct.asp 的行95,修改取出完整路径的方法,本来是计算以后取得路径, 修改以后,直接从记录中取出,没有计算环节,如果有2000个类别,那么很可能有上百万的计算,大大提高程序效率:

修改以后代码:

              <select name="typeid">
                <%rs.open "select id,fullfoldername from typelist order by orderid desc,id",conn,1,1
     do while not rs.eof%>
                 <option value="<%=rs("id")%>" <%if cint(rs("id"))=cint(typeid) then response.write "selected"%>><%=(rs("fullfoldername"))%></option>
               <%rs.movenext
     loop
     rs.close%>
              </select>

原来代码:

              <select name="typeid">
                <%rs.open "select id from typelist order by orderid desc,id",conn,1,1
     do while not rs.eof%>
                <option value="<%=rs("id")%>" <%if cint(rs("id"))=cint(typeid) then response.write "selected"%>><%=getfoldername(rs("id"))%></option>
                <%rs.movenext
     loop
     rs.close%>
              </select>

这里调用的 函数getfoldername(id),经过复杂的处理和计算,得出路径,原理没有错,但耗费服务器资源,降低程序效率。

  • quote 1.小用户
  • 这样修改以后, 出现一个错误, 就是静态页面无法生成, 数据已经写入数据库, 也可以查到, 但是静态页面没有出现.
  • 2009-6-1 10:01:02 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表


Powered By Z-Blog 1.8 Spirit Build 80605

Copyright www.chinapromoter.cn. Some Rights Reserved. 浙ICP备05022498号