Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-09-2003
cacuna cacuna is offline
Miembro
 
Registrado: Sep 2003
Posts: 54
Poder: 15
cacuna Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 19-09-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: May 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.874
Poder: 21
delphi.com.ar Va por buen camino
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.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 19-09-2003
cacuna cacuna is offline
Miembro
 
Registrado: Sep 2003
Posts: 54
Poder: 15
cacuna Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 19-09-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: May 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.874
Poder: 21
delphi.com.ar Va por buen camino
Ahora si!... me parecía demaciado rara la pregunta anterior!

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
FROM USUARIOS
WHERE ID = (SELECT MAX(D.ID) FROM USUARIOS D)
Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 19-09-2003
cacuna cacuna is offline
Miembro
 
Registrado: Sep 2003
Posts: 54
Poder: 15
cacuna Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 19-09-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: May 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.874
Poder: 21
delphi.com.ar Va por buen camino
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..

__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.

Última edición por delphi.com.ar fecha: 19-09-2003 a las 21:22:42.
Responder Con Cita
  #7  
Antiguo 19-09-2003
Viet Viet is offline
Miembro
 
Registrado: Jul 2003
Ubicación: Argentina - Mar del Plata
Posts: 252
Poder: 15
Viet Va por buen camino
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 ?
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;)
Responder Con Cita
  #8  
Antiguo 19-09-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: May 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.874
Poder: 21
delphi.com.ar Va por buen camino
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
FROM USUARIOS
WHERE FECHA = (SELECT MAX(D.FECHA) FROM USUARIOS D)
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #9  
Antiguo 19-09-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: May 2003
Ubicación: Huelva
Posts: 2.638
Poder: 18
guillotmarc Va por buen camino
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #10  
Antiguo 20-09-2003
cadetill cadetill is offline
Miembro
 
Registrado: May 2003
Posts: 3.387
Poder: 19
cadetill Va por buen camino
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
Responder Con Cita
  #11  
Antiguo 23-09-2003
cacuna cacuna is offline
Miembro
 
Registrado: Sep 2003
Posts: 54
Poder: 15
cacuna Va por buen camino
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.
Responder Con Cita
  #12  
Antiguo 24-09-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: May 2003
Ubicación: Huelva
Posts: 2.638
Poder: 18
guillotmarc Va por buen camino
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #13  
Antiguo 25-09-2003
Aprendiz Aprendiz is offline
Miembro
 
Registrado: May 2003
Posts: 78
Poder: 16
Aprendiz Va por buen camino
Hola

Sería algo así:

Código:
select * 
from ENTRADAS
where ID = (select ID from ENTRADAS where USUARIO = :USUARIO group by ID having MAX(FECHA+HORA))
Y dicho esto viene otra pregunta aclaratoria, la fecha y la hora las tienes en campos separados o es uno solo.

En el caso de que sean en campo separados, tendrias que sumarlos dentro del MAX para obtener el máximo adecuado que buscas.

Saludos
__________________
[Aprendiz]: Por que siempre hay algo nuevo que aprender.

Última edición por Aprendiz fecha: 25-09-2003 a las 18:02:02.
Responder Con Cita
  #14  
Antiguo 25-09-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: May 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.874
Poder: 21
delphi.com.ar Va por buen camino
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
FROM USUARIOS
WHERE FECHA = (SELECT MAX(D.FECHA) FROM USUARIOS D)
que toma solamente la fecha, habría que adaptarlo para que tome la fecha+hora, y creo sería la solución

Código:
SELECT ID, NOMBRE
FROM USUARIOS
WHERE FECHA = (SELECT MAX(D.FECHA+D.HORA) FROM USUARIOS D)
y si quiere filtrarlo por usuario

Código:
SELECT ID, NOMBRE
FROM USUARIOS O
WHERE FECHA = (SELECT MAX(D.FECHA+D.HORA) FROM USUARIOS D WHERE O.EMP = D.EMP)
AND EMP = :USUARIO
Perosnalmente prefiero trabajar Fecha y Hora en un mismo campo.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:33:29.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi