【学生系统】——查询窗体和修改窗体
2014-07-27 14:58
141 查看
学生信息系统的三大窗体就剩下查询窗体和修改窗体了,这两个窗体中没有太多要注意的,除了一般的判断是否为空、是否为数字、是否重复等这些问题以外,修改窗体另外还有一个要注意的问题,这些问题不注意的话,运行时一不小心就会报错。而查询窗体主要是理解代码,其中有一点很难理解,那就是定义的逻辑变量dd(4)。下面来解释一下:
查询窗体中有三种查询方式,分别是按学号、课程、姓名查询,但是用户在查询时却会出现4种情况,那就是单一方式查询、两种方式同时查询、三种方式同时查询和没有选择查询方式,dd(4)正是代表了这四种情况,下面结合代码理解一下:
Private Sub cmdinquire_Click()
Dim txtsql As String
Dim msgtext As String
Dim dd(4) As Boolean'代表四种查询情况
Dim mrc As ADODB.Recordset
'不同的查询方式查询的表是一样的,只不过不同的方式入手的地方不一样
txtsql = "select * from result_info where "'入手的地方就是where后面的内容
If Check1(0).Value Then'按学号查询
If Trim(txtsid.Text) = "" Then
smeg = "学号不能为空"
MsgBox smeg, vbOKOnly + vbExclamation, "警告"
txtsid.SetFocus
Exit Sub
Else
If Not IsNumeric(Trim(txtsid.Text)) Then
MsgBox "请输入数字!", vbOKOnly + vbExclamation, "警告"
Exit Sub
txtsid.SetFocus
End If
dd(0) = True'dd(0)=Ture代表的是按学号查询
txtsql = txtsql & "student_id= '" & Trim(txtsid.Text) & "'"
End If
End If
If Check1(1).Value Then '按姓名查询
If Trim(txtname.Text) = "" Then
smeg = "姓名不能为空"
MsgBox smeg, vbOKOnly + vbExclamation, "警告"
txtname.SetFocus
Exit Sub
Else
dd(1) = True 'dd(1)=Ture代表的是按姓名查询
If dd(0) Then '如果同时按学号和姓名查询
txtsql = txtsql & "and student_name= '" & txtname.Text & "'"
Else
txtsql = txtsql & "student_name= '" & txtname.Text & "'"
End If
End If
End If
</pre><p></p><p><span style="font-size:18px"></span></p><pre name="code" class="html">If Check1(2).Value Then '按课程查询
If Trim(txtcourse.Text) = "" Then
smeg = "课程不能为空"
MsgBox smeg, vbOKOnly + vbExclamation, "警告"
txtcourse.SetFocus
Exit Sub
Else
dd(2) = True'dd(2)=Ture代表的是按课程查询
If dd(0) Or dd(1) Then'如果同时按课程和学号或者同时按课程和姓名查询
txtsql = txtsql & "and course_name= '" & txtcourse.Text & "'"
Else
txtsql = txtsql & "course_name= '" & txtcourse.Text & "'"
End If
End If
End If
If Not (dd(0) Or dd(1) Or dd(2) Or dd(3)) Then '没有选择查询方式
MsgBox "请设置查询方式!", vbOKOnly + vbExclamation, "警告"
Exit Sub
End If
txtsql = txtsql & "order by student_id"
Set mrc = executesql(txtsql, msgtext)
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
mrc.Close
End Sub
其实出现这个问题的原因是有一个很重要的内容没有理解,那就是查询窗体是怎么实现查询功能的?查询时的Select语句有两种不同的情况,一种是:
另一种是:
这两句代码其实就差一个“and”,“and”在这里是连接两个字符串,加“and”的一句代码运行的结果是同时按学号和姓名查询,相当于:
不同的查询方式其实是查询的同一张表,只不过是入手点不同,也就是说txtsql = "select * from result_info where " 一句where后面的内容不同,where后面的内容正是查询的入手点。
修改窗体中要注意的问题是删除最后一条记录后会报错,因为原代码中删除最后一条记录后指针不消失,还是指向下一条,结果就会出错,这样的话就需要借用错误语句,也就是说On Error GoTo 语句:
这样的话,报错问题就会解除了。
学生信息管理系统总结还在进行中。
更新:对代码格式进行修改。原来的代码格式就像后半段的代码,每句的代码都是一行,那是因为我添加代码之后又让代码整体缩进了一下。这样改完之后,两种样式做一下对比,有一个错误的记录。
查询窗体中有三种查询方式,分别是按学号、课程、姓名查询,但是用户在查询时却会出现4种情况,那就是单一方式查询、两种方式同时查询、三种方式同时查询和没有选择查询方式,dd(4)正是代表了这四种情况,下面结合代码理解一下:
Private Sub cmdinquire_Click()
Dim txtsql As String
Dim msgtext As String
Dim dd(4) As Boolean'代表四种查询情况
Dim mrc As ADODB.Recordset
'不同的查询方式查询的表是一样的,只不过不同的方式入手的地方不一样
txtsql = "select * from result_info where "'入手的地方就是where后面的内容
If Check1(0).Value Then'按学号查询
If Trim(txtsid.Text) = "" Then
smeg = "学号不能为空"
MsgBox smeg, vbOKOnly + vbExclamation, "警告"
txtsid.SetFocus
Exit Sub
Else
If Not IsNumeric(Trim(txtsid.Text)) Then
MsgBox "请输入数字!", vbOKOnly + vbExclamation, "警告"
Exit Sub
txtsid.SetFocus
End If
dd(0) = True'dd(0)=Ture代表的是按学号查询
txtsql = txtsql & "student_id= '" & Trim(txtsid.Text) & "'"
End If
End If
If Check1(1).Value Then '按姓名查询
If Trim(txtname.Text) = "" Then
smeg = "姓名不能为空"
MsgBox smeg, vbOKOnly + vbExclamation, "警告"
txtname.SetFocus
Exit Sub
Else
dd(1) = True 'dd(1)=Ture代表的是按姓名查询
If dd(0) Then '如果同时按学号和姓名查询
txtsql = txtsql & "and student_name= '" & txtname.Text & "'"
Else
txtsql = txtsql & "student_name= '" & txtname.Text & "'"
End If
End If
End If
</pre><p></p><p><span style="font-size:18px"></span></p><pre name="code" class="html">If Check1(2).Value Then '按课程查询
If Trim(txtcourse.Text) = "" Then
smeg = "课程不能为空"
MsgBox smeg, vbOKOnly + vbExclamation, "警告"
txtcourse.SetFocus
Exit Sub
Else
dd(2) = True'dd(2)=Ture代表的是按课程查询
If dd(0) Or dd(1) Then'如果同时按课程和学号或者同时按课程和姓名查询
txtsql = txtsql & "and course_name= '" & txtcourse.Text & "'"
Else
txtsql = txtsql & "course_name= '" & txtcourse.Text & "'"
End If
End If
End If
If Not (dd(0) Or dd(1) Or dd(2) Or dd(3)) Then '没有选择查询方式
MsgBox "请设置查询方式!", vbOKOnly + vbExclamation, "警告"
Exit Sub
End If
txtsql = txtsql & "order by student_id"
Set mrc = executesql(txtsql, msgtext)
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
mrc.Close
End Sub
其实出现这个问题的原因是有一个很重要的内容没有理解,那就是查询窗体是怎么实现查询功能的?查询时的Select语句有两种不同的情况,一种是:
txtsql = txtsql & "and student_name= '" & txtname.Text & "'"
另一种是:
txtsql = txtsql & "student_name= '" & txtname.Text & "'"
这两句代码其实就差一个“and”,“and”在这里是连接两个字符串,加“and”的一句代码运行的结果是同时按学号和姓名查询,相当于:
txtsql = txtsql & "student_id and student_name= '" & txtname.Text & "'"
不同的查询方式其实是查询的同一张表,只不过是入手点不同,也就是说txtsql = "select * from result_info where " 一句where后面的内容不同,where后面的内容正是查询的入手点。
修改窗体中要注意的问题是删除最后一条记录后会报错,因为原代码中删除最后一条记录后指针不消失,还是指向下一条,结果就会出错,这样的话就需要借用错误语句,也就是说On Error GoTo 语句:
Private Sub deletecommand_Click()
Dim msgtext As String
mybookmark = mrc.Bookmark '对编辑行做标记
str2$ = MsgBox("是否删除当前记录?", vbOKCancel, "删除当前记录")
mrc.Delete
comboexamtype.Text = ""
comboclassno.Text = ""
combosid.Text = ""
combocourse.Text = ""
txtname.Text = ""
txtresult.Text = ""
On Error GoTo CheckDataErr
mrc.MoveFirst
Call viewdata
mybookmark = mrc.Bookmark'使指针指向原来标记的记录行
mcclean = True
CheckDataErr:
If Err = 3021 Then
MsgBox "已删除所有记录!", vbOKOnly + vbExclamation, "警告"
comboexamtype.Text = ""
comboclassno.Text = ""
combosid.Text = ""
combocourse.Text = ""
txtname.Text = ""
txtresult.Text = ""
frmmodifyresult.Hide
End If
End Sub
这样的话,报错问题就会解除了。
学生信息管理系统总结还在进行中。
更新:对代码格式进行修改。原来的代码格式就像后半段的代码,每句的代码都是一行,那是因为我添加代码之后又让代码整体缩进了一下。这样改完之后,两种样式做一下对比,有一个错误的记录。
相关文章推荐
- 学生管理系统(五)---修改窗体
- 学生学籍管理系统_学生登陆系统查询与修改信息
- 学生管理系统之查询窗体
- 做学生信息录入删除查询修改系统的心得
- 学生信息管理系统—修改学籍信息窗体的错误
- 学生管理系统(四)---查询窗体
- 新系统查询是否有信息修改记录
- 学生查询系统
- 【原创视频教程】学生信息管理系统2--主窗体
- 学生管理系统信息查询部分主要功能总结
- 修改郝斌老师的学生信息管理系统
- 学生成绩储存及查询系统(一)
- 数据结构二分排序之学生信息查询简单系统
- 学生管理系统--主窗体设计
- 学生成绩储存及查询系统二
- linux 查询修改系统时间
- 【原创视频教程】学生信息管理系统2--主窗体
- 学生信息管理系统V0.3(优化文件存取、增加修改删除功能)
- 学生管理系统 最新修改
- 学生信息管理系统———隐藏窗体——BUG调试