Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Cómo mostrar la suma de un dbgrid en un tedit? (https://www.clubdelphi.com/foros/showthread.php?t=90439)

Belen12 09-06-2016 00:57:25

¿Cómo mostrar la suma de un dbgrid en un tedit?
 
Hola buenas tardes. tengo un pequeño programa que realizo ventas el cual esta asociado a una base de datos en el formulario de venta tengo un dbgrid asociado a un datasource que el mismo se asocia a la tabla detalle venta. En el dbgrid muesto los siguientes campos (productos,cantidad,precio,subtotal)
bien atravez de un boton buscar ingreso al formulario de productos y por medio de un tedit seleciono la cantidad hasta este punto todo me funciona bien.

El tema es el siguiente cuando necesito guardar el total que este se almacena en una tabla llamada venta de la base de datos (que es la suma de los subtotales que estan cargados en el dbgrid) no me realiza dicha operacion y a la vez necesito que este resultado se muestre en un tedit(eTotal) en el formulario de ventas y se sume o se reste a medida que agregue o quite productos en el dbgrid... Bien espero haber sido clara les dejo el codigo y las tabla de la base de datos

Código SQL [-]
tabla venta
idventa
total

Código SQL [-]
detalle_venta
iddetalle
idproducto
idventa
subtotal
precio
cantidad

Aqui el codigo del boton selecionar que se encuentra en el formulario de productos

Código Delphi [-]
  
 fmodulo.tDetalle.Insert;
 fmodulo.tDetalle['idventa']:= fmodulo.tVentas['idventa'];
 fmodulo.tDetalle['idproducto'] := fmodulo.qProductos['idproducto'] ;
 fmodulo.tDetalle['cantidad'] := StrToInt(self.eCantidad.Text);
 fmodulo.tDetalle['precio'] :=  fmodulo.qProductos['precio_unit']  ;
 fmodulo.tDetalle['subtotal']  := fmodulo.tDetalle['precio']*StrToInt(eCantidad.Text)  ;
  fmodulo.tDetalle.Post;
 fmodulo.tVentas.Edit;
 fmodulo.tVentas['total']:= fmodulo.tVentas['total'] +   fmodulo.tDetalle['subtotal'];
 fmodulo.tVentas.Post;


desde ya muchas gracias espero que puedan ayudarme

ecfisa 09-06-2016 19:14:38

Hola Belen12.

No logro que me que me quede claro el planteo de tu consulta, pero basándome en el título de tu mensaje creo entender que deseas mostrar la sumatoria de los datos ingresados en una columna de una tabla.

Como desconozco el gestor de BD y componente con que te estas conectando, debo partir del DBGrid; entonces para obtener la sumatoria del campo SUBTOTAL podrías hacer:
Código Delphi [-]
function GetTotal(DS: TDataSet): Currency;
var
  BM: Pointer;
begin
  Result := 0;
  BM := DS.GetBookmark;
  DS.DisableControls;
  try
    DS.First;
    while not DS.Eof do
    begin
      Result := Result + DS.FieldByName('SUBTOTAL').AsCurrency;
      DS.Next;
    end;
  finally
    DS.EnableControls;
    DS.GotoBookmark(BM);
    DS.FreeBookmark(BM);
  end;
end;
Ejemplo de uso:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  eTotal.Text := FormatFloat('0.00', GetTotal(DBGrid1.DataSource.DataSet));
  ...
Contando con mas información tal vez exista otra opción o forma mas eficiente de realizarlo, cualquier cosa nos comentas.

Saludos :)

Belen12 10-06-2016 02:32:41

Gracias Por responder
 
Cita:

Empezado por ecfisa (Mensaje 506035)
Hola Belen12.

No logro que me que me quede claro el planteo de tu consulta, pero basándome en el título de tu mensaje creo entender que deseas mostrar la sumatoria de los datos ingresados en una columna de una tabla.

Como desconozco el gestor de BD y componente con que te estas conectando, debo partir del DBGrid; entonces para obtener la sumatoria del campo SUBTOTAL podrías hacer:
Código Delphi [-]
function GetTotal(DS: TDataSet): Currency;
var
  BM: Pointer;
begin
  Result := 0;
  BM := DS.GetBookmark;
  DS.DisableControls;
  try
    DS.First;
    while not DS.Eof do
    begin
      Result := Result + DS.FieldByName('SUBTOTAL').AsCurrency;
      DS.Next;
    end;
  finally
    DS.EnableControls;
    DS.GotoBookmark(BM);
    DS.FreeBookmark(BM);
  end;
end;
Ejemplo de uso:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  eTotal.Text := FormatFloat('0.00', GetTotal(DBGrid1.DataSource.DataSet));
  ...
Contando con mas información tal vez exista otra opción o forma mas eficiente de realizarlo, cualquier cosa nos comentas.

Saludos :)

Disculpa si no fui tan clara me exprese lo mejor que pude haber. Utilizo los componentes zeos para conectarme a la base de datos la cual la cree usando mysql. Si basicamente eso es lo que quiero la idea es realizarlo desde el boton "selecionar" que esta en el formulario productos y a medida que valla cargando productos estos se vallan sumando y mostrando en el Tedit en el formulario venta. E probado tu codigo y no logro hacer que funcione :(

ecfisa 10-06-2016 13:36:47

Hola Belen12.
Cita:

Empezado por Belen12 (Mensaje 506051)
...
E probado tu codigo y no logro hacer que funcione :(

El código me funciona perfectamente, como te muestro en esta imágen:


Y en tu caso que sucede, ¿ te dá un error ? ¿ no muestra correctamente el resultado ? ¿ no lo muestra en absoluto ? ¿ ... ?

Saludos :)

rastafarey 11-06-2016 03:42:31

No se si el componente tenga la opcion de crear un campo de suma o calculado como el tclientdataset. Si no tienes eso tambien tienes el txquery o simplemente recorrerás el dataset y vas sumando o recorrer el buffer si lo posee para que afectes la parte visual. Aunque de verdad ahorita me cuesta ayudar con dbaware ya que ahorita solo programa modelo vista controlador. Espero eso te pueda ayudar.

Enviado desde mi SM-G900H mediante Tapatalk

Belen12 13-06-2016 19:27:52

Gracias
 
Hola disculpa la tardanza al contestar. Ya solucione el prolema tu codigo funciona perfecto fui yo la que adapte mal el codigo a mi programa muchas gracias :)


La franja horaria es GMT +2. Ahora son las 23:38:25.

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