Ver Mensaje Individual
  #10  
Antiguo 10-04-2007
aprendiz2 aprendiz2 is offline
Miembro
 
Registrado: dic 2006
Posts: 70
Reputación: 18
aprendiz2 Va por buen camino
Si se puede !

Cita:
Empezado por francisco260184
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.. !!!!
Responder Con Cita