+ -
当前位置:首页 → 问答吧 → 帮忙看下这个分页为什么生成的数据是乱的呢?

帮忙看下这个分页为什么生成的数据是乱的呢?

时间:2011-10-21

来源:互联网

VBScript code


<%@LANGUAGE="VBscript" CODEPAGE=65001%>
<%Option Explicit
Response.Charset="UTF-8"
Response.Buffer=True
Session.CodePage=65001
'----------------------------------------------------------------------------------
'本页:
'   列表生成处理页面
'说明:
'Last Modify By Luzhu(TsysChina.Net)
'----------------------------------------------------------------------------------
%>
<!--#include file="inc/Config.class.asp"-->
<!--#include file="inc/DBControl.class.asp"-->
<!--#include file="inc/FunctionLib.class.asp"-->
<!--#include file="inc/Manager.class.asp"-->
<!--#include file="inc/TagParser.class.asp"-->
<%
Dim Cfg, Db, FLib, Admin, Fso, TParser
    Dim ProgramStart, TotalNum, FinishedNum, CurrPage, PageSize
        ProgramStart = Timer
        TotalNum = 0
        FinishedNum = 0
Set Cfg = New Config
Set Db = New DBControl
Set FLib = New FunctionLib
Set Admin = New Manager
Set Fso = Server.CreateObject(Cfg.FileSystemObject_Name)
Set TParser = New TagParser


If Not Admin.Logined Then
    FLib.Alert "对不起,你已经超时或未登录","./",1
    Response.End
End If

If Not Admin.CheckPopedom("TSYS_GROUP4_CREATE") Then
    FLib.Alert "权限不足", "BACK", 0
    Response.End
ENd If

Db.Open()

Dim Work
    Work = Request("Work")

'选择执行操作
Select Case Work
    Case "Create" :
        StartCreate()
    Case Else
End Select

Function StartCreate()
    Dim class_list, allpage, MyclassArray, I, Rs, sql
        class_list = FLib.SafeSql(Request("class_list"))
        allpage = FLib.SafeSql(Request("allpage"))
    If class_list = "0" Then
    class_list=""
    Sql = ExeSql(3)
    Set Rs = Db.ExeCute(Sql)
    While Not Rs.Eof
        class_list = class_list & "," & Rs("ClassID")
        Rs.MoveNext
    Wend
        class_list= Mid(class_list,2)
    Rs.Close
    Set Rs = Nothing
    End If

        MyclassArray= Split(class_list,",")
        For I=0 To UBound(MyclassArray)
            CreateList MyclassArray(I), allpage
        Next

    FLib.Alert "生成完毕,本次生成共花费(" & (Timer - ProgramStart) & ")秒,详细:\n1.符合生成条件数:" & TotalNum & "\n2.实际生成成功数:" & FinishedNum & "\n3.本次生成失败数:" & (TotalNum-FinishedNum) & "\n---------------------------------------------------------------\n                             生成时间:" & NOW() , "BACK", 0
    Response.End
End Function

Function CreateList(class_id, allpage)
    Dim PageCount, TotalResNum, list_path, list_name, real_list_path, template_path, class_title, listfile_name, class_url, CreatedPage
    Dim Rs, Sql, TempContent
    Dim sqlWhere, sqlTemp



    '取得列表模板和生成列表路径
    Sql = ExeSql(2)
        sqlWhere = "A.ClassID IN (" & class_id & ") "
        Sql = Replace(Sql, "{sqlWhere}", sqlWhere)

        
    Set Rs = Db.ExeCute(Sql)
    list_path= Rs("ListPathRule")
    list_name= Rs("ListNameRule")
    PageSize= Rs("ListNum")
    template_path= Rs("Path")
    class_title= Rs("Title")
    CreatedPage= Rs("CreatedPage")
    class_url = list_path & "/" & list_name
    Rs.Close

        If FLib.ChkPathType(list_path) = 2 Then
            real_list_path = Server.MapPath(list_path)
        Else
            real_list_path = Replace(list_path, "/", "\")
        End If

        If Not Fso.FolderExists(real_list_path) Then
            FLib.CreateFolder real_list_path
        End If

    '取得数据的数目
    Sql = ExeSql(0)
    If class_id <> "0" Then
        sqlWhere = "Class IN (" & class_id & ") AND Checked=True AND Deleted=False AND Created=True "
    End If
    Sql = Replace(Sql, "{sqlWhere}", sqlWhere)

    
    Set Rs = Db.ExeCute(Sql)
    TotalResNum = Rs(0)
        PageCount=Int((TotalResNum-1) / PageSize)+1
    Rs.Close

    For CurrPage=1 To PageCount

    Sql = ExeSql(1)
        If class_id <> "0" Then
            sqlWhere = "Class IN (" & class_id & ") AND A.Checked=True AND A.Deleted=False AND A.Created=True "
        End If
        Sql = Replace(Sql, "{sqlWhere}", sqlWhere)
        
        Response.Write(Sql)
        
    Set Rs = Db.CreateRS()

    Rs.PageSize = PageSize
    Rs.CacheSize = Rs.PageSize
    Rs.Open Sql, Db.Conn, 1, 1

    If Not(Rs.Eof And Rs.Bof) Then
        Rs.AbsolutePage = CurrPage
    End If

            TotalNum =  TotalNum + 1
            TempContent = FLib.ReadFromTextFile(template_path,Cfg.CharsetStr)
            TempContent = TParser.ListParser(class_id, class_title, class_url, PageSize, TotalResNum, PageCount, CurrPage, TempContent, Rs)

        If CurrPage = 1 Then 
        listfile_name = Replace(list_name, "{i}", "")
        Else
        listfile_name = Replace(list_name, "{i}", CurrPage)
        End If 

        If CreateRes(real_list_path & "\" & listfile_name, TempContent) = 1 Then
            FinishedNum = FinishedNum + 1
        End If
    Next
    Set Rs = Nothing

End Function

Function ExeSql(m)
    Dim Sql
    If m = 0 Then
        Sql = "SELECT COUNT(*) FROM " & Cfg.DataBase_Pre & "ArticleList WHERE {sqlWhere}"
    Elseif m = 1 Then
        Sql = "SELECT TOP " & (CurrPage * PageSize) & " A.*, B.ClassID, B.Title AS ClassTitle FROM " & Cfg.DataBase_Pre & "ArticleList AS A INNER JOIN  " & Cfg.DataBase_Pre & "Class AS B ON A.Class = B.ClassID  WHERE {sqlWhere} ORDER BY A.ArticleID DESC"
    Elseif m = 11 Then
        Sql = "SELECT TOP " &  ((CurrPage+1) * PageSize) & " A.*, B.ClassID, B.Title AS ClassTitle FROM " & Cfg.DataBase_Pre & "ArticleList AS A INNER JOIN  " & Cfg.DataBase_Pre & "Class AS B ON A.Class = B.ClassID  WHERE {sqlWhere} ORDER BY A.ArticleID DESC"
    Elseif m = 2 Then
        Sql = "SELECT A.*, B.Path FROM " & Cfg.DataBase_Pre & "Class A LEFT JOIN " & Cfg.DataBase_Pre & "Template B ON A.ListTemplate=B.TemplateID WHERE {sqlWhere} "
    Else
        Sql = "SELECT * FROM " & Cfg.DataBase_Pre & "Class"
    End If
    
        '输出 SQL
    Response.Write(Sql)
    
    ExeSql = Sql
    
    
End Function

    '方法:创建列表(主方法)
    '参数:
    '   path           生成列表文件路径
    '   TempContent    资源所将要套用的模板内容
    '返回:
    '   0   生成失败
    '   1   生成成功

Function CreateRes(path, TempContent)
        FLib.WriteToTextFile path, TempContent, Cfg.CharsetStr
        If Err.Number = 0 Then
            CreateRes = 1
        Else
            CreateRes = 0
        End If
        Err.Clear()
End Function
    
%>




作者: rebelboy   发布时间: 2011-10-21

太长。而且你说的是乱序还是乱码都不清楚。

你可以找一个好使的分页函数去用。任何的CMS里都有。

作者: theforever   发布时间: 2011-10-22

没有把问题说清楚啊……

作者: lijpwsw   发布时间: 2011-10-22