![]() |
Moverse entre Reg. como First,Next,Last...
Saludos...
Mi duda es precisamente esa. Como puedo hacer para posicionarme al primero, al siguiente o al ultimo registro de una Consulta, es decir, moverme entre los registros de una consulta sin necedad de hacer un ciclo. Saludos...y gracias de antemano. |
Utilizando todos los métodos que has nombrado, pero no dentro de un ciclo!
La pregunta es para que necesitas esto, si quieres que el usuario decida, pondrás un botón por cada metodo y/o un navegador. |
Perdon....he cometido al error de muchos de no explicarme bien y detalar el problema.
Dejenme intentarlo nuevamente. Tengo un Store Procedure, dentro del cual, realizo un a consulta la cual me retorno un listado de varios registros, de los, cuales el que me sirve y lo que deseo hacer es posicionarme sobre el ultimo registro, sin necesidad de realizar un barrido en un ciclo y llegar hasta el ultimo. No lo puedo hacer tomando el Max() del campo por que no siempre es el maximo. De igual manera provecho para preguntar como moverme al anterior o al siguiente. Espero haberme explicado un poco mejor en esta ocasion. Saludos.....y gracias again. |
Ahora si!... me parecía demaciado rara la pregunta anterior! :D
Los registros... ¿Tiene un ID ordinal?... alguna fecha... algo con lo que puedas delucidar cual es el último registro... Si es así, puedes hacer algo como esto: Código:
SELECT ID, NOMBRE |
Deja poner un ejemplo que lo explique mejor.
La consulta dentro del SP me devuelve algo asi: ID EMP FECHA HORA TIPO =============================== 10 393 1/SEP/03 6:00 ENTRADA 25 393 1/SEP/03 16:00 SALIDA 32 393 2/SEP/03 5:58 ENTRADA 73 393 2/SEP/03 16:06 SALIDA 58 393 3/SEP/03 5:55 ENTRADA 67 393 3/SEP/03 16:15 SALIDA Por cuestiones del cliente, requiero posicionarme en el ultimo registro que me arroja esta consulta,es decir, en este caso, seria el registro ID: 67, pero no puedo hacer tomando el Max(ID) ya que este es un Campo Autoincrementable, donde no siempre el MAX(ID) es el registro que necesito o que ando buscando. Ej. Busco el ultimo registro que seria el ID: 67, y con el MAX(ID) me regresaria el registro ID: 73, que no es el que deseo. Utilizo Firebird 1.0.397 Gracias por su ayuda. |
Primero quisiera que me digas cual es tu criterio para saber cual es el último registro, luego quiero comentarte que por convensión ANSI los registrso en motores ANSI SQL no necesariamente tienen que estar guardados en la base de datos en orden de "ingreso"... digamos que si no tienes ningún campo que los ordene nadie te garantiza que el último registro tenga un criterio lógico..
|
Porque no haces un "Order by fecha asc" en tu consulta y luego utilizas last con el objeto que contenga el resultado de la consulta?
Sino puedes poner el la consulta "select TOP 1 ..... order by fecha desc" Entendi bien el problema ?:confused: |
Si fuera por fecha, podrías usar el mismo query que te pasé al comienzo, pero con el campo fecha en lugar de ID:
Código:
SELECT ID, NOMBRE |
Hola.
¿ Porqué no quieres utilizar comandos Last ?. ¿ Que problema hay en abrir el TStoredProc, posicionarte en el ultimo registro con un Last, y averiguar el código ?. Saludos. |
Bueno, no se si hemos entendido el problema o no, pero para moverte por un Dataset tienes que utilizar las propiedades First (primero), Prior (anterior), Next (siguiente) y Last (último)
Pero soy de la opinión de Delphi.com.ar. Si puedes, intenta hacer que el SP te devuelva sólo el registro que quieres o nocesites |
Muchas gracias a todos por contestar.
Dejen ampliar el problema. Al igual que uds soy de la idea de-en este caso- de que el SP me retorne un solo registro, que es precisamente lo que deseo hacer. Ahora bien , el criterio que se utiliza para saber cual es el ultimo registro es el siguiente: En base al ejemplo que expuse, el ultimo registro del empleado 393 seria el la ultima checada registrada ya fuera entrada o salida, con su respectiva hora y fecha del momento en que se registro dicha checada. El ID es olo un autoincrementable. Todo el calculo lo realizo en el SP que me regresa solo un registro, por eso mismo, no puedo utilizar un last, next u lo que sea desde el objeto que manda llamar mi SP. Gracias nuevamente por su ayuda. |
Hola
La ultima entrada de un usuario, la puedes sacar con una consulta como esta (tiene una subconsulta) : select * from ENTRADAS where ID = (select max(ID) from ENTRADAS where USUARIO = :USUARIO) Lo puedes lanzar con un Query, o bien crear un procedimiento almacenado y ejecutarlo en el procedimiento almacenado. Saludos. |
Hola
Sería algo así: Código:
select * En el caso de que sean en campo separados, tendrias que sumarlos dentro del MAX para obtener el máximo adecuado que buscas. Saludos |
No se en que motor estas trabajando, pero no veo válido el "having MAX(FECHA+HORA)"
PD: en unos cuantos post anteriores yo he puesto el query Código:
SELECT ID, NOMBRE Código:
SELECT ID, NOMBRE Código:
SELECT ID, NOMBRE Saludos! |
La franja horaria es GMT +2. Ahora son las 02:53:30. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi