PDA

Ver la Versión Completa : Dbgrid


Dergon
16-04-2017, 17:36:03
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.

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, 22: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 (http://purodelphi.com/2017/03/31/tip-totalizar-datos-que-se-encuentran-en-un-dataset-aggregates/)

Casimiro Notevi
16-04-2017, 22:29:58
Buenas trades amigos,Y para la próxima vez, procura poner un título descriptivo a tu pregunta, gracias :)

ecfisa
17-04-2017, 03:52:51
Hola Dergon.


...
,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 (http://docwiki.embarcadero.com/Libraries/Berlin/en/Vcl.DBGrids.TCustomDBGrid.OnCellClick) del TDBGrid (http://docwiki.embarcadero.com/Libraries/Berlin/en/Vcl.DBGrids.TDBGrid):

...

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 (http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/DB_TDataSet_AfterPost.html) del TDataSet asociado (http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/DB_TDataSet.html) en su lugar.
Si nos explicas con mas detalle la finalidad del código del mensaje #1 (http://www.clubdelphi.com/foros/showpost.php?p=515552&postcount=1), con seguridad podremos proponerte mas opciones.

Saludos :)