Ok, veamos tu código y dejo que tu saques primero conclusiones.
Cita: rs.Open "SELECT * FROM TBL_INCIDENCIA", miConexion, adOpenKeySet,
adLockOptimistic
Llenamos un objeto RecordSet con TODOS los campos y TODOS los registros de la tabla TBL_INCIDENCI, moviendonos hacia adelante o hacia atras pero sin observar los registros insertados y la bloquearemos cuando actualicemos registros. Desde antes de esta linea el objeto RS ya existía pero en esta lo llenas.
rs.PageSize = 1
De TODOS los registros obtenidos, a mi solo me interesa UNO, notese que no elimino los demás, solo indico que todo el RS esta paginado con igual número de registros y páginas.
if (Request.QueryString() <> "") then
En caso de que venga algún parámetro hagamos lo siguiente
select case Request.QueryString("accion")
case "Primero":
case "Anterior":
case "Siguiente":
Session("Pagina_Actual") = Session("Pagina_Actual") + 1
rs.AbsolutePage = Session("Pagina_Actual")
(Supongo omitiste el código de las otras constantes, pero también supongo que la idea es la misma) En caso de que hayan tomado la acción "Siguiente", incrementar la variable de sesión en uno y me ubico en la página seleccionada, como tengo tantas páginas como registros, es lo mismo que si hubiera colocado rs.AbsolutePosition = Session("Pagina_Actual") y sin haber paginado.
if Session("Pagina_Actual") > rs.RecordCount then
Session("Pagina_Actual") = Session("Pagina_Actual") - 1
rs.AbsolutePage = Session("Pagina_Actual")
end if
En caso que nos hayamos excedido del límite de registros, decremento la variable de sesión y "muevo" la página a dónde se supone ya estaba (por que de que otra forma se excede del útimo si no es presionando "Seguiente"), es decir, es una operación innecesaria.
case "Ultimo":
end select
else
rs.AbsolutePage = 1
Session("Pagina_Actual") = 1
Response.Write("Registros = [" & rs.recordcount & "]")
end if
Esta este momento el objeto sigue existiendo.
No tiene mucho sentido "paginar" un cursor de a un registro (el default creo son 10), aunque esa no era la pregunta, la diferencia de este método con GetRows es que el objeto RS esta "vivo" durante toda la operación, y con el otro trabajas con un Arreglo en momoria.
Si quieres continuar con tu método de recorrer el cursor de a uno en uno (con todo el problema que eso conlleva, llamadas al servidor para traer solo un registro al cliente, etc.) te recomiendo inténtes hacer el páginado en la tabla directamente y no me refiero en ASP, sino en el servidor de BD directamente y regreses al ASP solo ese registro o intentes obtener con un Where el registro exacto o no se.
Yo sigo en mi posición de que programar Web no es ni debe ser igual a la programación "convencional", no debes intentar recorrer de a uno en uno el cuursor.
En ASP.NET puedes recorrerlo de a uno en uno, pero por que se puede trabajar en un esquema xml y no hay llamadas al servidor de BD innecesarias, sino que en el esquema se hacen los corrimientos.
Mis 02/100 como diría U_G
Saludos