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)
-   -   Sumar una columna en un DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=58376)

HombreGordo 18-07-2008 09:10:50

Sumar una columna en un DBGrid
 
Buenas. Quisiera por favor que me aconsejaran y me ayudaran un poquito a sumar columnas en un DBGrid, por ejemplo: Tengo una columna llamada "GANANCIAS" y quisiera sumar el valor de todas las filas correspondientes a esa columna. Un poquito de código y algo de explicación estilo tutorial no vendría mal. ;)

Estoy usando BDE, con una tabla Paradox 7.

NOTA: No tengo experiencia previa con bases de datos, y estoy comenzando con programación, y elegí Delphi 7 como inicio. También hice una extensiva búsqueda en Google y los temas de este forum acerca de esto, pero sinceramente no entendí mucho, por eso hice este hilo.

Gracias de antemano.

marcoszorrilla 18-07-2008 10:56:40

Depende de como estés mostrando esas filas, desde una tabla o desde una consulta.

Si es una tabla, tendrías que recorrer los registros sumando y acumulando en una variable.
Código Delphi [-]
var
Totales:Double;
begin
Totales:=0;

MiTabla.First;
While Not MiTabla.Eof Do
begin
Totales:=Totales + MiTablaMiCampoASumar.Value);
MiTabla.Next;
end:

end;

Un Saludo.

Neftali [Germán.Estévez] 18-07-2008 12:08:45

Otra opción puede ser lanzando una consulta SQL que te haga la suma (TQUERY).
Código Delphi [-]
  Select SUM(campo) as SUMA from Tabla

Esta consulta deberías lanzarla de forma independiente al Grid y cada vez que se cambian los datos lanzar también esta consulta.

Caro 18-07-2008 13:04:46

Hola HombreGordo, si lo haces como te indica marcoszorrilla, también deberías tomar encuenta los procedimientos EnableControl, DisableControl, para no ver el movimiento por los registros de tu DBGrid y los demas que esten enlazados a tu DataSet mientras se ejecuta tu While. Otra cosita, como recorres hasta el ultimo, el puntero del registro estara en el ultimo, para ello puedes utilizar un BookMark para tener una marca que te guardara la posicion del registro actual y luego de recorrer regresar a la posición de dicho registro.

Código Delphi [-]
var
  TotalGanancias : Currency;
  Marca : TBookMarkStr;
begin
 TotalGanancias := 0;

 Marca := MiTabla.Bookmark;//Almacenamos la posición del registro actual en nuestra marca
 MiTabla.DisableControls;//Deshabilitamos los controles enlazados a nuestro  DataSet

 MiTabla.First;
 While Not MiTabla.Eof do
  begin
   TotalGanancias := TotalGanancias + MiTabla.FieldbyName('ganancias').ASCurrency;
   MiTabla.Next;
  end;

 MiTabla.EnableControls;//Habilitamos nuevamente los controles 
 MiTabla.Bookmark := Marca;//Restauramos a la posición del registro de nuestra marca
 Showmessage(CurrToStr(TotalGanancias));

Saluditos

HombreGordo 19-07-2008 03:30:07

Muchas gracias chicos, la respuesta de Caro funcionó a la perfección. De verdad se los agradezco, su tiempo y atención. Una pequeña cosa a acotar para cuando los demás lean este hilo: Para usar la solución de marcoszorrilla (y perfeccionada por [Caro]), la columna debe ser de tipo "$ (Money)" o si no el método no funcionará. Ya sé que dije algo evidente, pero es un detallito que se os puede escapar.

Gracias de nuevo. Ayudaré a la comunidad en lo que pueda. :)

petete2008 18-12-2008 18:14:12

Yo quiero algo similar.
Lo que busco es calcular las celdas de una columna en base a las otras.

macedo_mx 12-02-2014 21:38:24

muy bien me hecho mas sabio el dia de hoy


La franja horaria es GMT +2. Ahora son las 12:52:13.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi