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页面的设计,缩短了软件开发周期。
----
以下两图显示的是教师(教务)查询成绩和显示查询结果的页面: