Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-11-2007
Avatar de BuenaOnda
BuenaOnda BuenaOnda is offline
Miembro
 
Registrado: feb 2006
Ubicación: La Serena - Chile
Posts: 347
Poder: 19
BuenaOnda Va por buen camino
Question Tiempo de espera.-

Hola amigos..

Nuevamente recurro a uds, para ver si me pueden ayudar a solucionar un problemilla que tengo, resulta que ejecuto una consulta en Firebird, esta consulta demora 50 segundos aprox. en mostrar los resultados, entonces lo que hago desde delphi es mostrar un "Reloj" que me muestra el tiempo transcurrido en la consulta, pero el programa se queda pegado hasta que la consulta se ejecuta y muestra los resultados( utilizo los componentes IBX). Existe alguna propiedad en los componentes IBX que me permita realizar algo asi como un Application.ProcessMessages o algo por el estilo para que me programa no se quede "pegado", muchas gracias por su ayuda...

esta es la consulta..

Código SQL [-]
SELECT M.CODIGO_FAMILIA,COALESCE( SUM( ( (COALESCE(SUM(M.DIAS_C + M.MASDIAS),0)) * M1.CANCELADO) / M1.DIAS_ARR),0) AS CANCELADO,
       COALESCE(SUM(M.DIAS_C + M.MASDIAS),0) AS DIAS
  FROM(SELECT A.CODIGO_FAMILIA,C.dias_arrendado  AS DIAS_C,C.CODIGO_CONTRATO,
              CASE WHEN C.FECHA_TERMINO < C.FECHA_INICIO
                   THEN 'NOW' - C.FECHA_INICIO 
                   ELSE 0 END AS MASDIAS
         FROM FAMILIA A,RL_FACTURA_DE_VENTAS_CONTRATOS D,
              DETALLE_CONTRATOS_DE_ARR C, FACTURA_DE_VENTAS E,MAQUINAS F
        WHERE C.CODIGO_CONTRATO=D.CODIGO_CONTRATO
          AND D.CODIGO_FACTURA_DE_VENTA=E.CODIGO_FACTURA_DE_VENTA
          AND (E.ANULADA='N' AND E.HISTORICA='N')
          AND C.CODIGO_MAQUINA=F.CODIGO_MAQUINA 
          AND A.CODIGO_FAMILIA=F.CODIGO_FAMILIA
          AND D.FECHA_FACTURACION >='01-JUL-2007'
        GROUP BY A.CODIGO_FAMILIA,DIAS_C,C.CODIGO_CONTRATO,MASDIAS)M
    LEFT JOIN(SELECT C.CODIGO_CONTRATO,COALESCE(SUM(C.dias_arrendado),0) DIAS_ARR,
                     COALESCE(SUM(D.VALOR_CANCELADO),0) AS CANCELADO
                FROM DETALLE_CONTRATOS_DE_ARR C,
                     RL_FACTURA_DE_VENTAS_CONTRATOS D
               WHERE C.CODIGO_CONTRATO=D.CODIGO_CONTRATO
               GROUP BY C.CODIGO_CONTRATO) AS M1
              ON M.CODIGO_CONTRATO=M1.CODIGO_CONTRATO
GROUP BY M.CODIGO_FAMILIA
Responder Con Cita
  #2  
Antiguo 11-11-2007
Avatar de BuenaOnda
BuenaOnda BuenaOnda is offline
Miembro
 
Registrado: feb 2006
Ubicación: La Serena - Chile
Posts: 347
Poder: 19
BuenaOnda Va por buen camino
existe otro componente de conexion a base de datos que me permita hacer esto?.. (aunq' me imagino que es el firebird el que provoca esto)..cualquier aporte se los agradecere mucho..
Responder Con Cita
  #3  
Antiguo 12-11-2007
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.289
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
Si el problema es que la consulta tarda mucho, no creo que se solucione con componentes de conexión; De todas formas yo optaría:

1º) Como primera opción intentar reducir el tiempo de la consulta; Revisar los índices que tienes creados para optimizar, intentar crear un Stored Procedure que te realice la misma consulta,...

2º) Tema aplicación; No se los componentes que estás utilizando, se que hay algunos que permiten ejecutar consultas en modo asíncrono; Revisa si los que utilizas poseen esa opción. Con esto conseguirás que el control vuelva al programa mientras se lanza la consulta
y se recuperan 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
  #4  
Antiguo 12-11-2007
tefots tefots is offline
Miembro
 
Registrado: feb 2005
Posts: 108
Poder: 20
tefots Va por buen camino
tambien puedes crear un thread
y en el execute del thread realizar la consulta

eso si , se recomienda que el thread tenga su propio tibdatabase y su tibtransaction.
Responder Con Cita
  #5  
Antiguo 12-11-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Podrías poner un TTimer y una variable global que tenga la hora en que se inició el select.

Poner el Timer a 1 segundo.

En el procedimiento que ejecuta select, activar el timer.
Código Delphi [-]
[...]
Tiempo := Now;
Timer1.Enabled := True;
Table.Open;
[...]
OnTimer poner algo asi:

Código Delphi [-]
begin
   ProgressBar.StepIt;
  Application.ProcessMessage;
end;
o
Código Delphi [-]
begin
   LabelTiempo.Caption := 'Tiempo transcurrido: '+DateTimeToStr(Now-Tiempo);
  Application.ProcessMessage;
end;
Responder Con Cita
  #6  
Antiguo 13-11-2007
Avatar de BuenaOnda
BuenaOnda BuenaOnda is offline
Miembro
 
Registrado: feb 2006
Ubicación: La Serena - Chile
Posts: 347
Poder: 19
BuenaOnda Va por buen camino
Thumbs up Gracias por sus respuestas..

lo que dice duilioisola es lo que estoy haciendo, pero la consulta , al ejecutarse, no permite que se refresque el timer, eso es lo que busco solo poder refrescar el timer, para mostrar el tiempo transcurrido..muchas gracias por su ayuda compañeros..
Responder Con Cita
  #7  
Antiguo 13-11-2007
Avatar de BuenaOnda
BuenaOnda BuenaOnda is offline
Miembro
 
Registrado: feb 2006
Ubicación: La Serena - Chile
Posts: 347
Poder: 19
BuenaOnda Va por buen camino
Utilizo los componentes de la paleta "Interbase"(IBDataBase,IBTransacction,IBQuery...)..
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
Tiempo de Espera barrauda Varios 4 16-07-2007 02:28:01
Tiempo de Espera Agotado eduardoemh SQL 0 28-06-2007 21:40:41
Tiempo de espera emeritos Varios 1 29-06-2006 11:49:26
Incrementar el tiempo de espera en ADO mvelgar Conexión con bases de datos 4 14-07-2005 21:43:05
Valor de tiempo de espera caducado senpiterno MS SQL Server 3 01-05-2005 02:50:03


La franja horaria es GMT +2. Ahora son las 18:57:04.


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