Ver Mensaje Individual
  #7 (permalink)  
Antiguo 04/10/2006, 07:37
Avatar de MACGREGOR
MACGREGOR
 
Fecha de Ingreso: enero-2005
Mensajes: 89
Antigüedad: 19 años, 4 meses
Puntos: 0
De acuerdo Teoria De Conjuntos

Hola.

Tal y como te han indicado puedes utilizar ese tipo de consulta para mostrar rangos... pero yo te recomiendo realizar lo siguiente.

Si sabes que siempre vas a mostrar de 9 en 9 los registros solamente necesitas tener claro que tienes un conjunto de datos a mostrar y quieres hacerlo en subconjuntos de 9 elementos en un cierto orden.

La solución la obtendrías a partir de una variable que te diga cuantos subconjuntos has enseñado ya. Piensalo como 3 conjuntos.

1. conjunto de registros ya enseñados.
2. conjunto de 9 registros a mostrar.
3. conjunto con el resto de registros hasta el final. (este lo necesitarás para controlar la última página)

Solo necesitas la instrucción TOP y una variable y puedes crear el primero de los conjuntos.

"Select top 9 ...."

El segundo subconjunto lo puedes calcular de forma muy parecida.
Pides a tu DB que te muestre todos los registros hasta tu variable "Select top 18 ... " y le quitas los que están incluidos en el primer subconjunto.
(Nos interesan los que no están en la intersección de los dos conjuntos).

Select top 18 .... MINUS Select top 9 ...

De esta manera tendrás como resultado de tu consulta 9 registros en el orden que tu quieras (los puntos suspensivos son el resto de la consulta que ha de ser idéntica en todos los casos, mismos campos y mismo orden).
Esto te sirve en cualquier tabla sin tener que utilizar un campo númerico, ya que ahun en el caso de que sea clave primaria y autoincrementado no tienen porqué ser consecutivos. (Si borras algún registro aparecen "saltos" en la secuencia)

Te recomiendo que para tratar tu variable utilices el ordinal correspondiente al último registro mostrado,(al empezar has enseñado 0 registros, es decir si vas a mostrar los registros del 90 al 99 utilices el 90 como referencia, así podras poner en tu senténcia SQL "Select top 90+9 ..." (el +9 lo puedes poner en todas las consultas a modo de constante y incrementar de 9 en 9 tu variable).

Esto lo digo porque así te ahorras tener que tratar el primer caso ya que
harías "Select top 0+9 .... MINUS Select top 0..." (tu variable inicialmente es 0 y eliminarías el conjunto vacío, resultado ok, luego la incrementas tu variable en 9). Esto lo digo porque no sé que devolvería Access en caso de que te descuides del primer caso y le digas "Select top -9..." (los nueve últimos? todos menos los 9 últimos? error?)

Espero que te ayude :D

PD: Ten en cuenta que todo lo que te he dicho es cierto excepto lo de mostrar de 9 en 9 los elementos por página.
Motivo: Select top 9... en caso de empate entre la posición 9 y la 10 no devuelve 9, devuelve 10 registros...

Por eso en muchos otros sistemas gestores de Bases de Datos existen instrucciónes como rank o denserank.

Última edición por MACGREGOR; 04/10/2006 a las 07:58