asp学生论坛bbs设计毕业论文(开题报告+源代码) 第15页
Cmd("@tl")=limitime
End If
set Rs=Cmd.Execute
Else
Set Rs = server.CreateObject ("adodb.recordset")
If Cint(TopicMode)=0 Then
Sql="Select TopicID,boardid,title,postusername,postuserid,dateandtime,child,hits,votetotal,
lastpost,lastposttime,istop,isvote,isbest,locktopic,Expression,TopicMode,Mode From Dv_Topic
Where BoardID="&Mybbs.BoardID&" And IsTop=0 Order By LastPostTime Desc"
End If
Rs.Open Sql,Conn,1,1
End If
Mybbs.SqlQueryNum = Mybbs.SqlQueryNum + 1
If Not (Rs.Eof And Rs.Bof) Then
If IsSqlDatabase = 1 And IsBuss=1 Then
SQL=Rs.GetRows(-1)
Else
If TopicNum Mod Cint(Mybbs.Board_Setting(27))=0 Then
n = TopicNum \ Cint(Mybbs.Board_Setting(27))
Else
n = TopicNum \ Cint(Mybbs.Board_Setting(27))+1
End If
Rs.MoveFirst
If page > n Then page = n
If page < 1 Then page = 1
If page >1 Then
Rs.Move (page-1) * Clng(Mybbs.Board_Setting(26))
End if
If Rs.Eof Then Exit Function
SQL=Rs.GetRows(Mybbs.Board_Setting(26))
End If
'TopicID,boardid,title,postusername,postuserid,dateandtime,child,hits,votetotal,lastpost,lastpostti
me,istop,isvote,isbest,locktopic,Expression,TopicMode,Mode
Dim Showtitle,postusername
With Response
For ti=0 To Ubound(SQL,2)
‘显示帖子部分省略
Next
SplitPageNum=Ubound(SQL,2)+1
SQL=Null
If TopicNum Mod Cint(SplitPageNum)=0 Then
n = TopicNum \ Cint(SplitPageNum)
Else
n = TopicNum \ Cint(SplitPageNum)+1
End If
If action="batch" And Mybbs.GroupSetting(45)=1 Then
Dim Forum_Boards,Board_Datas,BoardJumpList,ii,Depth
Forum_Boards=Split(Mybbs.CacheData(27,0),",")
‘显示部分省略
End If
If Forum_AllTopNum = 0 And ti = 0 Then Response.Write template.html(4)
SQL=Null
Rs.Close
Set Rs=Nothing
Set Cmd=Nothing
End Function
看<% Set Cmd = Server.CreateObject("ADODB.Command") %>一句,这里用到了ADODB的Command对象,定义要对数据源执行的特殊命令,使用Command对象查询数据库并返回Recordset对象中的记录,以便执行大量的操作或对数据库结构进行操作。
为了提高页面的读取速度,帖子一般不会在一页里罗列出来,而是采用分页显示,让每页显示一定的帖子数。论坛的分页显示主要有两种方法,一种是将数据库中所有符合查询条件的记录一次性读入Recordset中,并存放在内存中,然后通过ADO Recordset对象所提供的几个专门支持分页处理的属性来管理分页处理;另一种方法是根据客户的指示,每次分别从符合查询条件的记录中将规定数目的记录读出显示。两种方法的区别在于前者要把所有记录都读入内存,如果记录很多的话,效率会比较低;而后者是先根据指示做判断再读入符合条件的一定数目的记录进内存,但如果访问人数多时,会造成很大负担。因为在一般情况下效率相差不大,而第一种方法更容易实现,所以一般采取第一种方法。在第一种方法中,进行ADO存取数据库时的分页显示,其实就是对Recordset的记录进行操作。Recordset对象表示基本表或命令执行结果的记录全集。任何时候Recordset都只将集合中的单个记录作为当前的记录引用。使用ADO时,将几乎全部使用Recordset对象来对数据进行操作。
4.3.3 帖子搜索模块
如果论坛的的帖子数据量比较大的时候,用帖子列表的方式来人为的寻找某帖子显然是很浪费时间的,这时要用到帖子搜索的功能。搜索最重要的是效率,这时就需要设计搜索需要的条件,使搜索达到最大效率。如图4-1。
图4-1 帖子的搜索
在图4-1里能看出,帖子的搜索,首先是有两种搜索方式,搜索作者或搜索主题的关键字。过滤的条件是三个,论坛版块、帖子日期和帖子所在数据表(如果帖子数量大的话,是可以分不同数据表储存的)。有了这些条件可以增加搜索的效率。搜索肯定要用到SQL的Select语句,那么关键就是ASP是如何操作SQL语句的。见程序4-10。
程序4-10 帖子搜索程序(Query.asp)
Dim SearchUserID,Rs
SqlColumn = "Select Top " & Cint(Mybbs.Forum_Setting(11))*SearchMaxPageList
If stype=1 And (nSearch=2 or nSearch=3) Then
SqlColumn = SqlColumn & " BoardID,RootID,Topic,Expression,UserName,PostUserID,
DateAndTime,IsBest,LockTopic,Body,AnnounceID From "
ElseIf stype=2 And pSearch=2 Then
If IsSqlDataBase Then
SqlColumn = SqlColumn & " T1.BoardID,T1.RootID,T1.Topic,T1.Expression,
T1.UserName,T1.PostUserID,T1.DateAndTime,T1.IsBest,T1.LockTopic,
T1.Body,T1.AnnounceID From "
Else
SqlColumn = SqlColumn & " BoardID,RootID,Topic,Expression,UserName,
PostUserID,DateAndTime,IsBest,LockTopic,Body,AnnounceID From "
End If
ElseIf stype=3 Then
SqlColumn = "Select Top 50 BoardID,TopicID,Title,Expression,PostUserName,PostUserID,
DateAndtime,IsBest,LockTopic From "
SqlColumn = "Select Top 50 BoardID,rootid,topic,Expression,username,postuserid,
dateandtime,IsBest,LockTopic,Body,Announceid from "
Else
SqlColumn = SqlColumn & " BoardID,TopicID,Title,Expression,PostUserName,
PostUserID,DateAndtime,IsBest,LockTopic From "
End If
'Mybbs.Stats = template.Strings(2)
Mybbs.Stats = template.Strings(4)
<< 上一页 [11] [12] [13] [14] [15] [16] [17] [18] 下一页