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頁面的設計,縮短了軟件開發周期。 ---- 以下兩圖顯示的是教師(教務)查詢成績和顯示查詢結果的頁面: