Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=91750)

Dergon 16-04-2017 18:36:03

Dbgrid
 
Buenas trades amigos,estaba necesitando una ayuda de ustedes,soy novato en esto estoy haciendo un projecto de ventas en la cual estoy usando el dbgrid para lanzar los productos,estoy necesitando sumar el total de valores de las notas,en la cual crie este metodo cada vez que aprete el boton el haga este procesdimiento,pero lo que en realidad necesito es que lo haga cada vez que salte una columna a otra.
Código Delphi [-]
var 
  suma:currency;
begin
  suma:=0;
  dm_dados.tbl_saiproduto.First;
  while not dm_dados.tbl_saiproduto.eof do
  begin
    suma:=suma + dm_dados.tbl_saiprodutoSAIPROD_VALORTOTAL.Value;
    dm_dados.tbl_saiproduto.Next;
  end;
  dm_dados.tbl_saidapai.Edit;
  dm_dados.tbl_saidapaiSAIPAI_VALORTOTAL.Value:= suma;

AgustinOrtu 16-04-2017 23:24:22

Hola Dergon, no termine de entender muy bien lo que tenes que hacer, pero estoy seguro de que se puede realizar con aggregates. En este articulo esta explicado y hasta con un video, vas a ver que facil que es:

Totalizar datos que se encuentran en un DataSet

Casimiro Notevi 16-04-2017 23:29:58

Cita:

Empezado por Dergon (Mensaje 515552)
Buenas trades amigos,

Y para la próxima vez, procura poner un título descriptivo a tu pregunta, gracias :)

ecfisa 17-04-2017 04:52:51

Hola Dergon.

Cita:

Empezado por Dergon (Mensaje 515552)
...
,pero lo que en realidad necesito es que lo haga cada vez que salte una columna a otra.
...

Si necesitas que el código se ejecute cada vez que el usuario cambie de columna, podes detectar el cambio usando el evento OnCellClick del TDBGrid:
Código Delphi [-]
...

procedure TForm1.DBGrid1CellClick(Column: TColumn);
{$J+}
 const PrevCol : Integer = 0;
{$J-}
begin
  if  PrevCol <> Column.Index  then  // ¿ Es la columna previa diferente de la actual ? 
  begin                              // Si...         
    //Usar una consulta SQL para obtener la sumatoria es (por mucho) mas eficiente
    //que recorrer secuencialmente la tabla haciendo sumas sucesivas. 
    //Por ejemplo: 
    dm_dados.qySuma.Close;
    dm_dados.qySuma.SQL.Text := 'SELECT SUM( VALORTOTAL ) AS SUMA FROM SAIPRODUTO';
    dm_dados.qySuma.Open;
    
    // Actualizar el campo de valor total
    dm_dados.tbl_sadapai.Edit;
    dm_dados.tbl_sadapai.FieldByName( 'VALORTOTAL' ).AsCurrency :=  
      dm_dados.qySuma.FieldByName( 'SUMA' ).AsCurrency;

    PrevCol := Column.Index;    // PrevCol es ahora la actual
  end;
end;
Con seguridad encuentres que los nombres de tabla y campos difieren con los que les hayas dados, corrígelos.



Por otro lado, accionando ante el cambio de columna, no verás reflejado el nuevo valor (o el anterior o modificado) hasta que haya sido guardado. Por lo que pareciera mas adecuado usar el evento AfterPost del TDataSet asociado en su lugar.
Si nos explicas con mas detalle la finalidad del código del mensaje #1, con seguridad podremos proponerte mas opciones.

Saludos :)


La franja horaria es GMT +2. Ahora son las 09:23:11.

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