Delphi - unir dos queries

 
Vista:

unir dos queries

Publicado por Diego (85 intervenciones) el 25/02/2003 15:58:19
Hola
Mi pregunta es si es posible unir el resultado de dos queries, obtenidos con dos TQuery, en sólo un TQuery. El problema es que estoy trabajando con MySQL para Windows versión 3.23 y no soporta los UNION, por lo que tengo muchos problemas y lo anterior me podría ayudar.
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:unir dos queries

Publicado por Ernesto D'Spirito (706 intervenciones) el 25/02/2003 16:45:43
Si el motor de base de datos no soporta los UNION, una forma de lograr lo que quieres sería usando una tabla temporal para alojar los resultados, y puede ser una tabla en memoria como un TClientDataset o un KbmMemTable: http://www.optical.dk/delphi/prod01.htm

Espero que te sirva.

Ernesto D'Spirito
http://www.latiumsoftware.com/es/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:unir dos queries

Publicado por Diego (85 intervenciones) el 25/02/2003 18:34:04
Disculpa que te moleste nuevamente, pero ¿me podrías explicar un poco como utilizar el TClientDataSet?
¿Puedo ejecutar dos consultas usando dos TQuery y luego agregar los resultados al TClientDataSet?
¿Si es así, puedo usarlo después como Dataset de un QuickReport?

Disculpa que te pregunte estas cosas, pero la documentación no es muy clara al respecto.

Gracias de antemano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:unir dos queries

Publicado por Ernesto D'Spirito (706 intervenciones) el 25/02/2003 19:58:08
Un TClientDataset es como una tabla, pero en memoria.

Para cargar el ClientDataset con el resultado ambas consultas, una forma de hacerlo sería así:

Query1.Active := True;
Query1.First;
while not Query1.Eof do begin
ClientDataSet1.Append;
for i := 0 to Query1.FieldCount-1 do
ClientDataSet1[Query1.Fields[i].FieldName] := Query1.Fields[i].Value;
ClientDataSet1.Post;
Query1.Next;
end;
Query1.Active := False;

Y repites lo mismo para la segunda consulta. Hay otras formas de hacerlo, claro, pero espero que esa te resulte fácil de entender.

El ClientDataset hereda de TDataset y puedes usarlo como origen de datos para un reporte.

Ernesto D'Spirito
http://www.latiumsoftware.com/es/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:unir dos queries

Publicado por Diego (85 intervenciones) el 02/03/2003 01:00:57
Disculpa nuevamente, pero al llamar al método append del ClientDataSet, me aparece un mensaje de error que dice lo siguiente:

Cannot perform this operation on a closed dataset.

Entonces lo que hago es abrir el ClientDataSet con el método Open, pero entonces me aparece un mensaje de error que dice:

Missing data provider or data packet

y realmente ahí ya no sé qué hacer, porque no logro identificar alguna propiedad que me permite corregir este error. Debo aclararte que lo que hago es ejecutar dos queries, obviamente con dos TQuery, y luego pretendo agregar un campo de cada uno al ClientDataSet, aunque todavía no logro llegar a este punto, producto de los errores que te acabo de mencionar.

Te agradecería mucho que me ayudaras con este tema, porque necesito urgentemente solucionarlo. Tengo que hacer un reporte que no creo poder obtener de otra forma y me está atrasando en un proyecto.

Nuevamente disculpa las molestias que te pueda ocasionar, pero en estos momentos no sé a quién más recurrir.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:unir dos queries

Publicado por Diego (85 intervenciones) el 25/02/2003 18:36:24
Disculpa que te moleste nuevamente, pero ¿me podrías explicar un poco como utilizar el TClientDataSet?
¿Puedo ejecutar dos consultas usando dos TQuery y luego agregar los resultados al TClientDataSet?
¿Si es así, puedo usarlo después como Dataset de un QuickReport?

Disculpa que te pregunte estas cosas, pero la documentación no es muy clara al respecto.

Gracias de antemano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar