转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
创建服务器端的ASP搜索组件(二)         ★★★★

创建服务器端的ASP搜索组件(二)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1405 更新时间:2009/4/23 10:26:51
BR>
下面我们移到下一个记录,重新开始:
"~~~~Move to next record
recSearch.MoveNext
Loop
End If
  因为这两个字符串数列是由引用传递的(VB的默认状态),在这个方法中所做的任何修改都会被保存。在结束之前,我们提交处理,关闭数据库连接,进行一些整理工作:
"------ Commit & Close
objConn.CommitTrans
objConn.Close
Set research = Nothing
Set objConn = Nothing
Set objCmd = Nothing

  最后要增加一个错误句柄,设置回到方法开头的方法:
Exit Function
ErrorCode:
objConn.RollbackTrans
strHTML = "Error in Accessing Database File< BR >< BR >"
strHTML = strHTML & "Search::GetRecords< BR >"
strHTML = strHTML & Err.Description & "< BR >"
strHTML = strHTML & strSQL
"~~~~~ Write the error message to the web page
mobjResponse.Write (strHTML)
"~~~~~ Send back a negative one to indicate that there was an error
GetRecords = -1
End Function

  在这里我们将数据库代码开始时的处理反转过来,向浏览器写一个HTML错误信息,然后返回一个-1,作为一个错误代码通知调用的方法有错误发生。

回到ShowSearchFrame 方法第三部分
  回到我们的调用方法,查看一下如果返回了-1,然后退出函数,如果是这种情况,-1就表明一个
数据库错误。不然的话,就转到其它方法。

Else
"[Search code here]
intRecordsSearched = GetRecords(strTitleArray(), strURLarray(), _
intRecordsDisplayed, intRecordsMatched)
"~~~~Exit of a database error occurred
If mintRecordsSearched = -1 Then Exit Function
End If
  现在确定至少返回了一个记录之后,就可以创建导航条了:
"~~~~Exit of a database error occurred
If intRecordsSearched = -1 Then Exit Function
"===== NARVIGATION BAR
If Not intRecordsDisplayed = 0 Then
strHTML = strHTML & NavigationBar(intRecordsMatched, _
intRecordsDisplayed) & "< BR >< BR >"
End If
End If
  这里我们调用了NavigationBar方法,该方法有两个自变量,保存与搜索查询字符串相匹配的记录数和标题、URL数列中的条目数。NavigationBar 方法返回一个字符串,其中是在浏览器上显示导航条的HTML代码。

NavigationBar 方法
  用这个方法生成组成导航条的三个独立部分。



  NavigationBar 方法有三个部分,每个用来生成上图的一部分。它接收匹配的记录数加上显示的记录数作为自变量:
Private Function NavigationBar(intRecordsMatched As Integer, _
intRecordsDisplayed As Integer)
Dim strHTML As String
  back按钮用来回到条目中的上一个列表。它发送一个查询字符串(Start) ,其中存储着上一个列表的第一条:
"~~~~Navigation Back
If mintSearchStart > 1 Then
strHTML = strHTML & "< A HREF=""" & mstrSearchFrameURL & "?Src=" & _
mobjServer.URLEncode(mobjRequest.QueryString("Src")) & _
"&Start=" & (mintSearchStart - (mintMaxSearchReturn)) & _
""" >back< /A > "
End If
  注意要被发送回组件包含在文本域中的搜索查询字符串编码为:
Server.URLEncode(mobjRequest.QueryString("Src"))
  如果不使用URLEncode ,浏览器就不能显示或发送有一定字符的查询字符串。
  然后需要计算列表中的条目数和找到了多少条目:
"~~~~~Naviagation numbers
strHTML = strHTML & " " & CStr(mintSearchStart) & "-" & _
mintSearchStart + (intRecordsDisplayed - 1) & " of " & _
CStr(intRecordsMatched) & " "

  next 按钮与 back按钮工作方法相同但方向相反:
"~~~~Navigation Next
If mintSearchStart + (intRecordsDisplayed - 1) < intRecordsMatched Then
strHTML = strHTML & " < A HREF=""" & mstrSearchFrameURL & "?Src=" & _
mobjServer.URLEncode(mobjRequest.QueryString("Src")) & _
"&Start=" & (mintSearchStart + intRecordsDisplayed) & _
""" >next< /A >"
End If

  最后将字符串自变量返回到调用代码中:
"~~~~Send Back the composed HTML code
NavigationBar = strHTML
End Function

回到ShowSearchFrame 方法第四部分
  最后我们要显示与查询字符串相匹配的URL的列表。这就需要调用我们的第四个私用方法ListRecords :
"===== Narvigation bar
If Not intRecordsDisplayed = 0 Then
strHTML = strHTML & NavigationBar(intRecordsMatched, _
intRecordsDisplayed) & "< BR >< BR >"
End If
"===== URL Title list
strHTML = strHTML & ListRecords(astrTitleArray(), astrURLarray(), _
intRecordsDisplayed)
End If

ListRecords 方法
  本方法接受两个字符串数列,以及它们保存的条目数作为自变量:
Private Function ListRecords(astrTitleArray() As String, _
astrURLArray() As String, _
intRecordsDisplayed As Integer)
Dim strHTML As String
Dim intCount As Integer

  首先要验证存在可以列出的条目,在格式化我们的HTML代码的时候在字符串数列中循环。在这种情况下,我们使用条目字符串作为可视文本,将URL字符串数列作为HREF 源:
If intRecordsDisplayed = 0 Then
"~~~~No records where found for this query
strHTML = strHTML & "Query not found"
Else
"~~~~List search titles with URL link results
For intCount = 1 to intRecordsDisplayed
strHTML = strHTML & "< A HREF=""" & astrURLarray(intCount) & """" _
& "TARGET=""" & mstrResultFrameName & """ >" & _
astrTitleArray(intCount) & "< /A >< BR >"
Next
End If

  注意以mstrResultFrameName 变量给TARGET 赋值。回想起来这个变量可以从ASP主机文件设置。它决定在哪个画面中显示HREF:
  然后所需要做的就是将HTML代码返回字符串变量中:
"~~~~~Send back HTML code of the Title/URL list
ListRecords = strHTML
End Function

回到ShowSearchFrame 方法第五部分
  实际上我们已经完成了这个方法,但是我还是想确保我们在同一页上,下面是本方法的完整清单:
Public Function ShowSearchFrame() As String
"~~~~~ Local variables
Dim strHTML As String
Dim astrTitleArray() As String
Dim astrURLArray() As String
Dim intRecordsDisplayed As Integer
Dim intRecordsMatched As Integer
"===== Search input field
strHTML = SearchInputField
If mobjRequest.QueryString("Src") = "" Then
"~~~~~ No query was entered
strHTML = strHTML & "Enter a query"
Else
"[Search code here]
mintRecordsSearched = GetRecords(astrTitleArray(), astrURLArray(), _
intRecordsDisplayed, intRecordsMatched)
"~~~~Exit of a database error occurred
If mintRecordsSearched = -1 Then Exit Function
"===== NARVIGATION BAR
If Not intRecordsDisplayed = 0 Then
strHTML = strHTML & NavigationBar(intRecordsMatched, _
intRecordsDisplayed) & "< BR >< BR >"
End If
"===== URL Title list
strHTML = strHTML & ListRecords(astrTitleArray(), astrURLArray(), _
intRecordsDisplayed)
End If
"~~~~~ Send html code to IIS for delivery to visitors browser
mobjResponse.Write (strHTML)
End Function
 这就是全部了。现在可以编译DLL,继续下一步了。

进一步超越基础

  我使这些代码尽可能地简单,只有几个数据库处理和属性程序这些必需的内容。但是为了增强代码功能,还有许多可以做。

  能够想到并且也很好玩的一个功能是缩短构成列表的标题。尽管将标题列表放在一个表格内可以改善可视界面,但是过长的标题会削弱列表的可读性。以下是进入ListRecords 方法缩短长标题的程序,它在标题结尾处加3个句号,表明它被删节了:
Dim strTemp As String
strTemp = strTitleArray(intCount)
If Not Trim(Len(strTemp)) = intListTitleMax Then
strTemp = Trim(Left(strTemp, intListTitleMax))
If Trim(Len(strTemp)) = intListTitleMax Then
strTemp = strTemp & "..."
End If
End If
  以上代码将标题中超过一定字符长度的部分切断。字符长度是intListTitleMax 的值。
  另外一个增加包括了在指针窗口中查看web 站点描述的选择。在一个非画面版本中,站点可以在一个空白浏览器中启动,以避免那些要求顶部画面的浏览器、用户粘贴新站点的能力、站点类别过滤、以字母或搜索的匹配程度为顺序进行列表等等。

在ASP下重新编译DLL

  当我们第一次将组件存为DLL文件时,VB创建文件并在系统上注册它时是没有问题的。但是在ASP页上使用过DLL对象之后,如果不完全关掉ASP系统的话,VB就不允许重新编译DLL。
  用Windows 9x 你可以关闭ASP、重新编译DLL并用以下指令启动ASP:
pws /sto p
pws /star t
在NT系统,用下列指令:
net stop iisadmin net start w3sv c
我不能肯定你怎么样,但是当基本的代码完成后,我对这个增强功能的过程很感兴趣,因为我知道,即使它们不能正常工作,我的基本代码部分是不受影响的。从这一点上来说,很难让这个程序样本保留这个样子而不去做那些增强工作。所以如果你有兴趣,随便怎么使用这个程序都可以。

点击本处下载本文相关链接。

上一页  [1] [2] 


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台