Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-08-2008
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
Post Conexion sql en delphi 2007 con TAdoTable Primero bien despues Lenta

Saludos:
Llevo tiempo mirando sus respuestas y preguntas y nunca he preguntado nada, me disculpan si no es el lugar correcto y me corrigen,
tengo una aplicacion con base de dato SQL Server 2000 y las tablas esan creciendo pero hago calculos con todos los registros, digamos, cuentas por cobrar o pagar de todas las unidades y una tabla con el el envio de dichos datos de cada unidad. primero bien , pero ya las unidades crecieron y demora la muestra cda ves mas.

Uso TadoConexion y TadoTable, TadoQuery no lo uso pues en las tablas esta lo indispensable de cada unidad y necesito sumar digamos todos los importes de todas las unidades, no edito nada solo muestro totales en diversas formas pero generalemte con todos los datos

me ayudan con la lentitud ????? es codegear 2007

Última edición por juank1971 fecha: 12-08-2008 a las 21:46:26. Razón: Arreglar titulo
Responder Con Cita
  #2  
Antiguo 12-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
hola, ¿como sumas? ¿haciendo 'select sum(...) as suma ' o bien recorriendo cada registro?

si no es el caso que usas sum :

Código Delphi [-]
q.active := false;
q.SQL.Text := 'select sum(importe) as suma_importes from tabla';
q.active := true;
showmessage(FormatFloat('0.00',q.FieldByName('suma_importes').Asfloat));

a ver si te va mas rapido.

Tambien puedes usar query.DisableControls, query.enablecontrols, para optimizar un poco mas, antes de los calculos

Última edición por coso fecha: 12-08-2008 a las 21:40:36.
Responder Con Cita
  #3  
Antiguo 12-08-2008
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
gracias
Cada dia me gusta mas el delphi ....

No dije antes que uso DevExpress los Pivot y quantum grid se suma solos los totales, no tengo que escribir codigo, antes lo hacia bien pero ya estan lentos, probe en grid solos del delphi y esta lenta la carga de los Tadotable. use MemData y crece memoria.

Pregunto tienes otra solucion ???? se pueden usar DevExpress por capas ?? en sql ??? que se yo ...no se.... no puede ser que tenga la cima de la belleza de la aplicacion terminada y el delphi no me de lo que quiero que tanto ha hecho por mi durante tanto
tiempo.
Responder Con Cita
  #4  
Antiguo 12-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
ah, pues ni idea
Responder Con Cita
  #5  
Antiguo 12-08-2008
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
de todas formas mientras el palo va y biene diganme please, que evento puedo utilizar para poner un progress bar en la carga de TAdoTable,para por lo menos si no resuelvo el problema de la lentitud mostrar el progreso de la carga de las tablas hacia los PivotGrids y los QuantumGrid, he probado eventos de el TAdoConnection y nada, probe el FetChProgress de los TadoTable y no pincha tampoco, no entra a ese evento mientras se carga, no veo ningun evento significativo en el Datasorce tampoco.

Pregunta,... me pueden decir donde se puede meter codigo para aumentar un progress en la carga de TAdoTable, son varios de ellos y se demora un poco....
Responder Con Cita
  #6  
Antiguo 12-08-2008
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
Ya me tengo que ir, de aqui , mañana regreso, estoy seguro que esta noche sueño que me responden y temprano tengo algo que agregar a mi aplicacion

gracias a todos y a ti coso que se que en esto el tiempo es oro

salud y pesetas..................
Responder Con Cita
  #7  
Antiguo 12-08-2008
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Si usas TTable, al principio no era lenta porque eran pocos registros, pero al ir aumentando, aumenta la carga de datos y si utilizas la QuamtumGrid con la opción "LoadAllRecords" en verdadero, se ira tardando cada vez más conforme aumenten los registros.

Lo mejor sería empezar a utilizar TQuery en lugar de Ttable y seleccionar solo los registros que sean necesarios (en lugar de toda la tabla).
__________________

Responder Con Cita
  #8  
Antiguo 13-08-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Vamos a ver; Has dicho muchas cosas, de forma poco desordenada (perdona que te lo diga) y veo que vas dando palos de ciego y se si sabes realmente lo que estás haciendo (esa es la sensación que tengo).
Te propongo algunas cuestiones; Tal vez algunas ya las tienes claras, de todas formas te lo comento.

No soin todas excluyentes, tal vez puedas combinar unas con otras.

(1) SQL Server: Ya que utilizas SQL Server aprovecha las características que este te brinda. Revisa los planes de ejecución de las consultas. Revisa si puedes añadir índices por algun campo.
Por último puedes hacer alguna prueba con Stored Procedures, sobre todo para el tema de cálculo de totales.

(2) QuantumGrid de DevExpress: Todos sabemos que las QuantumGrid son excelentes, pero no hacen milagros. Los Grids de la Quantum permiten Agrupaciones, calcular totales, filtrar columnas por los títulos, ordenar,....(**) y mucho más, pero eso tiene un precio grande; Deben cargar todos los datos en memoria. En la configuración del Grid, puedes cambiar este comportamiento (en la parte donde se configura el DataSource), pero al cambiar el modo de carga para que no cargue TODOS los registros en memoria (como lo hace un DbGrid estandard con cursor clServerSide) pierdes todas esas mejoras.
==> por lo tanto debes tener claro cuando puedes usar los Grids de las Quantum. Si necesitas todos esos añadidos (**) debes trabajar con tablas pequeñas, porque a medida que las tablas van creciendo el tema se va a hacer muy lennnnnto.

(3) Cargar Datos o Totales: Debes tener claro qué necesitas. Pero hay una cosa clara, si lo quieres TODO, no va a ser rápido. Por un lado tenes los datos y por otro los totales o cálculos. Hay dos opciones:

(a) Cargar todos los datos y calcular totales en memoria (para eso ya tienes la Quantum).
(b) No cargar todos los datos, pero entonces los totales deberás calcularlos tú utilizando SQL (SELECT, COUNT, MAX, SUM, GROUP BY,...) o Stored Procedures.

(4) Optimizaciones: Una vez tengas claro lo que vas a necesitar puedes intentar realizar optimizaciones, aunque estas dependerán de la solución escogida. Si finalmente optas por cargar todos los datos(yo no lo haría), puedes revisar las tablas temporales de SQL Server que funcionan bastante bien (mejor en las últimas versiones); También puedes usar Stored Procedures o incluso funciones para obtener los datos que necesitas, si es que necesitas consultas muy complejas y minimizar así el tráfico de datos por la red.
Acostumbrate a utilizar Filtros (y a obligar a los usuarios a que los utilicen) antes de enviar las consultas, y no que filtren cuando los datos ya han llegado al cliente a través de la red.

Hay muchas cosas ha realizar, aunque debes tener sentido común y minimizar los datos con los que trabajas. Utilizar o traer sólo los que necesitas.

NOTA: Piensa que tal como lo dejes ahora (en cuanto a lentitud), dentro de 5 meses va a ir muuuuucho peor.

Un saludo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 13-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
sigo pensando que haciendo esto:

Código Delphi [-]
q.active := false;
q.SQL.Text := 'select sum(importe) as suma_importes from tabla';
q.active := true;
showmessage(FormatFloat('0.00',q.FieldByName('suma_importes').Asfloat));
arreglado. A mi me suma mas o menos 15.000 registros en menos de 1 segundo
Responder Con Cita
  #10  
Antiguo 13-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Cita:
salud y pesetas..................
jejejejejej, claro como soy de Girona jejjejjjejj
Responder Con Cita
  #11  
Antiguo 13-08-2008
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
Gracias a todos por su tiempo

Ta claro no existe magia que a veces uno quiere que le saquen de debajo de la manga una idea genial y que todo salga a pedir de boca, evidentemente la cantidad de records es directamente proporcional a la velocidad y pierdes velocidad o gastas recursos de memoria gigante en la estacion cliente.

todo lo que me comentan es muy util, aunque ya a estas alturas de la aplicacin estoy frito en manteca de pescao, ya eso esta corriendo hace rato.
aunque estuve calculando algunas cosas y las bases de datos no van a crecer ilimitadamente porque los registros se sobreescriben cada una fecha. o sea la lentitud es un poco, pero no aumenta, por ahora las estaciones clientes tienen suficiente memoria y trabajan aceptablemente, solo me queda señalizar en un progress de una splash form la carga de las diferentes tablas.

En cuanto a lo de aprovechar lo de sql ta clarisimo, lo que me deje llevar por la emosionante funcionalidad de los devexpress, y los totales no los controlo yo , lo hacen los clinentes segun el agrupamiento que hagan por supuesto teniendo delante todos los datos. tendria que ponerme a validar segun el ordenamiento y agrupamiento hacer las Querys pertinentes.

En fin resuelvo por el momento con incrementar un barprogress mientras cargan las tablas....
gracias a todos...............
Responder Con Cita
  #12  
Antiguo 13-08-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por coso Ver Mensaje
A mi me suma mas o menos 15.000 registros en menos de 1 segundo
Creo que el problema no está en los totales, ya que una vez están los datos en memoria, calcular los totales no implica casi tiempo; Creo que el problema está en que los DevExpress deben cargar todos los datos para poder calcularlos.
Por tanto, haciendo lo que tu comentas no servirá de nada, si luego se cargan todos los datos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #13  
Antiguo 13-08-2008
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
ta claro...............


y mi progress bar ???? en que evento de que objeto de que clase se puede incrementar mientras se cargan los datos ???
Responder Con Cita
  #14  
Antiguo 13-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
si tienes por alla algun datasource, en el ondatachange mismo, eso si, tendras que diferenciar por codigo cuando se estan cargando los datos, y cuando se esta, por ejemplo, simplemente haciendo un scroll. No se bien bien como va el DevExpress ni el QuantumGrid, pero si proviene de TCustomDBGrid, tendra la propiedad datasource con su evento onchange correspondiente
Responder Con Cita
  #15  
Antiguo 13-08-2008
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
El OnDataChange del DataSource no me funcionó para lo que quiero, lo probé en la carga de los datos y entra a ese evento la traza solamente una vez durante la carga de los datos, creo que cuando finaliza, no me sirve, necesito un evento de algo que me diga un porciento de la carga de datos desde el SQL a la estación cliente para yo poder actualizar el progress y mostrarle al cliente lo que mas o menos le queda por esperar para que se le abra la aplicacion.

gracias de todas .......
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
Conexion Lenta Interbase 6.0 Carlos de Pablo Firebird e Interbase 4 05-01-2009 23:19:40
Conexion a servidor muy lenta DISAC_FIGO Conexión con bases de datos 0 16-01-2007 21:50:30
Conexion lenta auribe Conexión con bases de datos 0 19-04-2005 18:04:37
Conexion mas lenta hecjona Varios 0 22-12-2003 21:04:21
Conexion Lenta en red muli Firebird e Interbase 6 25-10-2003 00:17:11


La franja horaria es GMT +2. Ahora son las 03:20:25.


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