>>>The use of BOF and EOF in Visual FoxPro is not entirely consistent (with one another). If you have 10 records in total, and go to the last record, EOF() will be .F., RECNO() will be 10; if you then SKIP, EOF() will be .T., and RECNO() will be 11. On the other hand, if you got to the first record, initially BOF() will be .F. and RECNO() will be 1 (fine with me, so far...). But if you then SKIP -1, BOF() will be .T., and RECNO() will still be 1.
>>>In any case, you can use EOF() and BOF() in combination with commands such as SKIP, LOCATE, SEEK(), ... to check whether you are still on a valid record. I believe the only command that will can set BOF() = .T., is a backwards SKIP.
>>
>>Kick in SET ORDER or the like and the BOF() might be on record 10 as well.
>>
>>Update:
>>FILTER
>>INDEX
>>ORDER
>>
>>That's what I remember out of the hip
>
>Yes, of course you are right. My example was for a table without order, without filter, and without deleted records (+ SET DELETED ON).
And then there's also the situation when the cursor contains buffered new records, with negative record numbers. Your Go Top may get you to record -4, then you tableupdate() that record and all of a sudden you may be on the last record - the same one, it's just that its record number has changed to positive. Which adds yet another situation when bof() and eof() need to be checked.