PDA

Ver la Versión Completa : Sumar una columna en un DBGrid


HombreGordo
18-07-2008, 09:10:50
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.
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).

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.


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