从调试到自己敲完它,到最后的解决问题,已经有半个月了,没有想到自己还是这么慢,最后要好好总结一下……
一、 学生信息管理系统的框架:
充分体现了数据库增删改查的特点和功能。
二、忘记以前学过的VB控件知识:
1、窗体背景全屏显示
学生信息管理系统里的主窗体是MDI父窗体,怎样在MDI窗体上加上背景图片呢?
第一种方法是加Picture控件,但是picture控件在MDI窗体上的属性是不能设置的,只有在picture上加上Image控件,可以设置picture属性, 并做如下设置:
Picture1的属性:
1.Align=top 2.Appearance=flat 3.BordeStyle=None 4.TabStop=false
Image1的属性: 1.Stretch=true
在MDI窗体的resize事件中添加如下代码:
Private Sub MDIForm_Resize()
Me.Picture1.Height = Me.Height
End Sub
在Picture1控件的resize事件中添加如下代码:
Private Sub Picture1_Resize()
Me.Image1.Move 0, 0, Me.Picture1.Width, Me.Picture1.Height
End Sub
但是这种方法会覆盖子窗体,子窗体处于picturebox和image控件之间当时设置好了突然不见了的子窗体就是这么回事,当然还有一种方法就是直接更改图片的尺寸使它符合MDI窗体的大小。
注意:
在MDI主窗体中不可以放置控件,除非你在显示窗体时使用的是:Show方法而不是ShowDialog方法,如果是在MDI窗体中添加背景图,建议可以将设置窗体的背景图,而不是添加PictureBox控件。
2、resize事件是窗口大小改变时发生的事件,可以在窗口启动、最大化、最小化、窗口大小改变(如拖拉改变窗口大小、move语句改变窗口大小、改变width或height属性以改变窗口大小)时发生。
3、ListBox控件
在设置课程窗体中,遇到的问题是点击一遍设置课程在ListAllcourse中就显示一遍课程信息,以至于课程重复。
解决方法:listAllcourse.Clear加在设置课程按钮单机事件里,每执行一次设置课程就清空上一次的所有课程列表;另一种方法添加循环语句,把重复列表项删除:
For i = 0 To listAllcourse.ListCount - 1
For j = i + 1 To listAllcourse.ListCount
If listAllcourse.List(j) = listAllcourse.List(i) Then
listAllcourse.RemoveItem j
End If
Next j
Next i
三、数据库和SQL Server的问题
1、
MSFlexGrid控件
作用:该控件以表格形式显示二维字符数组中每个单元的数据。常用于处理复杂的二维数据表的问题。
简单用法 :
MSFlexGrid1.Rows=5 规定表格的总行数为5行
MSFlexGrid1.Cols=2 规定表格的总列数为2行
MSFlexGrid1.TextMatrix(3,0)=“dhkg”某一单元格的文本内容
MSFlexGrid1.AddItem “”,2 在第二行处插入行 ;MSFlexGrid1.RemoveItem 3 删除行
属性:
CellAlignment 设置一个值定义当前单元的水平和垂直对齐方式
在五个实例里面用到过,
显示查询结果时,怎样防止MSFlexGrid出现空白行?代码如下:
With myflexgrid
.Rows = 2
.CellAlignment = 4
.TextMatrix(1, 0) = "考试编号"
.TextMatrix(1, 1) = "学号"
.TextMatrix(1, 2) = "姓名"
.TextMatrix(1, 3) = "班号"
.TextMatrix(1, 4) = "课程名称"
.TextMatrix(1, 5) = "分数"
Do While Not mrc.EOF
.Rows = .Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = mrc.Fields(0)
.TextMatrix(.Rows - 1, 1) = mrc.Fields(1)
.TextMatrix(.Rows - 1, 2) = mrc.Fields(2)
.TextMatrix(.Rows - 1, 3) = mrc.Fields(3)
.TextMatrix(.Rows - 1, 4) = mrc.Fields(4)
.TextMatrix(.Rows - 1, 5) = mrc.Fields(5)
mrc.MoveNext
Loop
End With
2、BOF 和EOF
如果当前记录位于第一个记录之前,BOF 属性将返回 True ,如果当前记录为第一个记录或位于其后则将返回 False 。
如果当前记录位于 Recordset 对象的最后一个记录之后 EOF 属性将返回 True,而当前记录为 Recordset 对象的最后一个记录或位于其前,则将返回 False。
如果 BOF 或 EOF 属性为 True,则没有当前记录
3、SQL语句
这是出现错误最多的地方,一个小小的符号或是空格都有可能导致出错
例如: txtSQL = "select * from gradecourse_Info where grade=' " & comboGrade.Text & " ' "
SELECT 语句用于检索查询数据库中的数据,SELECT…… from ……WHERE……
4、两种遍历记录方法
If Not mrc.EOF Then '遍历记录方法1
For i = 1 To mrc.RecordCount
listSelectcourse.AddItem mrc.Fields(1)
mrc.MoveNext
Next i
End If
While (mrc.EOF = False) '遍历记录方法2
listAllcourse.AddItem mrc.Fields(1)
mrc.MoveNext
Wend
5、GetUserName函数
作用:取得当前用户的名字,返回值Long,true表示成功,否则为零。加强系统安全性,不同账号登录。对账号记录,不同的账号有不同的权限。
6、ExecuteSQL(sqlQuery;fieldSeparator;rowSeparator……)
作用:直接执行SQL语句获取数据表中的数据
sqlQuery:是SQL查询语句
fieldSeparator:字段分隔符,如果返回的结果包含多个字段,则使用这个参数指定一个字段分隔符
7、dd(4)布尔变量数组的应用
清楚的标记了查询方式,是选择一种方式查询,还是多种方式同时选择,都可以很清楚的标记 。
当转换其他的数值类型为boolean值时,0会转成False,而其他的变成True。当转换boolean值为其他的数据类型时,False成为0,而True成为-1.