Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-08-2007
jmartinez jmartinez is offline
Registrado
 
Registrado: jun 2007
Posts: 1
Poder: 0
jmartinez Va por buen camino
Optimizar Consulta - algoritmo

Muy Buenas,

Me llamo Jose y soy de León. Este es mi primer mensaje porque hasta el momento todas mis dudas las pude solucionar buceando por el foro, así que hola a todos!. Espero que haya acertado con el subforo correcto para postear.

Mi duda: Utilizo Delphi(6) + Zeos + Mysql. En estos momentos la BD en localhost. Me gustaría optimizar un proceso que considero que tarda demasiado. (1 min aproximadamente). A ver si logro explicarme de forma sencilla. Tengo el siguiente esquema:

1.- Ejecuto Consulta de Selección (devuelve 3.000 registros)
2.-Mientras no alcance el final del recorset, hacer
2.1.- Pequeños calculos con algunos campos del registro.
2.2.- Creación de Nueva Consulta de Insercción (Insert Into..... EXECSQL)
2.3.- Paso al siguiente registro.


Básicamente lo que hago es recorrer una tabla de clientes con datos, hacer cálculos dentro del bucle y con cada uno de ellos, para generar un recibo bancario, que creo dentro de dicho bucle. Como la consulta de seleccion inicial me trae más de 3.000 registros, tengo 3.000 iteraciones del bucle, y en cada una de ellas se hace un Insert Into, y un md.zqQuery.ExecSQL para insertarlo. Este proceso es el que me tarda alrededor de un minuto. (sin grabar los recibos en BD, el proceso completo tarda 1.6 segundos).

Tendría alguna forma de mejorar ésto?. Se me ocurría al menos meter una barra de progreso, pero ese "progreso" no comienza hasta que el proceso completo del bucle termina, es como si ignorara la instruccion de avance de la barra de progreso. Supongo que será algo del procesador y que habría q meter threads (algo que tengo bastante olvidado).

También he pensado grabar los datos a un archivo de texto, y posteriormente hacer un único Insert Into con todos los "Values", pero tampoco lo veo claro.


A ver me he explicado bien y alguien puede guiarme un poco.

Gracias por adelantado.
Responder Con Cita
  #2  
Antiguo 28-08-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Hola, y bienvenido por tu primer post.

Para que te muestre el progreso, añade una línea Application.ProcessMessages; dentro del bucle donde realizas las operaciones. Esto hará que se actualize tu barra de progreso.
__________________
Saludos.

Última edición por basti fecha: 28-08-2007 a las 12:36:49.
Responder Con Cita
  #3  
Antiguo 28-08-2007
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 21
Paoti Va por buen camino
hola, no cemntan si los calculos los ahces por cada registro,


si es así porque no haces una consulta donde vayas creando campos calculados en base al registro.

ejemplo:


tabla articulos: id, descripcion, cantidad, precio


y haces una vista llamada, vArticulos


Código SQL [-]
select id, descripcion, cantidad, precio, (cantidad * precio) as total from Varticulos


y al final haces un insert masivo


Código SQL [-]
insert into OtraTabla Select * from Varticulos


espero te sirva
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz
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
Optimizar con Case XXX of TIKIMORE Varios 9 10-07-2010 17:21:20
Optimizar Consulta en Firebird AGAG4 Firebird e Interbase 14 10-01-2006 02:11:30
Optimizar Consulta dunia_lv MS SQL Server 2 21-04-2005 09:43:51
Optimizar Vistas repo Firebird e Interbase 1 02-03-2005 18:13:43
Optimizar Paradox en red Sick boy Conexión con bases de datos 0 26-02-2005 13:31:48


La franja horaria es GMT +2. Ahora son las 09:00:57.


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