使用ADO连接数据库进行查询的时候,数据库将查询结果返回查询端,在查询端的内存里面就会有一个列表,这个列表存放的就是查询的结果。这个内存中的列表就是数据集。在你的程序里面rs就是表示这个数据集。bof表示rs当前的指针是指在了数据集的前面,比如数据集里面有编号为1,2,3,4的4条记录,但是rs指向的编号是-1,这样就会符合了bof的情况。同理,当rs的指针指向5,而第五条记录并不存在,这样就会产生了eof的情况。
如果同时产生了bof和aof的情况,就是说rs的指针既在上界之外也在下届之外,这样只有一种情况,就是rs所代表的数据集是空的,这样rs的指针无论是指到什么地方都是同时具有bof和eof的属性。
你的情况估计是sql语句查询出来的值是空的,因此数据集也是空的,在读取rs数据集里面的值的时候就会报这个错误。
使用 if rs.bof and rs.eof then 这个判断可以判别rs里面是否有没有数据集,如果符合这个条件,说明数据集是空的,在程序中就要绕开对rs里字段的访问。
bof
指示当前记录位置位于
recordset
对象的第一个记录之前。
eof
指示当前记录位置位于
recordset
对象的最后一个记录之后。
返回值
bof
和
eof
属性返回布尔型值。
说明
使用
bof
和
eof
属性可确定
recordset
对象是否包含记录,或者从一个记录移动到另一个记录时是否超出
recordset
对象的限制。
如果当前记录位于第一个记录之前,bof
属性将返回
true
(-1),如果当前记录为第一个记录或位于其后则将返回
false
(0)。
如果当前记录位于
recordset
对象的最后一个记录之后
eof
属性将返回
true,而当前记录为
recordset
对象的最后一个记录或位于其前,则将返回
false。
如果
bof
或
eof
属性为
true,则没有当前记录。
如果打开没有记录的
recordset
对象,bof
和
eof
属性将设置为
true,而
recordset
对象的
recordcount
属性设置为零。打开至少包含一条记录的
recordset
对象时,第一条记录为当前记录,而
bof
和
eof
属性为
false。
如果删除
recordset
对象中保留的最后记录,bof
和
eof
属性将保持
false,直到重新安排当前记录。
bof: begin of file
eof: end of file