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
编译时没错误,可是点开始按钮什么都不出现。哪位高手指教我一下
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
编译时没错误,可是点开始按钮什么都不出现。哪位高手指教我一下
strTmp = "select 成绩表.学号 as 学号, 成绩表.姓名 as 姓名, 成绩表.单选成绩 as 单选成绩 ,成绩表.复选成绩 as 复选成绩,成绩表.填空成绩 as 填空成绩 ,成绩表.总成绩 as 总成绩 from tablename where 学号=00001"
strTmp = "select 成绩表.学号 as 学号, 成绩表.姓名 as 姓名, 成绩表.单选成绩 as 单选成绩 ,成绩表.复选成绩 as 复选成绩,成绩表.填空成绩 as 填空成绩 ,成绩表.总成绩 as 总成绩 from 成绩表 where 学号=00001"
这个也得改,按照CPLiu(老了)的方法
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
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