Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-08-2011
lisc_dla lisc_dla is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 98
Poder: 13
lisc_dla Va por buen camino
Suma de campos de un dbgrid

estoy trabajando con un mysql para realizar la conexion utilizo ADOConnection-->ADOTable-->DataSource-->DBgrid.

por ejemplo realizo una búsqueda y esta se visualiza en el dbgrid, pero necesito hacer la suma del campo total. es decir tengo el campo total pero solo quiero realizar la suma de los que se muestran en el dbgrid. es decir poner el resultado en un text.
Responder Con Cita
  #2  
Antiguo 01-08-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
mmmmm
se me ocurre 2 cosas
1.- que podrias recorrer todo el dbgrid y mostrar la suma
2.- crear un query que te haga la suma
si es como dices que en el grid muestras los resultados del query
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 01-08-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por oscarac Ver Mensaje
mmmmm
se me ocurre 2 cosas
1.- que podrias recorrer todo el dbgrid y mostrar la suma
2.- crear un query que te haga la suma
si es como dices que en el grid muestras los resultados del query
Cierto, aunque también podría recorrer el ADOTable que ya tiene los registros que se visualizan y sacar la suma desde ahí.

Saludos
Responder Con Cita
  #4  
Antiguo 01-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola lisc_dla.

Creo que es más eficiénte hacerlo con una consulta SQL, pero si te decidis por hacerlo desde el DBGrid podrías hacer algo así :
Código Delphi [-]
function SumarTotales(Grid: TDBGrid; const AFieldName: string): Currency;
var
  BM: TBookMarkStr;
begin
  Result:= 0;
  with Grid.DataSource.DataSet do
  begin
    BM:= Bookmark;
    DisableControls;
    while not Eof do
    begin
      Result:= Result + FieldByName(AFieldName).AsCurrency;
      Next;
    end;
    BookMark:= BM;
    EnableControls;
  end;
end;

Ejemplo de llamada:
Código Delphi [-]
   Edit.Text:= FloatToStr(SumarTotales(DBGrid1,'Total'));

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 01-08-2011
lisc_dla lisc_dla is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 98
Poder: 13
lisc_dla Va por buen camino
Solo un detalle la aplicación que estoy creando es sobre venta de artículos, hago la consulta de las ventas del día y estas se muestran en el dbgrid, pero necesito que en el text solo me muestre la suma de las ventas del día. Estuvo probando el ejemplo pero no se donde colocar la función y me muestra un error

Última edición por lisc_dla fecha: 01-08-2011 a las 22:54:39.
Responder Con Cita
  #6  
Antiguo 01-08-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Si se realiza una busqueda con un adotable me imagino que lo que se hara sera un filtro ?.
Si se hace un filtro se puede usar algo como esto.
Código Delphi [-]
var
Total: Integer;
begin
// siempre que no este abierta la tabla
AdoTable1.Open;
Total := 0;
adotable1.disablecontrols;
try
// este filtro se supone que ya se hizo
adotable1.filter := 'TuCampo = '+ edit1.text;
adotable1.filtered := true;
adotable1.first;
while not adotable1.EOF do
 begin
 Total := Total + adotable1['Total'];
 adotable1.next;
 end;
adotable1.filter := '';
adotable1.filtered := false;
edit1.text := Inttostr(Total);
finally
adotable1.enablecontrols;
end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 01-08-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
mmmmm
si ya tienes una consulta para mostrar las ventas del dia, te recomentaria mejor crear una consulta similar la cual te sume las ventas del dia

imaginemos que tu consulta es asi

Código Delphi [-]
 
Select TipoDOC, Documento, Fecha, Cliente, Total From TablaVentas where
Fecha = :Fecha
podrias crear esta consulta que te sume las ventas del dia
Código Delphi [-]
Select Sum (Total) As Total From TablaVentas where
Fecha = :Fecha

asocias un datasource al nuevo query y muestras esa informacion en un tdblabel
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #8  
Antiguo 01-08-2011
lisc_dla lisc_dla is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 98
Poder: 13
lisc_dla Va por buen camino
oscarac

mi consulta para visualizar las ventas del día es:
Código Delphi [-]
if frm_cortedecaja.Adotable1.Locate('fecha',lbl_fecha.Caption,[]) = false then
begin
//en caso de no encontrar nada solo visualiza el dbgrid pero sin datos
    frm_cortedecaja.AdoTable1.Filtered := False;
    frm_cortedecaja.AdoTable1.Filtered := False;
    Filtro := 'fecha = '+lbl_fecha.Caption;
    frm_cortedecaja.AdoTable1.Filter := Filtro;
    frm_cortedecaja.AdoTable1.Filtered := True;
    frm_cortedecaja.AdoTable1.Open;
    frm_cortedecaja.ShowModal;
end else
begin
//en caso de encontrar datos los visuliza en el dbgrid
    frm_cortedecaja.AdoTable1.Filtered := False;
    frm_cortedecaja.AdoTable1.Filtered := False;
    Filtro := 'fecha = '+lbl_fecha.Caption;
    frm_cortedecaja.AdoTable1.Filter := Filtro;
    frm_cortedecaja.AdoTable1.Filtered := True;
    frm_cortedecaja.AdoTable1.Open;
    frm_cortedecaja.ShowModal;
entonces como seria la suma

Última edición por ecfisa fecha: 01-08-2011 a las 23:34:46.
Responder Con Cita
  #9  
Antiguo 01-08-2011
lisc_dla lisc_dla is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 98
Poder: 13
lisc_dla Va por buen camino
[caral]
me tira el siguiente error


Imagen1.jpg
Responder Con Cita
  #10  
Antiguo 01-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por lisc_dla Ver Mensaje
Estuvo probando el ejemplo pero no se donde colocar la función y me muestra un error
Podés colocarla inmediatamente despues de la declaración
Código Delphi [-]
interface

function SumarTotales(Grid: TDBGrid; const AFieldName: string): Currency;
....
y podes utilizarla en esa unidad sin problemas. También en otra unidad y agregarla en la declaración uses de la unit en que desees usarla. No mencionaste el error que te genera pero supongo que será por el alcance de la función.

Una ventaja que tiene la función que te puse, es que podés utilizarla para cualquier TDBGrid y para cualquier campo de la tabla asociada al mismo (de tipo numérico lógicamente).

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 01-08-2011 a las 23:36:05.
Responder Con Cita
  #11  
Antiguo 01-08-2011
lisc_dla lisc_dla is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 98
Poder: 13
lisc_dla Va por buen camino
por ejemplo puedo colocar la función dentro del procedure
Responder Con Cita
  #12  
Antiguo 01-08-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Esto si que esta para romperse la cabeza:
ecfisa, directamente al DBgrid.
oscarac, por sql.
Caral, Por adotable.
Si después de todo esto lisc_dla no se hace un lio o no necesita un loquero habremos hecho un buen trabajo....
Saludos
__________________
Siempre Novato
Responder Con Cita
  #13  
Antiguo 01-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por lisc_dla Ver Mensaje
por ejemplo puedo colocar la función dentro del procedure
Si, es posible también. Delphi permite anidar procedimientos y funciones (aunque habría que hacer algunos cambios).
Pero si la declarás en una unit donde guardes tus rutinas es reutilizable para cualquier TDBGrid de esa o cualquier otra aplicación que realices.



Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #14  
Antiguo 01-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Caral Ver Mensaje
Si después de todo esto lisc_dla no se hace un lio o no necesita un loquero habremos hecho un buen trabajo....
Por las dudas preparémonos !!!

__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #15  
Antiguo 01-08-2011
lisc_dla lisc_dla is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 98
Poder: 13
lisc_dla Va por buen camino
implementado el código
Responder Con Cita
  #16  
Antiguo 02-08-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Voto por sum(total) where lo quesea evidentemente
Responder Con Cita
  #17  
Antiguo 02-08-2011
lisc_dla lisc_dla is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 98
Poder: 13
lisc_dla Va por buen camino
como mencione mi consulta es:

Código Delphi [-]
if Adotable1.Locate('fecha',lbl_fecha.Caption,[]) = false then
begin
    AdoTable1.Filtered := False;
    AdoTable1.Filtered := False;
    Filtro := 'fecha = '+lbl_fecha.Caption;
    AdoTable1.Filter := Filtro;
    AdoTable1.Filtered := True;
    AdoTable1.Open;
end
else
begin
    AdoTable1.Filtered := False;
    AdoTable1.Filtered := False;
    Filtro := 'fecha = '+lbl_fecha.Caption;
    AdoTable1.Filter := Filtro;
    AdoTable1.Filtered := True;
    AdoTable1.Open;
end;

pero donde coloco el codigo de la suma:

Código Delphi [-]
function SumarTotales(Grid: TDBGrid; const AFieldName: string): Currency;
var
  BM: TBookMarkStr;
begin
  Result:= 0;
  with Grid.DataSource.DataSet do
  begin
    BM:= Bookmark;
    DisableControls;
    while not Eof do
    begin
      Result:= Result + FieldByName(AFieldName).AsCurrency;
      Next;
    end;
    BookMark:= BM;
    EnableControls;
  end;
end;

y donde colo este otro codigo

Código Delphi [-]
Edit.Text:= FloatToStr(SumarTotales(DBGrid1,'Total'));

ya estuve intentando y me marca error

Última edición por Casimiro Notevi fecha: 02-08-2011 a las 00:45:12.
Responder Con Cita
  #18  
Antiguo 02-08-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Recuerda poner el código entre etiquetas.



.
Responder Con Cita
  #19  
Antiguo 02-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Post

Primero gracias por las etiquetas Casimiro ...

Cita:
pero donde coloco el codigo de la suma:
lisc_dla, como te dije en el mensaje #10 podés ubicarlo inmediatamente despues de la declaracion implementation de la unidad que lo uses. Es claro que tu consulta debe haber sido realizada antes.

Cita:
y donde colo este otro codigo
Bueno eso depende de como y cuando quieras mostrarlo. Yo te pongo un ejemplo tán válido como cualquier otro:
Código Delphi [-]
...
implementation

function SumarTotales(Grid: TDBGrid; const AFieldName: string): Currency;
var
  BM: TBookMarkStr;
begin
  Result:= 0;
  with Grid.DataSource.DataSet do
  begin
    BM:= Bookmark;
    DisableControls;
    while not Eof do
    begin
      Result:= Result + FieldByName(AFieldName).AsCurrency;
      Next;
    end;
    BookMark:= BM;
    EnableControls;
  end;
end;
...
(* Este es el ejemplo de llamada *)
procedure TForm.Button1Click(Sender: TObject);
begin
  if Adotable1.Locate('fecha',lbl_fecha.Caption,[]) = false then
  begin
    AdoTable1.Filtered := False;
    AdoTable1.Filtered := False;
    Filtro := 'fecha = '+lbl_fecha.Caption;
    AdoTable1.Filter := Filtro;
    AdoTable1.Filtered := True;
    AdoTable1.Open;
  end
  else
  begin
    AdoTable1.Filtered := False;
    AdoTable1.Filtered := False;
    Filtro := 'fecha = '+lbl_fecha.Caption;
    AdoTable1.Filter := Filtro;
    AdoTable1.Filtered := True;
    AdoTable1.Open;
  end;
  Edit.Text:= FloatToStr(SumarTotales(DBGrid1,'Total'));
end;
Para el ejemplo supongo que el nombre del campo donde están los valores a sumar se llama Total.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #20  
Antiguo 02-08-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No se, no se, no se.
Si, no se, por eso digo, alguien me dice si este codigo tiene sentido?
Código Delphi [-]
if Adotable1.Locate('fecha',lbl_fecha.Caption,[]) = false then
begin
    AdoTable1.Filtered := False;
    AdoTable1.Filtered := False;
    Filtro := 'fecha = '+lbl_fecha.Caption;
    AdoTable1.Filter := Filtro;
    AdoTable1.Filtered := True;
    AdoTable1.Open;
end
else
begin
    AdoTable1.Filtered := False;
    AdoTable1.Filtered := False;
    Filtro := 'fecha = '+lbl_fecha.Caption;
    AdoTable1.Filter := Filtro;
    AdoTable1.Filtered := True;
    AdoTable1.Open;
end;
Saludos
__________________
Siempre Novato
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Suma por campos aanil SQL 45 11-02-2010 02:00:50
suma de campos calculados pabloparra Conexión con bases de datos 0 12-03-2008 22:14:12
Suma de dos Campos en un BDGrid esimon SQL 6 14-09-2005 20:50:12
Suma de campos b3nshi Conexión con bases de datos 1 13-04-2005 03:13:40
suma de campos novato cesarjbf SQL 4 01-09-2004 10:12:33


La franja horaria es GMT +2. Ahora son las 01:23:34.


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
Copyright 1996-2007 Club Delphi