Option Explicit PRivate m_StuNo As Variant Private m_Subj As String Private m_Term As String Private m_Class As String ' 设置属性为可写入的 Public Property Let StuNo(ByVal vNewValue As Variant) m_StuNo = vNewValue End Property Public Property Let Subj(ByVal vNewValue As Variant) m_Subj = vNewValue End Property ...... ' 学生查询成绩请求处理 Public Function RequeryScores() As Object Dim objContext As MTxAS.ObjectContext Set objContext = GetObjectContext() ' 建立事务性组件 Dim ObjConn As ADODB.Connection ' 利用ADO访问数据库 Dim ObjRecordset As ADODB.Recordset Set ObjConn = New ADODB.Connection ObjConn.Open "xia", "sa", "" Set ObjRecordset = New ADODB.Recordset Dim query As String ' 根据查询要求(查询所有课程、查询特定学期的所有课程、 查询指定课程、查询特定学期的某一课程)进行不同的查询操作 If (m_Subj = "all" And m_Term <> "all") Then query="select Client_Name,Client.Client_No,Courses.subject, stu_score.score,stu_score.term,sub_type" query = query & " from client,stu_score,courses" query=query&"where client.client_no=stu_score.client_no and stu_score.subject=courses.subject and courses.term=stu_score.term and courses.term='" & m_Term & "' and Client.Client_no='" & m_StuNo & "'" End If ...... ObjRecordset.Open query, ObjConn ' 进行数据库查询 ObjContext.SetComplte ' 若事务成功完成,则提交该事务 RequeryScoresExit: Set RequeryScores = ObjRecordset ' 返回查询结果集 Exit Function RequeryScoresErr: Set RequeryScores=Nothing ' 事务失败处理 End Function ' 教师、教务查询成绩请求处理 Public Function RequeryAllScores() As Object ...... End Function ---- 在ASP页面displayscore.asp中引用组件,ASP代码如下(其中加粗的部分便是对该组件的调用): < %@ LANGUAGE="VBSCRipT" % > < HTML > < HEAD > < META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0" > < META HTTP-EQUIV="Content-Type" content="text/html; charset=gb_2312-80" > < TITLE >Show To Teacher< /TITLE > < /HEAD > < BODY background="images/bk.GIF" > < % dim objResult set objResult=Server.CreateObject("Display.Score") dim Term,Subject Term=Cstr(Request.Form("Term")) Subject=Cstr(Request.Form("Subject")) objResult.term=Request.Form("term") objResult.Subj=RequestForm("Subject") objresult.class=Request.Form("Class") dim Scores set Scores=objResult.RequeryAllScores % > ' 以下代码为显示处理的结果 < div align="center" >< center > ...... < table border="0" cellpadding="0" cellspacing="1" width="100" >< tr > < %For I = 0 To Scores.Fields.Count - 1% > < td bgcolor="#004080" > < strong >< font color="#FFFFFF" > < small > < %=scores(I).Name% >< /font > < /strong > < /td > < %NEXT Do While (Not Scores.EOF)% > < /tr >< tr > < % For I = 0 To Scores.Fields.Count - 1% > < td bgcolor="#ACE8F9" >< p align="center" > < %= Scores(I).Value% >< /td > < %Next Scores.MoveNext% >< /tr > < %Loop% > < %Scores.close ' 关闭数据库连接 set Scores=Nothing set objResult=Nothing % > ' 释放对象 < /table >< /center >< /div > < /BODY > < /HTML > ---- 可以想象,如果仅使用ASP脚本进行业务处理就会使ASP页面中代码十分臃肿、晦涩。而使用组件的方案也较单纯的ASP脚本执行速度速度快。并且可以将整个查询处理作为一个事务,保证数据库信息的安全、完整。将该组件在MTS中注册,又可避免多用户访问该主页时可能造成的网络拥塞。实际应用中,学生和教师的使用权限是不同的。在学生查询成绩的页面中,可重用该组件,只是调用其不同的接口而已。仅使用ASP脚本进行业务处理,则需重新编写与displayscore.asp类似的、同样烦琐的代码。在开发过程中,不同的开发人员可各尽所能,同时进行组件和ASP页面的设计,缩短了软件开发周期。 ---- 以下两图显示的是教师(教务)查询成绩和显示查询结果的页面: