Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-10-2013
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Seleccionar primer registro con ADOQuery

Hola amigos:
Nuevamente solicito su inestimable ayuda para resolver un problema que me trae complicado.
En una BD Access tengo dos tablas:

TABLASERIES : STUDYUID, SERIESUID
TABLAIMAGES: STUDYUID, SERIESUID, INSTANCEUID

Los campos STUDYUID y SERIESUID son comunes. Lo que necesito es obtener el primer registro del campo INSTANCEUID para cada una de las SERIESUID.
He utilizado el siguiente código, pero sólo me devuelve 1 registro (INSTANCEUID) a pesar de que existan varias SERIESUID :

Código Delphi [-]
begin
ListBox2.Items.Clear;
ADOQuery8.Close;
ADOQuery8.SQL.Clear;
ADOQuery8.Sql.text:='select SERIESUID from TABLASERIES where STUDYUID like '+QuotedStr(DBEditID.Text+'%') ;
ADOQuery8.Open;
ADOQuery8.First;
while not ADOQuery8.Eof do
begin
ADOQuery6.Close;
ADOQuery6.SQL.Clear;
ADOQuery6.Sql.text:='select first(INSTANCEUID) from TABLAIMAGES where SERIESUID like '+QuotedStr(ADOQuery8.FieldValues['SERIESUID']+'%') ;
ADOQuery6.Open;
ListBox2.Items.Add(ADOQuery6.FieldByName('INSTANCEUID').AsString);
ADOQuery8.Next;
end;
end;

Cualquier ayuda es bien recibida.
Saludos y muchas gracias
Responder Con Cita
  #2  
Antiguo 30-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Ivan.
Cita:
Lo que necesito es obtener el primer registro del campo INSTANCEUID para cada una de las SERIESUID
Si se trata de obtener el primer INSTANCEUID de todas y cada una de las SERIESUID de la tabla TABLAIMAGES, en Firebird la consulta sería :
Código SQL [-]
SELECT DISTINCT T1.SERIESUID,
    (SELECT FIRST 1 T2.INSTANCEUID FROM TABLAIMAGES T2 WHERE T2.SERIESUID = T1.SERIESUID)
FROM TABLAIMAGES T1
No tengo manera de probar en Access ya que no lo uso, pero por lo que veo de tu sintáxis creo que sería algo como:
Código SQL [-]
SELECT DISTINCT T1.SERIESUID,
    (SELECT FIRST (T2.INSTANCEUID) FROM TABLAIMAGES T2 WHERE T2.SERIESUID = T1.SERIESUID)
FROM TABLAIMAGES T1

En Delphi:
Código Delphi [-]
  with tuADOQuery do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT DISTINCT T1.SERIESUID,');
    SQL.Add('(SELECT FIRST (T2.INSTANCEUID) FROM TABLAIMAGES T2 WHERE T2.SERIESUID = T1.SERIESUID)');
    SQL.Add('FROM TABLAIMAGES T1');
    Open;
  end;


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 30-10-2013
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Hola Daniel.
Un placer saludarte nuevamente y agradecerte tu siempre excelente ayuda.
Probaré los códigos y te cuento.
Saludos
Responder Con Cita
  #4  
Antiguo 30-10-2013
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Muchas gracias Daniel.
Por lo que veo yo andaba más perdido que otras veces.
El código final que funciona como lo que necesitaba es :

Código Delphi [-]
begin
ListBox2.Items.Clear;
with ADOQuery6 do
begin
ADOQuery6.Close;
ADOQuery6.SQL.Clear;
ADOQuery6.SQL.Add('Select distinct T1.SERIESUID');
ADOQuery6.SQL.Add('(Select first(T2.INSTANCEUID) from IMAGES T2 where T2.SERIESUID = T1.SERIESUID)');
ADOQuery6.SQL.Add('from IMAGES T1');
ADOQuery6.SQL.Add('where STUDYUID like '+QuotedStr(DBEditID.Text+'%'));
ADOQuery6.Open;
ADOQuery6.First;
while not ADOQuery6.Eof do
begin
ListBox2.Items.Add(ADOQuery6.FieldByName('Expr1000').AsString);
ADOQuery6.Next;
end;
end;
end;

Mi conocimiento de Sql es bastante pobre y en este código hay cosas que no comprendo y que van en contra de mis estandares, como el hecho de que la claúsula lleve 2 from y 2 where ¿?

Un abrazo
Responder Con Cita
  #5  
Antiguo 30-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Iván.

El código dice mas o menos:
Cita:
Seleccioname cada uno de los distintos ALIAS_1.SERIESUID y para cada uno,
(Seleccioname el primer ALIAS_2.INSTANCEUID desde TABLAIMAGES ALIAS_2 donde ALIAS_2.SERIESUID sea igual a ALIAS_1.SERIESUID)
desde TABLAIMAGES ALIAS_1
Es decir que para cada INSTANCEUID, ejecuta el SELECT entre paréntesis, que es el encargado de seleccionar el primer INSTANCEUID que cumpla la condición: ALIAS_2.SERIESUID igual a ALIAS_1.SERIESUID.

Espero no haberte embrollado más con la explicación... Tal vez te resulte mas sencillo enterderlo revisando el uso de los ALIAS.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 30-10-2013 a las 21:46:55.
Responder Con Cita
  #6  
Antiguo 30-10-2013
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Muchas gracias por tus explicaciones.
Me voy a entretener leyendo en el link que me enviaste y a lo mejor aprendo algo de Sql.

Saludos y gracias
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Primer registro y ultimo registro Jose Roman OOP 4 26-07-2012 19:29:11
Seleccionar primer registro en la Clausula WHERE para Actualizar Valor. Adrian Murua MySQL 3 28-05-2012 22:52:14
Seleccionar primer y ultimo registro Jose Roman Firebird e Interbase 14 19-08-2008 20:35:46
Primer registro de un ClientDataSet?? Berto2003 Varios 4 13-03-2007 17:24:49
Primer Registro alcides Varios 5 04-05-2005 17:34:37


La franja horaria es GMT +2. Ahora son las 05:31:43.


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