Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consultar en memoria (https://www.clubdelphi.com/foros/showthread.php?t=62316)

Vlady 16-12-2008 16:36:29

Consultar en memoria
 
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:

Código SQL [-]
   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..

Código SQL [-]
   SELECT * FROM CLIENTES_CREDITO;

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

Código SQL [-]
    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

Cita:

Empezado por Vlady (Mensaje 331136)
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


La franja horaria es GMT +2. Ahora son las 11:37:46.

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