Ver Mensaje Individual
  #1  
Antiguo 05-04-2010
Avatar de GerTorresM
GerTorresM GerTorresM is offline
Miembro
 
Registrado: nov 2005
Ubicación: Tunja - Boyacá
Posts: 210
Reputación: 19
GerTorresM Va por buen camino
Lightbulb 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
Responder Con Cita