Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
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-07-2006
Avatar de CarlosHernandez
CarlosHernandez CarlosHernandez is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 21
CarlosHernandez Va por buen camino
Question ayuda con ibquery

hola a todos, trabajo con delphi 6.0 los comonentes de interbase y firebird 1.5, hago una consulta en un ibquery, luego otra consulta en otro ibquery, hay forma de unir o hacer un select a partir del resultado de los select que estan en los ibquery???? por ejemplo,

Código:
select * from "ibquery1" where fecha:=parfecha


y que ibquery1 no sea una tabla, si no una consulta que hice desde delphi

por ejemplo

Código:
ibquery2.sql.add('select * from "ibquery1" where nombre='+quotedstr(edit1.text)+'');

una locura mia....
ok yo se que el quotestr es para obtener el string de un componente o variable, pero por casualidad no abra un comando para que entienda el el ibquery como una tabla o algo....

lo intente con un procedimiento, pero me devuelve un solo registro y desde delphi me dice que hay multiple registros, asi que no me sirve
__________________
begin
Elverdugo79@hotmail.com
end;
Responder Con Cita
  #2  
Antiguo 19-07-2006
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
Hola Carlos!

¿Has intentado hacer una vista?

Cita:
Empezado por CarlosHernandez
lo intente con un procedimiento, pero me devuelve un solo registro y desde delphi me dice que hay multiple registros, asi que no me sirve
¿Cómo está hecho el procedimiento que mencionas? , ¿Cómo lo llamas desde Delphi?, los procedimientos en Firebird también pueden devolver un conjunto de registros.

¿Cómo es la consulta que muestras en IBQuery1?

Seguramente hay muchas alternativas para resolver lo que planteas, si proporcionas un poco más de información es más probable que obtengas una respuesta favorable.

Saludos
Responder Con Cita
  #3  
Antiguo 19-07-2006
nemesio nemesio is offline
Miembro
 
Registrado: nov 2005
Ubicación: Isla de Margarita, Venezuela
Posts: 377
Poder: 19
nemesio Va por buen camino
y por qué no pruebas hacer una sola consulta con las dos tablas que estás accesando por separado?

Saludos.
Responder Con Cita
  #4  
Antiguo 19-07-2006
Avatar de CarlosHernandez
CarlosHernandez CarlosHernandez is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 21
CarlosHernandez Va por buen camino
Unhappy

bueno, el procedimiento o hice por ibexpert, colocando unas variables de entrada y otra de salida, llame el procedimiento desde un query con sql como si fuera una tabla normal...
Código:
select * from new procedure......
y si lo reconoce y la puedo trabajar, y lo de la vista como se haria...

tengo 2 tablas en una datos que tengo nombre, apellido y codigo y en la otra tabla horas que tiene horaentrada, horasalida, fecha, codigo, lo unico comun es codigo, aja ahora bien, necesito sacar ejemplo del daepartamento de nomina que son 10 personas la 1 hora de entrada y la ultima de salida(que lo hice con min y max) pero de una persona y eso es lo que veo. ahora necesito las 10 juntas para un reportes tomando los nombre de la tabla datos, y las horas de entrada y salida de la tabla horas(y en esta ultima se hace el calculo respectivo) e alli unir 2 query....

y si me explica lo de la vista a ver si me funciona ahorita intento lo que sea...


agradezco cualquier ayuda
__________________
begin
Elverdugo79@hotmail.com
end;
Responder Con Cita
  #5  
Antiguo 20-07-2006
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
Hola Carlos!

No sé si entendí bien, prueba con esta consulta a ver que resulta

Código SQL [-]
SELECT datos.codigo, datos.nombre, datos.apellidos,
   MIN(horas.hora_entrada), MAX(horas.hora_salida)
FROM datos, horas
WHERE (datos.codigo=horas.codigo)
GROUP BY datos.codigo,datos.nombre,datos.apellidos

Saludos
Responder Con Cita
  #6  
Antiguo 20-07-2006
Avatar de CarlosHernandez
CarlosHernandez CarlosHernandez is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 21
CarlosHernandez Va por buen camino
ya lo habia hecho

hice un select parecido por no decir identico, y si lo hace, muestra todo, pero cuando hago un order by me duplica todos los registros.....
__________________
begin
Elverdugo79@hotmail.com
end;
Responder Con Cita
  #7  
Antiguo 20-07-2006
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
¿En base a qué campo estas ordenando?

¿Podrías mostrarnos cómo realizas tu consulta?

Saludos
Responder Con Cita
  #8  
Antiguo 20-07-2006
Avatar de CarlosHernandez
CarlosHernandez CarlosHernandez is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 21
CarlosHernandez Va por buen camino
codigo

Código SQL [-]
select min(h.he), max(h.hs), d.codigo, d.nombre, d.apellido, h.he from horas h, datos d
where d.ubicacion = : parubicacion and h.fecha = : parfecha group by d.codigo, d.nombre, d.apellido, h.he
order by h.he


los parametros son ubicacion y fecha, si no le coloco el order by lo hace pero todo desordenado, y con el order bey los duplica y se vuelve loco.....
__________________
begin
Elverdugo79@hotmail.com
end;
Responder Con Cita
  #9  
Antiguo 20-07-2006
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
Algo está mal en la agrupación

No deberías mostrar el campo hora de entradas h.he en la consulta si es que vas a obtener un calculado del mismo en este caso min(h.he)

Es por eso que te repite los registros.

¿Cuál es la finalidad de mostrar este campo?, en caso de que sea necesario mostrarlo, ¿Cuál de todas las horas de entrada quieres mostrar cuando hagas la agrupación?

Saludos
Responder Con Cita
  #10  
Antiguo 20-07-2006
Avatar de CarlosHernandez
CarlosHernandez CarlosHernandez is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 21
CarlosHernandez Va por buen camino
volviendo otra vez yo

aja y volviendo a la pregunta original(sigo de ladilla) no hay forma de manejar un ibquery(los registro desvueltos) como si fuera una tabla.. es por ejemplo hacerle un select al ibquery1 pero por el ibquery2

esto iria en el ibquery2

Código SQL [-]
select * from "ibquery1" where fecha:=parfecha
__________________
begin
Elverdugo79@hotmail.com
end;
Responder Con Cita
  #11  
Antiguo 20-07-2006
Avatar de CarlosHernandez
CarlosHernandez CarlosHernandez is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 21
CarlosHernandez Va por buen camino
bueno, por ejemplo, son 10 persona en un departamento, y necesito la 1 entrada y ultima salida de cada una.... en la tabla hora estan todas las horas por eso es que uso el min y el max... y por supuesto necesito ver las 10 personas que esten en un mismo departamento...
__________________
begin
Elverdugo79@hotmail.com
end;
Responder Con Cita
  #12  
Antiguo 20-07-2006
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
Con respecto a la pregunta original, en la versión 2.0 de Firebird existen las Derived
Tables
con esto puedes hacer lo que planteas.

Para las versiones anteriores, seguro que se puede lograr con procedimientos almacenados.

Saludos
Responder Con Cita
  #13  
Antiguo 20-07-2006
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
¿Lo has intentado quitando el campo h.he?

Código SQL [-]
select min(h.he), max(h.hs), d.codigo, d.nombre, d.apellido from horas h, datos d
where d.ubicacion = : parubicacion and h.fecha = : parfecha group by d.codigo, d.nombre, d.apellido
order by 1
Responder Con Cita
  #14  
Antiguo 20-07-2006
Avatar de CarlosHernandez
CarlosHernandez CarlosHernandez is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 21
CarlosHernandez Va por buen camino
listo

hector, con lo del 1 ya se soluciono lo de los registeros duplicado, y lo que hice para terminar el codigo le agregue un left join para mostrar a todo el mundo de personal.... ey hermano altamente agradecido a y una pregunta final porque con el 1(numero de columna) no se duplica, y si pongo h.he si se duplica?????
__________________
begin
Elverdugo79@hotmail.com
end;
Responder Con Cita
  #15  
Antiguo 20-07-2006
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
En tu sentencia estas indicando que agrupe con respecto a tres campos:
(codigo,nombre,apellido)

todas las tuplas que coincidan en estos tres campos serán agrupadas por ejemplo

Código:
codigo nombre       apellido          he
===== =====       =======       ====
1         carlos        hernandez       1
1         carlos        hernandez       2
1         carlos        hernandez       4
1         carlos        hernandez       2
------------ grupo 1 ------------
2         hector        randolph         6
2         hector        randolph         1
2         hector        randolph         1
2         hector        randolph         2
2         hector        randolph         5
------------ grupo 2 ------------
Si pides el mínimo de cada grupo el resultado sería

Código:
codigo nombre       apellido          MIN(he)
===== =====       =======       ====
1         carlos        hernandez       1
2         hector        randolph        1
Si incluyes el campo he la agrupación sería por estos cuatro campos:
(codigo,nombre,apellidos,he)

Todas las tuplas que coincidan en estos cuatro campos serán agrupadas

Código:
codigo nombre       apellido          he
===== =====       =======       ====
1         carlos        hernandez       1
------------ grupo 1 ------------
1         carlos        hernandez       2
1         carlos        hernandez       2
------------ grupo 2 ------------
1         carlos        hernandez       4
------------ grupo 3 ------------
2         hector        randolph         6
------------ grupo 4 ------------
2         hector        randolph         1
2         hector        randolph         1
------------ grupo 5 ------------
2         hector        randolph         2
------------ grupo 6------------
2         hector        randolph         5
------------ grupo 7 ------------
Ahora si pides el mínimo de cada grupo el resultado sería

Código:
codigo nombre       apellido          he      MIN(he)
===== =====       =======       ====   =====
1         carlos        hernandez       1       1
1         carlos        hernandez       2       2
1         carlos        hernandez       4       4
2         hector        randolph         6       6
2         hector        randolph         1      1
2         hector        randolph         2      2
2         hector        randolph         5      5
Observa bien la manera en que se están agrupando los registros, y verás que si hay una gran diferencia cuando incluyes el campo he

Saludos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Refresh de un IBQuery perillan Conexión con bases de datos 1 28-08-2005 21:43:12
Filter en IBQuery StartKill Firebird e Interbase 1 27-08-2005 07:51:06
IBUpdateSQL - IBQuery dmagui Firebird e Interbase 3 11-07-2005 17:59:54
IBdataset y IBQuery vtdeleon Firebird e Interbase 2 17-05-2005 23:05:29
IBQuery y Rave pkbza Conexión con bases de datos 0 14-08-2004 00:35:56


La franja horaria es GMT +2. Ahora son las 02:03:47.


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