【 tulaoshi.com - ASP 】
                             
                               (转载计算机世界)
    夏长虹 童亮 陈文博 
    一. 应用实例的分析与开发     
    ---- 我们以学籍管理系统为背景,基于Windows DNA的思想,开发了一套应用系统。在该系统中,有关教务学籍的事务逻辑都是由定制COM组件来处理的,动态Web页面通过ASP脚本调用这些组件。系统在开发速度和软件质量等方面都优于不用COM组件而仅用ASP脚本的方案。为说明问题,我们通过一个定制组件和ASP脚本的主要代码简单介绍局部功能的实现过程。         
    ---- 在displayscore.asp页面中接受、辨别用户的查询请求,做出不同的查询处理。当客户的身份为教师或教务时,可以查询所有学生的成绩;当客户的身份为学生时,只能查询该生本人的成绩。         
    ---- 定制COM组件Score.dll进行查询处理。首先设计该组件的接口,为组件设置四个属性:     Subj(课程)、Term(课程所属学期)、Class(查询的班级)和Stu_No(查询学生的学号);定义两个方法:RequeryScores和RequeryAllScores,分别对教师、教务部门和学生的请求做出相应的处理,并将查询结果集返回给用户。         
    ---- 以下是实现该组件Score.dll的部分关键代码。从中我们可以看到组件的接口是如何实现的:         
    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" 
    &l