在敲学生的过程中,遇到了一个3021的错误,如图:
这个时候就要具体了解一下EOF和BOF了。
EOF(End of File)指当前记录位置位于Recordset对象的最后一个记录之后。
BOF:(Before of File)指当前记录位置位于RecordSet对象的第一个记录之前。
EOF和BOF都返回一个布尔值,使用ADO连接数据库进行查询的时候,数据库将查询结果返回查询端,在查询端的内来存里面就会有一个列表,这个列表存放的就是查询的结果。这个内存中的列表就是数据集。在你的程序里面rs就是表示这个数据集。bof表示rs当前的指针是指在了数据集的前面,比如数据集里面有编号为1,2,3,4的4条记录,但是rs指向的编号是-1,这样就会符合了bof的情况。同理,当rs的指针指向5,而第五条记录并不存在,这样就会产生了eof的情况。
如果同时产生了bof和aof的情况,就是源说rs的指针既在上界之外也在下届之外,这样只有一种情况,就是rs所代表的数据集是空的,zhidao这样rs的指针无论是指到什么地方都是同时具有bof和eof的属性。
你的情况估计是sql语句查询出来的值是空的,因此数据集也是空的,在读取rs数据集里面的值的时候就会报这个错误。
使用 if rs.bof and rs.eof then 这个判断可以判别rs里面是否有没有数据集,如果符合这个条件,说明数据集是空的,在程序中就要绕开对rs里字段的访问。
当然,我所遇到的问题就是当我把加进去的学籍信息都删掉之后,再点开修改学籍的窗体就会报错,这个原因就是数据库里面第一项没有数据,而BOF是指向第一个记录的,所以就会报错(个人是这样理解的,理解的有偏差还希望各位大佬指点一下),所以再frmmain窗体中就要设置,再修改学籍时,如果里面是空的,要提示先添加学籍信息等。如图: