Luego de revisar cuidadosamente el comportamiento que mencionas concluyo que es un bug. Aún cuando no he encontrado referencia alguna en la página del proyecto Zeos, es, desde mi punto de vista un error.
Este error se produce en el método InternalCancel de la clase TZAbstractDataset en la unidad ZAbstractDataset.pas:
Código:
if (CachedResultSet <> nil) and GetActiveBuffer(RowBuffer)
and (CurrentRow > 0) then
begin
RowNo := Integer(CurrentRows[CurrentRow - 1]);
CachedResultSet.MoveAbsolute(RowNo);
RowAccessor.RowBuffer := RowBuffer;
FetchFromResultSet(CachedResultSet, Fields, RowAccessor);
end;
Supongo que el error se debe a que al no haberse introducido datos, CurrentRows no contiene el nuevo registro. Aparentemente si añades la condición
and (CurrentRow < CurrentRows.Count)
al condicional, se arregla. Pruébalo y nos cuentas.
// Saludos