Public strCn As String
Public cn As New ADODB.Connection
Public strTmp As String
Public sc_dx As Double
Public sc_fx As Double
Public sc_tk As Double
Public sc_sum As Double
Public rsR As New ADODB.Recordset 
Private Sub Command1_Click()'按开始按钮,开始阅卷
With rsR
     com_dx (sc_dx) '调用判断单选成绩函数
     com_fx (sc_fx) '调用判断复选成绩函数
     com_tk (sc_tk) '调用判断填空成绩函数
     sc_sum = sc_dx + sc_fx + sc_tk  '总成绩等于各项成绩之和
     Set cn = New ADODB.Connection
     cn.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & "data source=" & App.Path & "\sysMain.mdb"
     cn.Open
     Set rsR = New ADODB.Recordset
        strTmp = "select * from 成绩表"
        rsR.Open strTmp, cn, adOpenStatic, adLockOptimistic
       .Find "学号=00001 " '找到学号为00001 的纪录
        If .EOF = False Then
            
    cn.Execute "update 成绩表 set 单选成绩=sc_dx,复选成绩=sc_fx,填空成绩=sc_tk,总成绩=sc_sum where 学号=00001"
       
    strTmp = "select 成绩表.学号 as 学号, 成绩表.姓名 as 姓名, 成绩表.单选成绩 as 单选成绩 ,成绩表.复选成绩 as 复选成绩,成绩表.填空成绩 as 填空成绩 ,成绩表.总成绩 as  总成绩 where 学号=00001"
     If .State = adStateOpen Then .Close
        .Open strTmp, cn, adOpenDynamic, adLockOptimistic        Set DataGrid1.DataSource = rsR
         DataGrid1.Refresh   '在DataGrid1显示学号,姓名,单选,复选,填空,总成绩
    Exit Sub
    
End If
End With
End If
End Sub
编译时没错误,可是点开始按钮什么都不出现。哪位高手指教我一下

解决方案 »

  1.   

    cn.Execute "update 成绩表 set 单选成绩=" & sc_dx & ",复选成绩=" & sc_fx & ",填空成绩=" & "sc_tk & ",总成绩=" & "sc_sum & "where 学号=00001"
      

  2.   

    strTmp = "select 成绩表.学号 as 学号, 成绩表.姓名 as 姓名, 成绩表.单选成绩 as 单选成绩 ,成绩表.复选成绩 as 复选成绩,成绩表.填空成绩 as 填空成绩 ,成绩表.总成绩 as  总成绩 where 学号=00001"上面少了 from 表名
    strTmp = "select 成绩表.学号 as 学号, 成绩表.姓名 as 姓名, 成绩表.单选成绩 as 单选成绩 ,成绩表.复选成绩 as 复选成绩,成绩表.填空成绩 as 填空成绩 ,成绩表.总成绩 as  总成绩 from tablename  where 学号=00001"
      

  3.   

    cn.Execute "update 成绩表 set 单选成绩=sc_dx,复选成绩=sc_fx,填空成绩=sc_tk,总成绩=sc_sum from 成绩表 where 学号=00001"
           
    strTmp = "select 成绩表.学号 as 学号, 成绩表.姓名 as 姓名, 成绩表.单选成绩 as 单选成绩 ,成绩表.复选成绩 as 复选成绩,成绩表.填空成绩 as 填空成绩 ,成绩表.总成绩 as  总成绩 from 成绩表 where 学号=00001"
      

  4.   

    没错,少from 表名,同意ljhdi()
      

  5.   

    cn.Execute "update 成绩表 set 单选成绩=sc_dx,复选成绩=sc_fx,填空成绩=sc_tk,总成绩=sc_sum where 学号=00001"
    这个也得改,按照CPLiu(老了)的方法
      

  6.   

    Private Sub Command1_Click()'按开始按钮,开始阅卷
        With rsR
            com_dx (sc_dx)
            com_fx (sc_fx)
            com_tk (sc_tk) 
            sc_sum = sc_dx + sc_fx + sc_tk
            Set cn = New ADODB.Connection
            cn.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & "data source=" &     
                                  App.Path & "\sysMain.mdb"
            cn.Open
            Set rsR = New ADODB.Recordset
            strTmp = "select * from 成绩表"
            .Open strTmp, cn, adOpenStatic, adLockOptimistic
            If .EOF = False Then            
                cn.Execute "update 成绩表 set 单选成绩=" & sc_dx & ",复选成绩=" & sc_fx & ",填
                           空成绩=" & sc_tk & ",总成绩=" & sc_sum & "where 学号=00001"   
                .update
                strTmp = "select 学号, 姓名,单选成绩,复选成绩,填空成绩,总成绩 from 成绩表
                         where 学号=00001"
                If .State = adStateOpen Then .Close
                    .Open strTmp, cn, adOpenDynamic, adLockOptimistic
                    Set DataGrid1.DataSource = rsR
                    DataGrid1.Refresh   '在DataGrid1显示学号,姓名,单选,复选,填空,总成绩
                    Exit Sub    
                End If
            End If
        End With
    End Sub
      

  7.   

    高手,还是不行,看看我的函数吧,应该没什么问题
    Public Function com_dx(sc_dx)  '单选题的判卷
        Dim strT As String
        On Error GoTo Errcom_dx
        ff = 0
        sc_dx = 0
        com_dx = False
        '打开数据库连接
        Set cn = New ADODB.Connection
        cn.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & "data source=" & App.Path & "\sysMain.mdb"
        cn.Open
        For i = 1 To 20                                        '判断20道单选题
            Set rsR = New ADODB.Recordset
            strTmp = "select 答案 from 答案表 where 题序号='" & i & " ' and 题型='单选'"
            rsR.Open strTmp, cn, adOpenStatic, adLockOptimistic
            '如果学生所选择的该题目答案存在,则把答案赋给st;否则st为空值
            If rsR.EOF = False Then
                st = Trim(rsR("答案"))
            Else
                st = ""
            End If
            rsR.Close        strTmp = "select 答案,分值 from 标准答案 where 题序号='" & i & " ' and 题型='单选'"
            rsR.Open strTmp, cn, adOpenDynamic, adLockOptimistic
            '如果标准答案中存在该题目的答案,则把标准答案赋给ss,把该题目的分值赋给strT;否则ss,strT都为空值
            If rsR.EOF = False Then
                ss = Trim(rsR("答案"))
                strT = rsR("分值")
            Else
                ss = ""
                strT = ""
            End If
            rsR.Close
            Set rsR = Nothing
            
            '计算该学生在该题所得的分数,并加到总分数sc_dx中
            sc = CDbl(strT)
            If st = ss Then
                ff = 1
            Else
                ff = 0
            End If
            sc_dx = sc_dx + ff * sc
        Next
        cn.Close
        Set cn = Nothing
        com_dx = True
        Exit Function
    Errcom_dx:
        '该函数执行过程中出现错误
        com_dx = False
        cn.Close
        Set cn = Nothing
    End Function
    Public Function com_fx(sc_fx) '复选题的判卷
        Dim strT As String
        On Error GoTo Errcom_fx
        ff = 0
        sc_fx = 0
        com_fx = False
        '打开数据库连接
        Set cn = New ADODB.Connection
        cn.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & "data source=" & App.Path & "\sysMain.mdb"
        cn.Open
        For i = 1 To 20                                        '判断20道复选题
            Set rsR = New ADODB.Recordset
            strTmp = "select 答案 from 答案表 where 题序号='" & i & " ' and 题型='复选'"
            rsR.Open strTmp, cn, adOpenStatic, adLockOptimistic
            '如果学生所选择的该题目答案存在,则把答案赋给st;否则st为空值
            If rsR.EOF = False Then
                st = Trim(rsR("答案"))
            Else
                st = ""
            End If
            rsR.Close        strTmp = "select 答案,分值 from 标准答案 where 题序号='" & i & " ' and 题型='复选'"
            rsR.Open strTmp, cn, adOpenDynamic, adLockOptimistic
            '如果标准答案中存在该题目的答案,则把标准答案赋给ss,把该题目的分值赋给strT;否则ss,strT都为空值
            If rsR.EOF = False Then
                ss = Trim(rsR("答案"))
                strT = rsR("分值")
            Else
                ss = ""
                strT = ""
            End If
            rsR.Close
            Set rsR = Nothing
            
            '计算该学生在该题所得的分数,并加到总分数sc_fx中
            sc = CDbl(strT)
            If st = ss Then
                ff = 1
            Else
                If p = InStr(ss, st) > 0 Then
                  ff = 0.5
                Else
                   ff = 0
                End If
            End If
            sc_fx = sc_fx + ff * sc
        Next
        cn.Close
        Set cn = Nothing
        com_fx = True
        Exit Function
    Errcom_fx:
        '该函数执行过程中出现错误
        com_fx = False
        cn.Close
        Set cn = Nothing
    End Function
      Public Function com_tk(sc_tk)  
      Dim step As Byte
      Dim v As Integer
      Dim w As Integer
      Dim pos As Integer
      Dim r As Double
      Dim rsR As New ADODB.Recordset
      Dim p As Integer
      Dim strT As String
        On Error GoTo Errcom_tk
        ff = 0
        sc_tk = 0
        com_tk = False
        '打开数据库连接
        Set cn = New ADODB.Connection
        cn.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & "data source=" & App.Path & "\sysMain.mdb"
        cn.Open
        For i = 1 To 20                                        '判断10道填空题
            Set rsR = New ADODB.Recordset
            strTmp = "select 答案 from 答案表 where 题序号='" & i & " ' and 题型='填空'"
            rsR.Open strTmp, cn, adOpenStatic, adLockOptimistic
            '如果学生所选择的该题目答案存在,则把答案赋给st;否则st为空值
            If rsR.EOF = False Then
                st = Trim(Replace(UCase(rsR("答案")), Space(1), " "))
            Else
                st = ""
            End If
            rsR.Close        strTmp = "select 答案,分值 from 标准答案 where 题序号='" & i & " ' and 题型='填空'"
            rsR.Open strTmp, cn, adOpenDynamic, adLockOptimistic
            '如果标准答案中存在该题目的答案,则把标准答案赋给ss,把该题目的分值赋给strT;否则ss,strT都为空值
            If rsR.EOF = False Then
                ss = Trim(rsR("答案"))
                strT = rsR("分值")
            Else
                ss = ""
                strT = ""
            End If
            rsR.Close
            Set rsR = Nothing
            
            '计算该学生在该题所得的分数,并加到总分数sc_tk中
            sc = CDbl(strT)
            If st = ss Then
                ff = 1
            Else
                If p = InStr(ss, st) > 0 Then
                   v = Len(st)
                   w = Len(ss)
                   pos = InStr(st, ss)
                   ff = v / (w * (pos + 1))
                End If
            End If
            sc_tk = sc_tk + ff * sc
        Next
        cn.Close
        Set cn = Nothing
        com_tk = True
        Exit Function
    Errcom_tk:
        '该函数执行过程中出现错误
        com_tk = False
        cn.Close
        Set cn = Nothing
    End Function