When I have a recordset come back from the database (LockType = adLockBatchOptimistic, CursorType = adOpenStatic and CursorLocation = adUseClient) I know it is probably good practice to do a recordset.MoveFirst on that recordset before performing any actions with it, but I am just curious as to whether or not the MoveFirst is necessary? It seems as if the default cursor location is on the first record...is this true?