Ver Mensaje Individual
  #1  
Antiguo 02-02-2006
CamiloU CamiloU is offline
Miembro
 
Registrado: dic 2005
Ubicación: Sincelejo - COlombia
Posts: 59
Reputación: 19
CamiloU Va por buen camino
Ayuda urgente

Buenos Dias.
Solicito me colaboren con el siguiente problema: Tengo una tabla que maneja los campos cedula y valor, entre otros. La cedula puede estar repetida pero necesito agruparla con la suma de todos los valores pertenecientes a ella. Considero que el codigo esta bien y cuando pruebo con valores pequeños (1000 registros) funciona perfectamente. Cuando ingreso el valor total de registros (260000 registros), nunca termina. Podrian colaborarme a buscar una solucion a mi problema. Anexo el codigo que estoy utilizando. Muchas gracias.
Código Delphi [-]
 
procedure TForm1.ListadoClick(Sender: TObject);

var
  cont, n, i : integer;
  Tot : Lista;
  Valor : Parcial;
  val, totalito : real;
  ced, fsalario : string;
  encontrado, encuentra : boolean;

begin
  TCesantias2005.First;
  cont := 0;
 
  while (Not TCesantias2005.Eof) do
    begin
      encontrado := false;
      n := 0;
      while n < cont do
        begin
          n := n + 1;
          if TCesantias2005.fields[0].Value = Tot[n] then
            begin
              encontrado := true;
              fsalario := TCesantias2005.fields[3].Value;
              if (fsalario <> '50') and (fsalario <> '90') and (fsalario <> '150')
                 and (fsalario <> '230') and (fsalario <> '310') and
                 (fsalario <> '230') then
                begin
                  val := TCesantias2005.Fields[2].Value;
                  Valor[cont] := Valor[cont] + val;
                end;
            end;
        end;
 
      if encontrado = false then
        begin
          cont := cont + 1;
          Tot[cont] := TCesantias2005.Fields[0].Value;
          Valor[cont] := TCesantias2005.Fields[2].Value;
        end;
      TCesantias2005.Next;
    end;
 
  contador.Text := inttostr(cont);
  n := 0;
 
  while n < cont do
    begin
      n := n + 1;
      ced := Tot[n];
      totalito := Valor[n] / 12;
      TInter.Append;
      TInter.Fields[0].Value := ced;
      TInter.Fields[1].Value := totalito;
      TInter.Post;
    end;

Lista es un arreglo de 1 a 50000 de string;
Parcial es un arreglo de 1 a 50000 de real.

No se me ocurrio otra forma para revisar si la cedula existia o no y para ir realizando la sumatoria de los valores.

Agradezco mucho cualquier colaboracion.

Última edición por marcoszorrilla fecha: 02-02-2006 a las 15:16:23.
Responder Con Cita