Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-07-2019
LIA_GUILLERMO LIA_GUILLERMO is offline
Miembro
 
Registrado: feb 2016
Posts: 32
Poder: 0
LIA_GUILLERMO Va por buen camino
Obtención de Array de un Componente de Base de datos

Buen día primero expondré mi caso:

Tengo por medio de Firebird 2.5 una BD la cual tiene 5 tablas de momento (Config, EA, SA, ED, SD) en las últimas 4 es en donde se concentra la mayor información, en esas tablas se tienen los mismos campos (Indice, Valor, Fecha_Hora, Status).

Mi problema es el siguiente:

Al realizar la lectura de la base de datos lo hago con un TFDQuery para posteriormente vaciar los resultados en una Collection, el detalle que tengo es que al ser una gran cantidad de datos conlleva un tiempo considerable, me gustaría saber si existe una forma de poder obtener todos los datos de la Query o de algún otro complemento de Delphi como si fuera una Matriz o que otra opción sería viable para este tipo de casos.

Sin más por el momento espero me puedan ayudar a comprender y entender mejor el tema para poder darle solución.
Responder Con Cita
  #2  
Antiguo 26-07-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por LIA_GUILLERMO Ver Mensaje
Sin más por el momento espero me puedan ayudar a comprender y entender mejor el tema para poder darle solución.
Eso pensamos nosotros, no se entiende lo que explicas.
Responder Con Cita
  #3  
Antiguo 26-07-2019
WHILENOTEOF WHILENOTEOF is offline
Miembro
 
Registrado: mar 2008
Posts: 229
Poder: 17
WHILENOTEOF Va camino a la fama
Bueno esa "matriz" la tienes ya en el componente FDQuery (columnas-campo x filas-registro), puedes intentar optimizar con cursores unidireccionales y propiedades de la transacción que se utiliza para traerte los datos, que sea solo de lectura.
Responder Con Cita
  #4  
Antiguo 26-07-2019
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
1- ¿Por qué vuelcas el contenido de la consulta en un collection?
2- Como te dice WHILENOTEOF, Ya en el Query tienes los datos listados
3- ¿Por qué vuelcas el contenido de la consulta en un collection?
4- ¿¡Por qué!?
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #5  
Antiguo 27-07-2019
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Poder: 16
orodriguezca Va por buen camino
A las preguntas que hizo movorack yo agregaría:

- ¿ Cuantos registros son esa gran cantidad de datos ?
- ¿ Cuanto tiempo, en segundos o minutos, es un tiempo considerable?

Es posible que el problema no este del lado de la aplicación sino del lado de la base de datos.
Responder Con Cita
  #6  
Antiguo 27-07-2019
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
incluiria tambien
la forma en que se esta conectando, usas ADO ? ODBC ? alguna otra forma?
aunque viendo el componente que usas, lo haces utilizando FireDAC
en ese caso deberias colocar tambien la cadena con la cual estas "jalando" los datos de esas tablas

creeme hay una enorme diferencia entre

Código SQL [-]
select * from Tabla1 t1
left join Tabla2 t2 on t1.Campo1 + T1.Campo2 = t2.Campo1 + T2.Campo2
y

Código SQL [-]
select * from Tabla1 t1
left join Tabla2 t2 on t1.Campo1 = t2.Campo1  and T1.Campo2 = + T2.Campo2


se supone que este tipo de base de datos es mucho mas potente y rapido que las tablas convencionales
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #7  
Antiguo 01-08-2019
LIA_GUILLERMO LIA_GUILLERMO is offline
Miembro
 
Registrado: feb 2016
Posts: 32
Poder: 0
LIA_GUILLERMO Va por buen camino
Cita:
Empezado por movorack Ver Mensaje
1- ¿Por qué vuelcas el contenido de la consulta en un collection?
2- Como te dice WHILENOTEOF, Ya en el Query tienes los datos listados
3- ¿Por qué vuelcas el contenido de la consulta en un collection?
4- ¿¡Por qué!?

R1.- La paso a una Collection para mandarsela a un TChart que se va a encargar de graficar los cambios.
R2.- Si el Query ya me trae los datos pero como quería pasar esos datos a la TChar por eso los mando a la Collection.
Responder Con Cita
  #8  
Antiguo 01-08-2019
LIA_GUILLERMO LIA_GUILLERMO is offline
Miembro
 
Registrado: feb 2016
Posts: 32
Poder: 0
LIA_GUILLERMO Va por buen camino
Cita:
Empezado por orodriguezca Ver Mensaje
A las preguntas que hizo movorack yo agregaría:

- ¿ Cuantos registros son esa gran cantidad de datos ?
- ¿ Cuanto tiempo, en segundos o minutos, es un tiempo considerable?

Es posible que el problema no este del lado de la aplicación sino del lado de la base de datos.


1- Los registros son variables, es un SCADA que registra nuevos valores cada 5 o 10 seg, y además la consulta que se hace es dependiendo lo que el usuario quiera ver, si quiere ver los cambios que han surgido en 2 hrs, 1 día o 5 días.
2- Bueno por lo que he medido para 2 hrs o 2 días se tarda lo mismo, seria 1 min 34 seg, 34 seg se lleva trayendo datos y pasarlos a la Collection y lo demás en pintarlo a la TChart.

Yo tengo el complemento TChart Lite, ayer estaba yo viendo que con la TChart Pro se podía jalar datos directos desde un Query me parece, no se si ese podría ser mi solución.
Responder Con Cita
  #9  
Antiguo 01-08-2019
LIA_GUILLERMO LIA_GUILLERMO is offline
Miembro
 
Registrado: feb 2016
Posts: 32
Poder: 0
LIA_GUILLERMO Va por buen camino
Cita:
Empezado por oscarac Ver Mensaje
incluiria tambien
la forma en que se esta conectando, usas ADO ? ODBC ? alguna otra forma?
aunque viendo el componente que usas, lo haces utilizando FireDAC
en ese caso deberias colocar tambien la cadena con la cual estas "jalando" los datos de esas tablas

creeme hay una enorme diferencia entre

Código SQL [-]
select * from Tabla1 t1
left join Tabla2 t2 on t1.Campo1 + T1.Campo2 = t2.Campo1 + T2.Campo2
y

Código SQL [-]
select * from Tabla1 t1
left join Tabla2 t2 on t1.Campo1 = t2.Campo1  and T1.Campo2 = + T2.Campo2


se supone que este tipo de base de datos es mucho mas potente y rapido que las tablas convencionales



Bueno lo que pasa es que los datos solo los jalo de 1 tabla:

Cadena := System.SysUtils.Format ('Select Fecha_Hora, Valor, Status From %s Where ((Indice = %d) And (Fecha_Hora between %g and %g))', [VarType, AVarId,
DateTime1, DateTime2]);

En el primer %s va el nombre de la tabla del cual jalara los datos, son 4 posibles tablas de momento pero todas tienen los mismos campos, entonces no jalo datos de tablas combinadas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Coneccion y obtencion de datos de una api rest lbidi Internet 3 03-03-2017 19:57:35
Busco componente Grid soportando obtención/asignación total de datos mediante texto rolandoj OOP 9 11-10-2008 04:40:51
obtencion de datos de un grafico mjjj Gráficos 1 26-03-2007 22:22:20
Obtencion de datos Alejandro73 SQL 4 28-12-2006 20:17:10
Como guardar una array en una base datos? ciscu Varios 3 11-02-2004 09:27:49


La franja horaria es GMT +2. Ahora son las 17:15:06.


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
Copyright 1996-2007 Club Delphi