Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Ayuda urgente (https://www.clubdelphi.com/foros/showthread.php?t=29837)

CamiloU 02-02-2006 14:58:35

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.

jmariano 02-02-2006 16:01:41

Por favor, no usar títulos para los hilos como el que acabas de poner, "Ayuda urgente", porque no son nada descriptivos y no servirían más tarde para realizar una búsqueda en el foro si alguien tuviera tu mismo problema. Además, va contra las normas de la Guía de estilo.

Saludos!

CamiloU 02-02-2006 16:43:22

Si, tienes razon. Pido disculpas pero no se me ocurrio un titulo que pudiera resumir el inconveniente que se presenta.

Osorio 02-02-2006 16:58:20

prueba con un query
 
Una sugerencia es que uses un TQuery


Con una consulta como esta:

Código Delphi [-]
          SELECT CEDULA, SUM(VALOR)
          FROM LASUPERTABLA
          GROUP BY CEDULA

Saludos


La franja horaria es GMT +2. Ahora son las 09:03:41.

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