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
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 我不能肯定你怎么样,但是当基本的代码完成后,我对这个增强功能的过程很感兴趣,因为我知道,即使它们不能正常工作,我的基本代码部分是不受影响的。从这一点上来说,很难让这个程序样本保留这个样子而不去做那些增强工作。所以如果你有兴趣,随便怎么使用这个程序都可以。