📄 frmlessons.frm
字号:
On Error Resume Next
Const gl As Integer = 50 '间隙常数
SSPanel1.Left = gl
SSPanel1.Width = Me.ScaleWidth - 2 * gl
SSPanel2.Left = (Me.ScaleWidth - SSPanel2.Width) / 2
DataGrid1.Left = gl
DataGrid1.Width = Me.ScaleWidth - 2 * gl
DataGrid1.Height = Me.ScaleHeight - DataGrid1.Top - StatBar.Height - 2 * gl
'只有第一次调整窗体尺寸时才执行以下代码
If bFirstStart Then
DataGrid1.Refresh
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始事务
bFirstStart = False
End If
End Sub
'DataGrid内部错误处理
Private Sub DataGrid1_Error(ByVal DataError As Integer, Response As Integer)
If DataError = 7007 Then
MsgBox "所输字符数超过允许输入字符最大个数,参见状态栏提示!", _
vbCritical, "错误提示"
Response = 0
ElseIf DataError = 7008 Then
Adodc1.Recordset.AddNew
Response = 0
End If
End Sub
'设置ADO数据控件的连接属性和记录源属性
Private Sub SetAdc()
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
& StudentDBfile & ";Persist Security Info=False"
Adodc1.RecordSource = "select institute_id as 学院代码,major_id as 专业代码," & _
"lesson_id as 课程代码," _
& "lesson_name as 课程名称,term as 学期,hours as 学时," & _
"credit as 学分,lesson_type as 课程性质 " _
& "from lessons order by institute_id,major_id asc"
End Sub
Private Sub Adodc1_FieldChangeComplete(ByVal cFields As Long, Fields As Variant, _
ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, _
ByVal pRecordset As ADODB.Recordset)
'字段改变完成后触发的事件
DataEdited = True
End Sub
Private Sub Adodc1_RecordChangeComplete(ByVal adReason As ADODB.EventReasonEnum, _
ByVal cRecords As Long, ByVal pError As ADODB.Error, _
adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'记录改变完成后触发的事件
Select Case adReason
Case adRsnDelete, adRsnUpdate, adRsnAddNew
DataEdited = True
End Select
End Sub
Private Sub Adodc1_RecordsetChangeComplete(ByVal adReason As ADODB.EventReasonEnum, _
ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, _
ByVal pRecordset As ADODB.Recordset)
'记录集改变完成后触发的事件
Select Case adReason
Case adRsnAddNew, adRsnDelete, adRsnAddNew
DataEdited = True
End Select
End Sub
'当前单元格改变位置事件
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
Dim dbrow As Long, s1$, s2$, s3$
'确定记录指针
On Error Resume Next
With Adodc1.Recordset
If .RecordCount = 0 Then
dbrow = .RecordCount
Else
dbrow = .AbsolutePosition
End If
s1 = "当前记录位置:" & dbrow
s2 = "记录总数:" & Adodc1.Recordset.RecordCount
s3 = "提示:" & Adodc1.Recordset.Fields(DataGrid1.Col).Name & "最多只允许输入" & _
Adodc1.Recordset.Fields(DataGrid1.Col).DefinedSize & "位字符!"
StatBar.Panels(1).Text = s1
StatBar.Panels(2).Text = s2
StatBar.Panels(3).Text = s3
End With
End Sub
'课程性质组合框单击
Private Sub tyComb_Click()
If bFirstStart Then Exit Sub
Call SaveData
'根据选择的条件组合进行相应的查询
Call ConditionQuery
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
End Sub
'学期组合框单击
Private Sub xqComb_Click()
If bFirstStart Then Exit Sub
Call SaveData
'其后面的所有列表框显示全部
tyComb.ListIndex = 0
'根据选择的条件组合进行相应的查询
Call ConditionQuery
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
End Sub
'学院组合框单击事件
Private Sub xyComb_Click()
Dim sArray() As String, msql As String, mrs As ADODB.Recordset
If bFirstStart Then Exit Sub
Call SaveData
'其后面的所有列表框显示全部
zyComb.ListIndex = 0
xqComb.ListIndex = 0
tyComb.ListIndex = 0
'重新填充专业组合框内容
sArray = Split(xyComb.Text)
If sArray(0) = "全部" Then
msql = "select * from major order by institute_id,major_id asc"
Set mrs = ExecuteSQL(msql)
Call ADDComboListRS(zyComb, mrs, True, "major_name", "institute_id", "major_id")
Else
msql = "select * from major where institute_id='" & sArray(1) & "'" _
& " order by institute_id,major_id asc"
Set mrs = ExecuteSQL(msql)
Call ADDComboListRS(zyComb, mrs, True, "major_name", "institute_id", "major_id")
End If
'根据选择的条件组合进行相应的查询
Call ConditionQuery
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
End Sub
'专业组合框单击
Private Sub zyComb_Click()
If bFirstStart Then Exit Sub
Call SaveData
'其后面的所有列表框显示全部
xqComb.ListIndex = 0
tyComb.ListIndex = 0
'根据选择的条件组合进行相应的查询
Call ConditionQuery
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
End Sub
'根据选择的条件组合进行相应的查询
Private Sub ConditionQuery()
Dim msql$, sxyArray() As String, szyArray() As String
msql = "select institute_id as 学院代码,major_id as 专业代码,lesson_id as 课程代码," _
& "lesson_name as 课程名称,term as 学期,hours as 学时,credit as 学分," & _
"lesson_type as 课程性质 from lessons"
sxyArray = Split(xyComb.Text)
szyArray = Split(zyComb.Text)
If sxyArray(0) = "全部" And szyArray(0) = "全部" And xqComb.Text = "全部" _
And tyComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql)
ElseIf sxyArray(0) <> "全部" And szyArray(0) = "全部" And xqComb.Text = "全部" _
And tyComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1))
ElseIf sxyArray(0) <> "全部" And szyArray(0) <> "全部" And xqComb.Text = "全部" _
And tyComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), _
szyArray(1) & szyArray(2))
ElseIf sxyArray(0) <> "全部" And szyArray(0) <> "全部" And xqComb.Text <> "全部" _
And tyComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), _
szyArray(1) & szyArray(2), xqComb.Text)
ElseIf sxyArray(0) <> "全部" And szyArray(0) <> "全部" And xqComb.Text <> "全部" _
And tyComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), _
szyArray(1) & szyArray(2), xqComb.Text, tyComb.Text)
ElseIf sxyArray(0) = "全部" And szyArray(0) <> "全部" And xqComb.Text = "全部" _
And tyComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, , szyArray(1) & szyArray(2))
ElseIf sxyArray(0) = "全部" And szyArray(0) <> "全部" And xqComb.Text <> "全部" _
And tyComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, , szyArray(1) & szyArray(2), xqComb.Text)
ElseIf sxyArray(0) = "全部" And szyArray(0) <> "全部" And xqComb.Text <> "全部" _
And tyComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, , szyArray(1) & szyArray(2), _
xqComb.Text, tyComb.Text)
ElseIf sxyArray(0) = "全部" And szyArray(0) <> "全部" And xqComb.Text = "全部" _
And tyComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, , szyArray(1) & szyArray(2), , _
tyComb.Text)
ElseIf sxyArray(0) = "全部" And szyArray(0) = "全部" And xqComb.Text <> "全部" _
And tyComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, , , xqComb.Text)
ElseIf sxyArray(0) = "全部" And szyArray(0) = "全部" And xqComb.Text <> "全部" _
And tyComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, , , xqComb.Text, tyComb.Text)
ElseIf sxyArray(0) <> "全部" And szyArray(0) = "全部" And xqComb.Text <> "全部" _
And tyComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), , xqComb.Text)
ElseIf sxyArray(0) <> "全部" And szyArray(0) = "全部" And xqComb.Text <> "全部" _
And tyComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), , xqComb.Text, tyComb.Text)
ElseIf sxyArray(0) <> "全部" And szyArray(0) <> "全部" And xqComb.Text = "全部" _
And tyComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), _
szyArray(1) & szyArray(2), , tyComb.Text)
ElseIf sxyArray(0) <> "全部" And szyArray(0) = "全部" And xqComb.Text = "全部" _
And tyComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), , , tyComb.Text)
End If
End Sub
Public Sub SaveData()
'保存全部修改
On Error GoTo errhandler:
If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst
Adodc1.Recordset.UpdateBatch
cn.CommitTrans '提交事务
DataEdited = False
DataGrid1.Refresh
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
Exit Sub
errhandler:
'显示与数据库操作规则有关的错误信息
Call ShowDbRuleErrInf("学院代码、专业代码和课程代码的组合值")
End Sub
Public Sub CancelData()
'还原全部修改
On Error GoTo errhandler:
If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst
Adodc1.Recordset.CancelBatch
cn.RollbackTrans '回滚事务
DataEdited = False
DataGrid1.Refresh
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
Exit Sub
errhandler:
'显示与数据库操作规则有关的错误信息
Call ShowDbRuleErrInf("学院代码、专业代码和课程代码的组合值")
End Sub
Public Sub ClearData()
'删空当前记录集
Call DBRecordset_Delete(Adodc1.Recordset)
DataGrid1.Refresh
'设置修改标志
DataEdited = True
End Sub
Public Sub DeleteData()
'删除当前记录
'当前单元在最后一行,但没有 AddNew 操作,被挂起情况下退出该过程
If DataGrid1.AddNewMode = dbgAddNewCurrent Or Adodc1.Recordset.RecordCount = 0 Then
Exit Sub
End If
Adodc1.Recordset.Bookmark = DataGrid1.Bookmark
Adodc1.Recordset.Delete
'设置修改标志
DataEdited = True
DataGrid1.Refresh
End Sub
'窗体卸载前查询事件
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim s$, b%
If DataEdited = True Then
s$ = "数据已修改,是否保存?"
b = MsgBox(s$, vbYesNoCancel + vbQuestion, "操作提示")
Select Case b
Case vbYes '保存修改
Call SaveData
Case vbNo '取消修改
Call CancelData
Case vbCancel
Cancel = True '不关闭窗体
Exit Sub
End Select
End If
'"操作"菜单、按钮禁用
Call InitMenuAndToolbars(False)
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -