1..首先添加学籍信息界面,实时错误“-2147352571”以及日期时间字段溢出
确定添加的单击事件中
mrc.Fields(3) = Trim(txtBorndate.Text)
这句提示类型不匹配
我发现我上面的年月日格式都是yyy--mm--dd,但是现在明显是yyyy的年份呀,这个系统谁会添加999年的学生呀…这还是往近的说的..更改了一下,果然是这个原因…. 经过查询,发现SQL sever数据库中date time 类型字段数值只能是1753-1-1 12:00:00——9999-12-31 11:59:59这两个日期时间段之间,再早的时间就没有办法识别了,他可能会报错,就如下图报错提示日期时间字段溢出
2.退出询问
在添加学籍时,添加完一个后他将添加学籍的窗体隐藏了,但是我如果还要继续添加时,点击添加学籍按钮时,他将我的窗体显示了出来,但是里面依旧存在我之前的数据,这让管理员来说太麻烦了。所以我进行了一部分的更改
再添加完后询问他是否还需要添加,如果需要那就清空控件的数据,如果不需要就卸载窗体
Dim str2$
str2$ = MsgBox("是否取消添加?", vbOKCancel, "退出添加")
'判断按钮类型
If str2$ = vbOK Then
Unload Me
Else
txtClassNo.Text = ""
txtDirector.Text = ""
txtClassroom.Text = ""
comboGrade.Text = ""
End If
3.实时错误“3021”
出现这个问题的原因可能有
1.查找的数据库记录为空..可以用 rs.RecordCount 来判断数据是否等于0
2.查找到数据后,用 Del 命令删除记录后,再引用 Fields 后会出现错误.
3.已经用MoveFirst 或用 MovePrevious 命令 移动至数据库开始后再用 MovePrevious 命令.
4.已经用MoveLast 或用 MoveNext 命令 移动至数据库开始后再用 MoveNext 命令
首先判断一下原因:
这个添加班级的窗体中,sql语句是
select * from class_info
但是我数据库class表中此时时空的所以返回的记录集中是没有数据是空的。我在第一遍添加的时候就开始报错根本就没有把数据添加上去,哪来的数据但是代码中还要执行mrc.movefirst 移动到第一条记录,当然是这句话报错了
解决方法一:
我们可以添加一句 on error resume next 这句话表示,当你程序出现了错误时可以继续向下走,但是这样当我们的程序被别人给测试时会不知道他的错误原因是什么,使用on error resume next 语句就好像你在逃避出现的bug,问题似的,但是有这么一句话“逃避虽可耻,但很有用”,这一句话的使用场景请自行决定呦~
解决方法二:
我们可以使用一个判断语句来判断数据库中是否存在数据
dim str1 $
If mrc.EOF And mrc.BOF Then
str1 = MsgBox("xxxxxxxx", vbOKCancel, "xxx") ’xxxxx为一个例子
If str1 = vbOK Then
“想要实现的代码”
Else
“想要实现的代码”
End If
End if
小知识:
mrc的bof与eof
使用ADO连接数据库进行查询的时候,数据库将查询结果返回查询端,在查询端的内存里面就会有一个列表,这个列表存放的就是查询的结果。这个内存中的列表就是数据集。在你的程序里面rs就是表示这个数据集。BOF指示当前记录位置位于 Recordset 对象的第一个记录之前,EOF指示当前记录位置位于 Recordset 对象的最后一个记录之后。比如数据集里面有编号为1,2,3,4的4条记录,但是rs指向的编号是-1,这样就会符合了BOF的情况。同理,当rs的指针指向5,而第五条记录并不存在,这样就会产生了EOF的情况。bof与eof的属性值只能用true或者false来表示