学生信息管理系统已经告一段落了,但需要我们体会理解的还很多,师傅说我们现在最重要的不是实现了功能,是学会总结的方法,学会系统包含的设计理念和为人民服务的精神。
不过,本节先进行一个技术问题总结吧,思想理念方面的敬请关注 《那些事儿(三) 》。
首先,问题一:总是出现下图提示:
已经毫无疑问了,出现该问题的原因是数据库没连接上,而导致数据库没连上又有多种原因的。其中简单分析一下代码方面原因,大概有以下几种情况:1、符号格式错误(中、英文半角和全角),尤其是紧密关联执行数据库语句的引号;2、表名、数据库名写错;3、空格是否应该存在。 由于该系统比较简单,很容易就能解决。
问题二:运行后frmMain不出来或出现次数冲突。
开始敲的时候,由于有的同学并不是从类模块开始的,或是没好好分析系统结构,把启动窗体想当然地设置为frmLogin,因而就会导致代码工作完成后frmMain出不来。这个系统的启动机制是标准模块下的Sub Main,所以设置一下“工程-工程属性-启动对象”为Sub main就OK啦。
还有就是有的同学发现主窗体出不来时,就在frmLogin下加了Show方法。这样会导致如下错误:
由于frmMain是父窗体,在一个工程里只能存在一个,所以与类模块下Sub Main冲突,解决方法同上。
问题三:关于修改信息
当我们修改信息时(以修改成绩信息为例),如果删除所有信息后,修改窗体消失。但再次单击修改菜单后,修改窗体还是会弹出来。这是因为单击修改按钮后仍然执行了frmModifyResult.Show的命令,要想使不再弹出或显示添加窗体,则需要在frmMain下的frmModifyResult菜单中添加如下代码:
Private Sub modifyresultMenu_Click()
Dim txtSQL As String ’定义文本型数据库连接字符串
Dim MsgText As String ’定义信息提示
Dim mrc As ADODB.Recordset ’定义ADO的记录集
Dim msgAddRecord As String ’定义添加提示信息
txtSQL = "select * from result_Info" ’执行数据库成绩信息
Set mrc = ExecuteSQL(txtSQL, MsgText)
If mrc.RecordCount = 0 Then ’如果ADO的记录数为零,此时成绩无记录
msgAddRecord = MsgBox("没有记录,是否添加?", vbOKCancel, "提示")
If msgAddRecord = vbOK Then ’确定添加
frmAddresult.Show
Exit Sub
Else
Exit Sub ’不添加则退出该过程
End If
Else
frmModifyresultInfo.Show ’修改成绩信息窗体显示
End If
End Sub
其他关于修改的窗体同上。
问题四 年级与班级的添加问题
在添加班级信息时,我们会发现当初一添加了1班后,初二就不能添加1班了,因为没有年级处理机制。解决办法很简单,只需要把1-n的班号和每个年级绑定,1-n再和初一绑定,1-n再和初二绑定……参考代码(部分):
If Trim(comboGrade.Text) = "初中一年级" Then
While (mrc.EOF = False)
If Trim(mrc.Fields(0)) = Trim(txtClassno.Text) And Trim(mrc.Fields(1)) = "初中一年级" Then
MsgBox "班号已存在,请重新输入!", vbOKOnly + vbExclamation, "警告"
txtClassno.SetFocus
Exit Sub
Else
mrc.MoveNext
End If
Wend
End If
再重复绑定几个年级就可以了。
最后,再跟大家啰嗦一下listIndex的问题,问题起源于,在frmSetcourseInfo下单击“年级”组合框后,listAllcourse并不显示课程名,仔细一看,是cmdAdd和cmdDel按钮下的listIndex和listCount写混了。Listindex是list中项的索引值,List1.ListIndex<>-1 前面为>0且<>-1的数,表示“如果前面有选择”;如果没有选择,则前面是-1。
问题五:List 可重复输入问题
在frmSetCourseinfo窗体中,在选课时会出现多次单击“设置课程”总课程数重复出现,多次单击“选择课程——>”所选课程可重复添加的现象,导致一门课程的多次出现。
处理这个问题我们需要考虑一下,大家首先先到的是添加一个不重复的命令。不错,可以使用循环进行比较,重复则移除。这个方法对于listSelectCourse很适用,但第一个呢?是不是也有必要这样处理?答案当然是否定的!我们只需要把“设置课程”按钮禁用就可以了!这里需要我们具体问题具体分析,寻求最优化的解决方案。
下面是使listSelectCourse不重复代码(只介绍循环移除部分):
’listcountSelectCourse1和listcountSelectCourse2代表循环变量
For listcountSelectCourse1 = 0 To listSelectcourse.ListCount - 1 '第一次循环,共循环list内总数次
For listcountSelectCourse2=listcountSelectCourse1 + 1 To listSelectcourse.ListCount '第二次循环,共循环list内总数-1次
If listSelectcourse.List(listcountSelectCourse1) = listSelectcourse.List(listcountSelectCourse2) Then ‘如果记录相同则移除相同项
listSelectcourse.RemoveItem listcountSelectCourse2 '移除
MsgBox "该课程已选!"
Exit Sub '退出
End If
Next listcountSelectCourse2
Next listcountSelectCourse1