Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Hacer un Query de otro Query (https://www.clubdelphi.com/foros/showthread.php?t=42063)

francisco260184 03-04-2007 01:47:39

Hacer un Query de otro Query
 
:confused::confused: Hola, soy nuevo en esto del manejo de Delphi, antes programaba todo en VB.Net, pero por razones laborales tuve que migrar.
Mi pregunta es ¿Como se puede hacer un Query de otro Query?

Por ej.
SELECT q.campo1, q.campo2
FROM Query1 AS q;

Se puede o estoy totalmente perdido??
Gracias....

vtdeleon 03-04-2007 02:15:11

Que base de datos estas usando?

Saludos

francisco260184 03-04-2007 02:20:42

Cita:

Empezado por vtdeleon
Que base de datos estas usando?

Saludos

Estoy utilizando una BD en Paradox
:)

egostar 03-04-2007 03:18:12

No creo que con Paradox puedas hacer eso que quieres. Tal vez en otras bases de datos si, seria cuestión de probar.

Salud OS.

Ivanzinho 03-04-2007 09:39:53

¿Puedes dar más detalles de lo que realmente quieres?, ya que seguramente se puede hacer lo que necesitas, pero sera cosa de enfocarlo de otra manera.

Un saúdo

Loviedo 03-04-2007 11:08:23

Esta consulta me ha funcionado con Firebird 2.0, pero no con la 1.5.

Código SQL [-]
SELECT cuenta,titulo,sum(debe) as debe ,sum(haber) as haber FROM
SELECT cuenta,titulo,debe,haber FROM ldiario
WHERE fecha >= :Fecha1 and fecha <= :Fecha2
UNION ALL
SELECT cuenta,titulo,debe,haber FROM ldiarioh
WHERE fecha >= :Fecha1 and fecha <= :Fecha2
GROUP BY cuenta,titulo

Saludos.

poliburro 03-04-2007 16:32:26

Me parece increible que te haya funcionado como está.

Deberías escribirla de la siguiente manera:

Código SQL [-]
    Select Datos.Cuenta, Datos.Titulo, Sum(Datos.Debe) As debe, 
             Sum(Datos.Haber) As Haber 
      From (
              Select cuenta, titulo, debe, haber 
                From ldiario
              Where fecha >= :Fecha1 And 
                       fecha <= :Fecha2
              Union All
              Select cuenta,titulo,debe,haber 
                From ldiarioh
              Where fecha >= :Fecha1 And 
                        fecha <= :Fecha2
             ) As Datos
Group By Datos.Cuenta, Datos.Titulo
La identación no aplica solo a los lenguajes de programación mi amigo, una consulta correctamente indentada es mucho más facil de leerpor los demás. Suerte

Loviedo 03-04-2007 18:29:58

No se cual será la razón, pero lo cierto es que funciona.

Saludos.

Loviedo 03-04-2007 18:37:29

Perdón, llevas razón Poliburro.
Saludos y lo siento.

aprendiz2 10-04-2007 03:46:18

Si se puede !
 
Cita:

Empezado por francisco260184
:confused::confused: Hola, soy nuevo en esto del manejo de Delphi, antes programaba todo en VB.Net, pero por razones laborales tuve que migrar.
Mi pregunta es ¿Como se puede hacer un Query de otro Query?

Por ej.
SELECT q.campo1, q.campo2
FROM Query1 AS q;

Se puede o estoy totalmente perdido??
Gracias....

Hola !. Si se puede generar un query basado en los resultados del query anterior.... He encontrado 2 formas de hacerlo:

METODO "A"

1 - Desarrolla la instruccion SQL para el primer Query. Una vez que el primer Query este funcionando bien, guarda el texto de esa SQL en cualquier archivo de texto.

Ejemplo del Query1
Query1
SELECT C1,C2,C3
FROM Tabla1
... otras clausulas siguen...

( Guarda este texto en un archivo de texto simple... puedes usar el mismo editor de Delphi para guardarlo. Ponle el nombre que quieras, con la extension que quieras. Asumimos lo guardaste como "PrimerQuery.txt" )

2 - En el segundo Query, puedes escribir:

SELECT C1, C2, C3
FROM "PrimerQuery.txt"
... otras clausulas normales aqui...


Asi puedes "encadenar" un query con otro.

Puedes usar en el FROM algo asi como
FROM ":WORK:PrimerQuery.txt"

donde :WORK: es el alias que indica la ruta...
o puedes escribir la ruta normalmente: "C:\rutaX\nombre.abc"

Puedes usar la extension que desees, no tiene que ser .txt

OJO: Ya no es necesario llegar a ejecutar el primer Query !!!!
Con solo ejecutar el segundo query, basado en el texto que se guardo en el .txt, es suficiente !!!. ( Se desarrolla el primer query, solo para llegar a probar que funcione bien el texto que se guardara en el .txt )

-------------------

METODO "B"

1 - Desarrolla el primer Query, y coloca un objeto TBatchMove, ademas de un objeto TTable adicional ( digamos Table1 ).

En el TTable selecciona el DataBase ( alias / ruta ) y el nombre de un archivo en el TableName ( aunque no exista la tabla... eso no importa ).

Deja la propiedad Active=false en el Table1

En el TBatchMove,

a) indica que la tabla de salida (prop. Destination) es el Table1 del paso anterior,
b) Cambia la propiedad Mode para que sea batCopy .
c) Cambia la propiedad Source al Query1.

Una vez que hayas ejecutado el Query, echas a andar el BatchMove1 asi:

Query1.close;
Query1.open;
BatchMove1.Execute;

Podras verificar que ahora existe un archivo fisico ( real ) en el disco duro con los resultados del Query1. Tendra el nombre que asignaste en el Table1, en la carpeta referida en el DataBase del Table1.

Ojo: Si esa tabla ya existia en el disco duro, se perdera el contenido anterior.

Puedes cambiar el modo del TBatchMove para obtener diferentes procesos ( Append, Add-Append, etc... ).

Espero te sirva esto.. !!!!


La franja horaria es GMT +2. Ahora son las 04:27:59.

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