”疚慕菔救绾未唇ㄒ桓鯝SP组件,用它搜索web站点的标题/描述数据库,并在浏览器画面上将URL连接作为标题列出。这就产生了一个与Microsoft的 Internet Explorer搜索相同的显示结果。将一些asp web 站点的标题、描述、URL存在一个样本数据库Access 中。web站点标题在画面上显示的是URL连接,并允许访问者在另一个画面内阅读站点。一个导航条允许将字符串查询结果的标题列表进行分页。
此表名为SearchTable,有四个定义域; ID、 Title 、 Text和 URL 。有一个唯一的初始域,随着每一个新增加的记录自动增加是个好办法。这就是我们的ID域,在代码中并没有真正地使用它。
Title(标题)域是一个255字符的文本域,存储web 站点的标题,查询成功后列出。
URL 域也是一个255字符的文本域,存储所引用站点的URL。
Text(正文)域的长度超出了文本域255个字符的限度,所以将其类型定义为Memo。Access Memo 类型和 SQL Server Text 类型的困难在于不要使用SQL 的LIKE 声明搜索它们内容的忠告。为了饶过这个问题,我们需要走额外的一步,将Memo 域的内容存储在一个字符串变量中,然后用访问者的查询字符串来搜索这一变量。
增加对Microsoft Active Server Pages Object Library 和Microsoft ActiveX Data Objects 2.0 Library 的引用。
声明类变量
有些读者要求本文涉及用属性程序设置主机ASP文件的服务器端ASP组件内的变量的解释和代码举例。熟悉VB面向对象编程的读者可以跳过这部分。在我们的类代码中,将模块级变量设置为Private ,提供Let 和 Get 属性程序将那些变量暴露给主机ASP文件。这将我们的变量装入类中,这样一来它们就只能被从头至尾执行属性程序的用户所设置。我们所要声明的第一组变量是用来保持ScriptingContext 对象变量的:
"~~~~~ Scripting Context Declarations
Private mobjScriptingContext As ScriptingContext
Private mobjRequest As Request
Private mobjResponse As Response
Private mobjServer As Server
在这个例子中我们改变了源文件和画面的值。我们还将在列表中显示的标题数从默认的5改为10。当我不能肯定什么样的设置对于一个程序的功能最好的时候,我就把选择的权利留给最终用户。属性程序就是做这个的。
所以我们声明6个私用变量,用来写Get和 Let 属性,并允许我们从主机ASP文件中设置这些变量。例子中另外一个变量是一个只对Get程序的ASP文件只读变量。
"~~~~~~ Let/Get Property Procedure Variables
Private mintMaxSearchReturn As Integer
Private mstrSearchFrameURL As String
Private mstrResultFrameURL As String
Private mstrSearchFrameName As String
Private mstrResultFrameName As String
"~~~~~~ Get Property Proceedure Variable
Private mintRecordsSearched As Integer
"~~~~~~ Modular Class Variable
Private mintSearchStart As Integer
变量初始化
尽管这些变量可以由外部设置(通过属性程序),我们还是希望替他们设置好默认值--以防没有机会在ASP文件中设置他们。这在类的初始化方法中完成:
Private Sub Class_Initialize()
"~~~~~ Set variables to default values
mintMaxSearchReturn = 5
mstrSearchFrameURL = "SearchPage.asp"
mstrResultFrameURL = "ResultPage.htm"
mstrSearchFrameName = "SearchFrame"
mstrResultFrameName = "ResultFrame"
为了让我们的代码能够利用ASP对象模块,光初始化变量是不够的,必须获取ASP对象。当容纳了我们组件的ASP页被访问浏览器打开时,OnStartPage 方法就被调用,这些ASP对象变量就被赋予ASP对象的值。
Public Sub OnStartPage(PassedScriptingContext As ScriptingContext)
"~~~~~ Set the ASP object variables to use in this class
Set mobjScriptingContext = PassedScriptingContext
Set mobjRequest = mobjScriptingContext.Request
Set mobjResponse = mobjScriptingContext.Response
Set mobjServer = mobjScriptingContext.Server
End Sub
作为一个好的程序员,当离开当前命令行外壳时要将这些对象设置为nothing。
Public Sub OnEndPage()
"~~~~~ Clean up in an instance
Set mobjScriptingContext = Nothing
Set mobjRequest = Nothing
Set mobjResponse = Nothing
Set mobjServer = Nothing
End Sub
Public Property Get MaxSearchReturn() As Integer
MaxSearchReturn = mintMaxSearchReturn
End Property
Public Property Let MaxSearchReturn(ByVal RHS As Integer)
If RHS >= 0 Then
mintMaxSearchReturn = RHS
End If
End Property
Public Property Get SearchFrameURL() As String
SearchFrameURL = mstrSearchFrameURL
End Property
Public Property Let SearchFrameURL(ByVal RHS As String)
mstrSearchFrameURL = RHS
End Property
Public Property Get ResultFrameURL() As String
ResultFrameURL = mstrResultFrameURL
End Property
Public Property Let ResultFrameURL(ByVal RHS As String)
mstrResultFrameURL = RHS
End Property
Public Property Get SearchFrameName() As String
SearchFrameName = mstrSearchFrameName
End Property
Public Property Let SearchFrameName(ByVal RHS As String)
mstrSearchFrameName = RHS
End Property
Public Property Get ResultFrameName() As String
ResultFrameName = mstrResultFrameName
End Property
Public Property Let ResultFrameName(ByVal RHS As String)
mstrResultFrameName = RHS
End Property
Public Property Get RecordsSearched() As String
RecordsSearched = mintRecordsSearched
End Property
注意通过仅仅提供Get 方法,我们从本质上创建了一个类以外的只读变量。
没有相关教程