Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   sumar columna (https://www.clubdelphi.com/foros/showthread.php?t=59457)

Memo6015 27-08-2008 18:23:01

sumar columna
 
hola amigos

mi problema es el siguiente, tengo una dbgrid con una columna llamada promedios, necesito sumar todas sus cantidades pero no se como hacerlo, estoy usando una dbgrid por que esta recibe la informacion de una consulta

la columna promedios tiene

promedios
2.5
2.4
7.8
4.5
7.8

necesito sumar todas esas cantidades como le hago en la dbgrid?
algun codigo?
estuve viendo algunas cosillas pero a lo mas que llegue es a que me devolviera solo el primer valor con

DBGrid.Columns[1].Field.text

mi idea es sumarlo en la dbgrid por que despues necesito trabajar con esos datos, que alguien me diga como lo hago
no que me digan lo puedes sumar en la consulta, se puede sumar en la dbgrid???

bueno, espero sus respuestas.

Gracias

Caro 27-08-2008 18:28:14

Hola, puedes sumar la columna recorriendo tu DataSet (query) que esta enlazado a tu DBGrid o haciendo otra consulta con SUM, revisa este hilo http://www.clubdelphi.com/foros/showthread.php?t=58376

Saluditos

Memo6015 27-08-2008 18:54:20

hola caro, gracias por tu respuesta

pero ademas de sumar esos datos necesito extraerlos como hago eso?

maeyanes 27-08-2008 18:56:53

Hola...

Extraer los datos? Explicate mejor... :)


Saludos...

Memo6015 27-08-2008 20:18:15

claro es que ademas de la suma, me gustaria poder acceder a todos los promedios por ejemplo, tengo la columna promedio en la dbgrid

promedio
6.4
5.4
8.7
87.5

y poder sacar de la dbgrid por ejemplo el numero 8,7 y sumarlo con 5,4
o poder sumar 87,5 con 6,4

poder sacar uno o mas numeros de la dbgrid, se que puedo usar otro objeto pero realmente me gusta como se ve en la dbgrid, como puedo hacer eso??

maeyanes 27-08-2008 20:25:05

Hola...

El DBGrid es solo un componente que sirve para representar los datos que devuelve un TDataSet, por lo que para tener acceso a los datos puedes usar los métodos de este último:

Código Delphi [-]
ShowMessage(DBGrid1.DataSource.DateSet.FieldByName('Promedio').AsString);

Si quieres recorrerlos uno a uno, puedes usar un ciclo while not DataSet.Eof do:

Código Delphi [-]
with DBGrid1.DataSource.DateSet do
begin
  First;
  while not Eof do
  begin
    ShowMessage(FieldByName('Promedio').AsString);
    Next
  end
end

Espero que esto sea lo que andas buscando...


Saludos...

Caro 27-08-2008 20:27:23

Hola de nuevo Memo, tu DBGrid esta asociado a un DataSet, entonces tu debes obtener de tu DataSet y no de tu DBGrid, si quieres sumar la columna promedio entonces recorres el DataSet que tienes, como en el hilo que te dije que revisaras.

Código Delphi [-]
var  Total : Currency;
Marca : TBookMarkStr;
begin
 Total := 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
   Total := Total + MiTabla.FieldbyName('promedios').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(Total));

Has la prueba de hacer esto en el OnClick de tu DbGrid.

Código Delphi [-]
 showmessage(MiTabla.FieldbyName('promedios').ASString);

Veras que te dara lo que tienes en el campo promedios de la fila seleccionada.

Saluditos

Memo6015 27-08-2008 21:30:28

que grande maestros muchas gracias, creo que con esas respuestas me queda solo probar

muchas gracias era para un trabajo en la universidad

gracias graciassssss

ctrl_attack 09-01-2009 04:50:24

Gracias a mi tambien me ah servido

ctrl_attack 26-01-2011 07:19:34

por alguna extraña razon ahora no me esta funcionando, hace tiempo tome esta solucion y me funciono a la perfeccion en delphi7 pero ahora que estoy en delphi2010 nomas no me funciona, me salio este error

[DCC Error] Unit1.pas(340): E2010 Incompatible types: 'AnsiString' and 'TBytes'

presisamente en " Marca := adoquery1.Bookmark;" lo comprobe pues lo borre y deje el codigo sin eso, y funciono, claro que me dejo en el ultimo registro.

este es el codigo, sera que en adoquiery no funciona? lo cual dudo, pues en el 2009 lo hice, con el dephi7, como prueba esta mi comentario de arriba, jeje.

Código Delphi [-]
  var
  Total : Currency;
 Marca : TBookMarkStr;
begin
 Total := 0;
 Marca := adoquery1.Bookmark;
 adoquery1.DisableControls;

           adoquery1.First;
 While Not adoquery1.Eof do
  begin
   Total := Total + adoquery1.FieldbyName('cuenta').ASCurrency;
   adoquery1.Next;
  end;

 adoquery1.EnableControls;
 adoquery1.Bookmark := Marca;
label3.Caption:=(CurrToStr(Total ));

marcoszorrilla 26-01-2011 07:25:19

Prueba así:
Código Delphi [-]
  var   Total : Currency;  Marca : TBookMark; begin
 Total := 0;
 Marca := adoquery1.GetBookmark();//Almacenamos la posición del registro actual en nuestra marca
 adoquery1.DisableControls;//Deshabilitamos los controles enlazados a nuestro  DataSet
            adoquery1.First;  While Not adoquery1.Eof do
   begin 
   Total := Total + adoquery1.FieldbyName('cuenta').ASCurrency;
   adoquery1.Next;
  end;

 adoquery1.EnableControls;//Habilitamos nuevamente los controles
 adoquery1.GotoBookmark(Marca);//Restauramos a la posición del registro de nuestra marca
 adoquery1.FreeBookMark(Marca);
label3.Caption:=(CurrToStr(Total ));

Un Saludo.

ctrl_attack 27-01-2011 02:06:33

Muchas gracias amigo, me funciono a la perfeccion, gracias.


La franja horaria es GMT +2. Ahora son las 15:23:39.

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