这一窗体是比较麻烦的,需要处理的问题:
1.删除最后一条记录,不能出现3021的错误
2.删除最后一条记录要关闭窗体
3.本窗体的数据库如果没有数据禁止打开
4.第一次把数据删除完,再次添加数据,上一条,下一条,修改,删除记录都会出现3021的错误(不能重复使用)
5.出生日期和入校日期的关系,出生日期不能大于入校日期
6.文本框的限制和数据库中对应数据中的数据类型的范围
问题一和问题四:
运用了一个按钮连接数据库并刷新数据库,(个人认为出现3021这个错误是数据库没有及时刷新并赋给窗体数据)为了使用户先点刷新数据,就使窗体中的所有按钮和文本框都不能用,点击刷新按钮,frame1和frame2中的按钮都可用,并显示下一条数据(因为在测试中,发现删除完数据之后在添加数据,当点开修改学籍时,会出现之前最后删除的信息)
Private Sub cmdRefresh_Click()
'使frame2中的按钮可用
Frame2.Enabled = True
firstCommand.Enabled = True
previousCommand.Enabled = True
nextCommand.Enabled = True
lastCommand.Enabled = True
'使frame1中的按钮可用
editCommand.Enabled = True
updateCommand.Enabled = True
cancelCommand.Enabled = True
deleteCommand.Enabled = True
'查询学籍,mrc用来保存txtSQL查询到的信息,msgtext来显示查询函数的查询状态,数据更新
Dim txtSQL As String
Dim MsgText As String
txtSQL = "select * from student_Info "
Set mrc = ExecuteSQL(txtSQL, MsgText)
mrc.Update
'显示下一个数据
mrc.MoveNext
If mrc.EOF Then
mrc.MoveLast
End If
Call viewData
'按钮不可用
cmdRefresh.Enabled = False
End Sub
问题2,因为删除最后一个记录,窗体会隐藏,注意不是卸载,所以在添加新的信息之后在打开修改学籍信息窗体,会出现frame1和frame2按钮可用,这是因为没有运行load里面的代码,为了使用户每次进入修改学籍窗体点击刷新数据,所以在窗体隐藏时,使frame1和frame2按钮不可用,使cmdRefresh(刷新数据)按钮可用
Private Sub deleteCommand_Click()
cmdRefresh.Enabled = True
Frame2.Enabled = False '使导航按钮变为有效
firstCommand.Enabled = False
previousCommand.Enabled = False
nextCommand.Enabled = False
lastCommand.Enabled = False
editCommand.Enabled = False
updateCommand.Enabled = False
cancelCommand.Enabled = False
deleteCommand.Enabled = False
If mrc.EOF Then
mrc.MoveFirst
myBookmark = mrc.Bookmark
mrc.MoveLast
mrc.Delete
mrc.Update
mrc.Bookmark = myBookmark
Me.Hide
问题三:需要在frmMain窗体中,点击修改学籍信息代码中写入:
Private Sub modifysinfo_Menu_Click()
Dim txtSQL As String
Dim MsgText As String
Dim mrc As ADODB.Recordset
txtSQL = "select * from student_Info "
Set mrc = ExecuteSQL(txtSQL, MsgText)
If mrc.BOF Then
MsgBox "当前没有记录,请添加记录"
Exit Sub
End If
frmModifysinfo.Show
End Sub
问题五:因为用的控件不是文本框而是DTPicker,以下是代码:
If DTPicker2.Value >= DTPicker1.Value Then
MsgBox "出生日期填入错误"
DTPicker2.SetFocus
Exit Sub
End If
问题六:
如:学号中数据库中的数据类型是int,范围是[-2147483648,2147483647],所以你设置的文本框的范围不能超过它的值。
Private Sub txtSID_KeyPress(KeyAscii As Integer)
'代码输入字符数最长9个
txtSID.MaxLength = 9
'只能输入数字和退格符
If KeyAscii = 8 Then
ElseIf KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
End If
End Sub