Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Usar Barras de Progreso con consultas (https://www.clubdelphi.com/foros/showthread.php?t=67209)

GerTorresM 05-04-2010 23:11:36

Usar Barras de Progreso con consultas
 
Hola a todos:


La situación que hace dias se me presenta es la siguiente:

Organizando parte del código de mi aplicación decidi desglozar gran parte del mismo utilizando consultas como se ve a continuación

Código Delphi [-]
procedure TDMLiquidacion.liquidaTarifa(pCodigoSuscriptor : Integer);
var QAuxiliarLiquidacion_temporal : TQuery;
    codigoServicio_local, codigoRango_local : Integer;
begin
  QAuxiliarLiquidacion_temporal:= CrearConsulta;
  codigoServicio_local:= 0;
  with QAuxiliarLiquidacion_temporal do
    begin
      Close;
      Sql.Text:= ' Select * From Tarifas '+
                 ' where CodigoRango not in (1,2,3,5,6) '+
                 ' And CodigoPeriodoPago =' + IntToStr(getCampo('DatosLiquidacion','CodigoPeriodo')) +
                 ' And CodigoAno =' + IntToStr(getCampo('DatosLiquidacion','CodigoAno')) +
                 ' And CodigoTipoServicio = ' + IntToStr(ObtenerTipoServicio(pCodigoSuscriptor)) +
                 ' And Estrato = ' + IntToStr(obtenerEstrato(pCodigoSuscriptor));
      open;
      while not eof do
        begin
          codigoServicio_local:= FieldByName('CodigoServicio').AsInteger;
          codigoRango_local:= FieldByName('CodigoRango').AsInteger;
          if verificaEstadoSuscriptor(pCodigoSuscriptor) then
            if verificaServicioSuscriptor(pCodigoSuscriptor,codigoServicio_local) then
              AdicionarRegistro('HistoricoPagos',' NumeroFactura,CodigoSuscriptor,Codigoservicio,CodigoReferencia,' +
                                                 ' CodigoPeriodo,CodigoAno,CodigoPeriodoOrigen,CodigoAnoOrigen, Clase, Valor,' +
                                                 ' ValorSubsidio, FechaDePago, Estado, Movimiento, ControlFacturacion, '+
                                                 ' NumeroFacturaOrigen, CodigoAnoPeriodo,CodigoRango',
                                                 IntToStr(0) + ',' + IntToStr(pCodigoSuscriptor) + ','+ IntToStr(codigoServicio_local) + ',' + IntToStr(codigoServicio_local) +
                                                 ',' + IntToStr(GetCampo('DatosLiquidacion','CodigoPeriodo')) + ',' + IntToStr(GetCampo('DatosLiquidacion','CodigoAno')) +
                                                 ',' + IntToStr(GetCampo('DatosLiquidacion','CodigoPeriodo')) + ',' + IntToStr(GetCampo('DatosLiquidacion','CodigoAno')) +
                                                 ',0,' + FloatToStr(obtenerTarifa(codigoServicio_local,codigoRango_local,pCodigoSuscriptor)) +
                                                 ',' + FloatToStr(obtenerTarifa(codigoServicio_local,codigoRango_local,pCodigoSuscriptor) * obtenerFactorSubsidio(codigoServicio_local,codigoRango_local,pCodigoSuscriptor)) +
                                                 ',NULL, FALSE,' + chr(39) + 'C' + chr(39) + ',NULL, 0,' + obtenerCodigoAnoPeriodo + ' ,' + IntToStr(codigoRango_local));
          next;
        end
    End;
  FreeAndNil(QAuxiliarLiquidacion_temporal);
end;

en orden de ideas varios de los procedimientos se presentan de la forma anterior formando algo así:

Código Delphi [-]
procedure TDMLiquidacion.LiquidarPeriodo(pZona : String; PProgresoGeneral, PProgresoParcial : TGauge );
Var QlistadoSuscriptoresLiquidacion_temporal: TQuery;
    CodigoSuscriptor_local, pCodigoSuscriptor : Integer;
    PBProgreso_local, PBParcial_local : TGauge;
begin
  PBProgreso_local:= TGauge.Create(PProgresoGeneral);
  PBParcial_local:= TGauge.Create(PProgresoParcial);

  QlistadoSuscriptoresLiquidacion_temporal:= CrearConsulta;
  if not verificarCritica then
    with QlistadoSuscriptoresLiquidacion_temporal do
      begin
        Close;
        sql.Text:= ' Select codigoSuscriptor ' +
                   ' From Suscriptores  '+
                   ' Where Zona in (' + pZona + ')';
        open;
        PBProgreso_local.MaxValue:= RecordCount;
        QlistadoSuscriptoresLiquidacion_temporal.DisableControls;
        While not eof do
          begin
            pCodigoSuscriptor:= FieldByName('CodigoSuscriptor').AsInteger;
            borraLiquidacion(pCodigoSuscriptor);
            divideLecturas(pCodigoSuscriptor);
            liquidaInteresDiario(pCodigoSuscriptor);
            // liquida Interes de mora mensual
            // liquida reconexiones
            liquidaTarifa(pCodigoSuscriptor);
            liquidaTarifa(pCodigoSuscriptor,1,GetCampo('Lecturas','Basico','CodigoSuscriptor = ' + IntToStr(pCodigoSuscriptor)));
            liquidaTarifa(pCodigoSuscriptor,2,GetCampo('Lecturas','Complementario','CodigoSuscriptor = ' + IntToStr(pCodigoSuscriptor)));
            liquidaTarifa(pCodigoSuscriptor,3,GetCampo('Lecturas','Suntuario','CodigoSuscriptor = ' + IntToStr(pCodigoSuscriptor)));
            liquidaTarifa(pCodigoSuscriptor,5,GetCampo('Lecturas','Multado','CodigoSuscriptor = ' + IntToStr(pCodigoSuscriptor)));
            liquidaPorcentaje(pCodigoSuscriptor);
            liquidaNovedadesPeriodo(pCodigoSuscriptor);
            liquidaNovedadesFinanciadas(pCodigoSuscriptor);
            liquidaSaldoPrepago(pCodigoSuscriptor);
            asignaNumeroFactura(pCodigoSuscriptor);
            asignaNumeroFacturaOrigen(pCodigoSuscriptor);
            PBProgreso_local.Progress:= PBProgreso_local.Progress + 1;
            next;
          end;
        actulizaEstadoLiquidacion(true);
      end;

  FreeAndNil(QlistadoSuscriptoresLiquidacion_temporal);
end;

bien la cosa que surge es la siguiente como se puede ver se toma una consulta y partiendo de los registro devueltos por la misma se realiza la ejecución de los procesos mensionados; como se dijo al inicio los procesos se guardan en un módulo de datos y los procesos son llamados en una forma con dos barras de Progresos para el caso TGauge, pero no se ve el progreso reflejado en las barras.

en lo que he encontrado relacionado con el tema he encontrado que el BDE (que el lo que utilizo para el trabajo de datos) no tiene sesiones multihilo y que tiende a dar ejecución a lo demás una vez termina.


agradezco de antemano cualquier colaboracion y ayuda



gertorresm
colombia

roman 05-04-2010 23:16:38

Intenta poner Application.ProcessMessages al final de cada vueta del ciclo.

// Saludos

GerTorresM 06-04-2010 10:29:18

No funciono
 
Gracías Roman por tu respuesta, pero lamentamente las barras siguen marcan ningun avance, lo único que se ve es que da una especie de liberación al formulario, es decir lo puedo mover libremente por la ventana y el boton (en el que le hacia click) queda como se no estuviese presionado, cosa que no podia hacer antes, pero de las barras nada.

¿Que podrá esta faltando ?


Gracias de Antemano



gertorresm
Colombia


La franja horaria es GMT +2. Ahora son las 00:48:38.

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