PDA

Ver la Versión Completa : Consultar en memoria


Vlady
16-12-2008, 16:36:29
Hola amigos del club delphi gracias por sus valiosa colaboración, pero ahora tengo otra dificultad, tengo un procedimiento que realiza varias subconsultas y me retorna un resultado de la combinación de varias tablas, el problema que tengo es q no deseo realizar la consulta desde la base de datos cada vez q lo requiera, si no q deseo realizar la consulta una vez se corra el programa y luego en base a los resultado q se encuntran en memoria realizar los select q necesite pero en base a los resultados q ya consulte sin volver hasta la base de datos para economizar tiempo el problema es q no se como se puede realizar una consulta a un Query q solo se encuntra cargado en memoria. Si alguien me puede ayudar le agradeceria. Utilizao Firebird 2.0 y delphi 7.

Gracias

duilioisola
16-12-2008, 18:31:58
Las RX (unos componentes) contienen uno que se llama RxMemoryData.

De todos modos, si abres una tabla con tu consulta y obtienes todo los datos, no deberás volver a lanzar la consulta cada vez.
Muévete con Tabla.Next, Tabla.Prior (adelanta, atras) y Tabla.First, Tabla.Last (primero, último)
Los datos estarán allí hasta que cierres la tabla.

juanelo
16-12-2008, 18:42:36
Puedes usar un ClientDataset y usar la propiedad Filter y Filtered.
Asi puedes recortar tu consulta en memoria a la hora de presentarla, usando condiciones que pondrias en "where".
Saludos.

pcicom
16-12-2008, 20:49:32
PUEDES CREAR VISTAS DEFINENTO LA LOGICA DE TU COMANDO SQL, UNA VES CREADA ESTA VISTA, ESTA PUEDE SER UTILIZADA COMO UNA TABLA de tu BD..

ejemplo:


CREATE VIEW CLIENTES_CREDITO (CLIENTE, NOMBRE)
AS
SELECT CLIENTE,NOMBRE FROM CLIENTES WHERE TIPO='CREDITO';



Podrias consultar en el caso a los clientes unicamente asi..


SELECT * FROM CLIENTES_CREDITO;


Y o tambine en el caso de relaciarlos con otro dato podria ser algo asi..


SELECT a.CLIENTE,a.NOMBRE,b.FACTURA,b.VALOR FROM FACTURAS b
LEFT JOIN clientes_contado a ON a.CLIENTE=b.CLIENTE;


Esta es la finalidad de las VISTAS... simplificar los metodos de consulta..

Neftali [Germán.Estévez]
17-12-2008, 09:04:37
Yo utilizaría TClientDataset, eso te facilitará tener ese bloque da datos en memoria con el código que tienes ahora sin toar nada; Sólo debes añadir ese componente a tu formulario (y conectarlo con tu Query) y una vez ejecutada la consulta cargará los datos a memoria.
A partir de ahí ya puedes cerrar el query y trabajar con esos datos.

Lo que no podrás hacer son nuevas consultas SELECT como comentas; Para trabajar con esos datos, como te ha dicho podrás hacer recorrridos, filtros, ordenaciones, pero no SELECT.

poliburro
17-12-2008, 16:36:36
Hola amigos del club delphi gracias por sus valiosa colaboración, pero ahora tengo otra dificultad, tengo un procedimiento que realiza varias subconsultas y me retorna un resultado de la combinación de varias tablas, el problema que tengo es q no deseo realizar la consulta desde la base de datos cada vez q lo requiera, si no q deseo realizar la consulta una vez se corra el programa y luego en base a los resultado q se encuntran en memoria realizar los select q necesite pero en base a los resultados q ya consulte sin volver hasta la base de datos para economizar tiempo el problema es q no se como se puede realizar una consulta a un Query q solo se encuntra cargado en memoria. Si alguien me puede ayudar le agradeceria. Utilizao Firebird 2.0 y delphi 7.

Gracias

Pues, si tu deseas hacer consultas sobre el resultado de una consulta en particular te aconsejo uses ADO. El esquema sería el siguiente:

Obtienes el resultado de la consulta de firebird y lo guardas en formato csv o xls en el disco duro del usuario.

Una vez que generaste ambos archivos conectas ADO con estos origenes de datos y puedes ejecutar consultas sobre ellos.


Como mencionan previamente. TClientDataset puede ser otra opción. Saludos