Como faz para jogar nun edit soma de coluna do dbgrid

Delphi

14/09/2007

Como faço para jogar num dbgrid o valor de soma de uma coluna de um dbgrid?


Jpauloss

Jpauloss

Curtidas 0

Melhor post

Jpauloss

Jpauloss

19/09/2007

Proble resolvido com o ´santo´ Aggregates!
Depois de quebrar muito a cabeça (coisa de iniciante) depois como fazer campos agregado.
Vai aí a dica para quem esta com o mesmo problema.

Marcar no ClientDataSet a opção AggregatesActive = true

Dar dois cliques no ClientDataSet depois clicar com o botão direito e escolher a opção New Field... Dar um nome que vc queira e selecionar no Field Type: aggregate e depois dar ok!

Nas opções do campo criado vai em Expression e coloca SUM(CAMPO_QUALQUER) aqui pode fazer um AVG MAX MIN etc...

Vai no form que vc quer coloca um dbtext e seta para o ClientDataSet e o campo agregado criado e pronto.


GOSTEI 1

Mais Respostas

Raserafim

Raserafim

14/09/2007

se vc estiver utilizando o ClientDataSet vc pode criar um campo aggregate e na propriedade Expression deste campo coloque Sun(nomecampo)


GOSTEI 0
Martins

Martins

14/09/2007

Como faço para jogar num dbgrid o valor de soma de uma coluna de um dbgrid?


você quer somar as colunas de um DBGrid e jogar o resultado em outro DBGrid é isso?

vc desejar somar todas as linhas do DbGrid ou selecionar aleatoriamente?

with QuerySoma do
begin
  Close;
  SQL.Text := ´select sum(VALOR) from PAGTOS´;
  Open;
  Cds.FieldByName(´Valor2´).asFloat := FormatFloat(´,0.00´, Fields[0].AsFloat);
end;


ou então siga essa dica q já foi publicada no portal devmedia ´dicas do editor do site´

Adicione em um formulário os seguintes componentes: um DBGrid, um DataSource, um ClientDataSet, um Button e um Edit. Faça a ligação entre o DBGrid, DataSource e ClientDataSet.

Adicione o arquivo employee.xml através da propriedade FileName do ClientDataSet. Adicione no DBGrid as colunas referente aos campos EMPNO, LASTNAME, FIRSTNAME e SALARY.

Altere as propriedades Options.dgMultiSelect, Options.dgRowSelect e Options.dgAlwaysShowSelection para True do DBGrid. No OnClick do botão digite o seguinte código:

var
  i: Integer;
  Soma: Currency;
begin
  Soma := 0;
  for i := 1 to DBGrid1.SelectedRows.Count do
  begin
    ClientDataSet1.GotoBookMark(Pointer(DBGrid1.SelectedRows.Items[i-1]));
    Soma := Soma +  ClientDataSet1.FieldByName(´Salary´).AsFloat;
  end;
  Edit1.Text := FormatFloat(´R$ ,0.00´, Soma);
end;


Boa sorte e bons códigos!!


GOSTEI 0
Martins

Martins

14/09/2007

Como faço para jogar num dbgrid o valor de soma de uma coluna de um dbgrid?


você quer somar as colunas de um DBGrid e jogar o resultado em outro DBGrid é isso?

vc desejar somar todas as linhas do DbGrid ou selecionar aleatoriamente?

with QuerySoma do
begin
  Close;
  SQL.Text := ´select sum(VALOR) from PAGTOS´;
  Open;
  Cds.FieldByName(´Valor2´).asFloat := FormatFloat(´,0.00´, Fields[0].AsFloat);
end;


ou então siga essa dica q já foi publicada no portal devmedia ´dicas do editor do site´

Adicione em um formulário os seguintes componentes: um DBGrid, um DataSource, um ClientDataSet, um Button e um Edit. Faça a ligação entre o DBGrid, DataSource e ClientDataSet.

Adicione o arquivo employee.xml através da propriedade FileName do ClientDataSet. Adicione no DBGrid as colunas referente aos campos EMPNO, LASTNAME, FIRSTNAME e SALARY.

Altere as propriedades Options.dgMultiSelect, Options.dgRowSelect e Options.dgAlwaysShowSelection para True do DBGrid. No OnClick do botão digite o seguinte código:

var
  i: Integer;
  Soma: Currency;
begin
  Soma := 0;
  for i := 1 to DBGrid1.SelectedRows.Count do
  begin
    ClientDataSet1.GotoBookMark(Pointer(DBGrid1.SelectedRows.Items[i-1]));
    Soma := Soma +  ClientDataSet1.FieldByName(´Salary´).AsFloat;
  end;
  Edit1.Text := FormatFloat(´R$ ,0.00´, Soma);
end;


Boa sorte e bons códigos!!


GOSTEI 0
Jpauloss

Jpauloss

14/09/2007

[quote:4aaa475f9d=´jpauloss´]Como faço para jogar num dbgrid o valor de soma de uma coluna de um dbgrid?


você quer somar as colunas de um DBGrid e jogar o resultado em outro DBGrid é isso?

vc desejar somar todas as linhas do DbGrid ou selecionar aleatoriamente?

with QuerySoma do
begin
  Close;
  SQL.Text := ´select sum(VALOR) from PAGTOS´;
  Open;
  Cds.FieldByName(´Valor2´).asFloat := FormatFloat(´,0.00´, Fields[0].AsFloat);
end;


ou então siga essa dica q já foi publicada no portal devmedia ´dicas do editor do site´

Adicione em um formulário os seguintes componentes: um DBGrid, um DataSource, um ClientDataSet, um Button e um Edit. Faça a ligação entre o DBGrid, DataSource e ClientDataSet.

Adicione o arquivo employee.xml através da propriedade FileName do ClientDataSet. Adicione no DBGrid as colunas referente aos campos EMPNO, LASTNAME, FIRSTNAME e SALARY.

Altere as propriedades Options.dgMultiSelect, Options.dgRowSelect e Options.dgAlwaysShowSelection para True do DBGrid. No OnClick do botão digite o seguinte código:

var
  i: Integer;
  Soma: Currency;
begin
  Soma := 0;
  for i := 1 to DBGrid1.SelectedRows.Count do
  begin
    ClientDataSet1.GotoBookMark(Pointer(DBGrid1.SelectedRows.Items[i-1]));
    Soma := Soma +  ClientDataSet1.FieldByName(´Salary´).AsFloat;
  end;
  Edit1.Text := FormatFloat(´R$ ,0.00´, Soma);
end;


Boa sorte e bons códigos!![/quote:4aaa475f9d]

Quero jogar o valor da soma dentro de um edit.
Estava fazendo desse jeito:
   dm.sdsCheques.Close;
   dm.sdsCheques.CommandText:= ´select sum(valor) from cheques where id_cliente= :id_cliente´;
   dm.sdsCheques.ParamByName(´id_cliente´).AsString:=cod_cli.Text;
   jvEdit:=dm.sdsCheques.CommandText;

Mas desse jeito ele joga o código select sum(valor) from cheques where id_cliente= :id_cliente´ dentro do edit. Ta tudo errado.
Tem alguma ideia?


GOSTEI 0
Jpauloss

Jpauloss

14/09/2007

Consertando:
   dm.sdsCheques.Close;
   dm.sdsCheques.CommandText:= ´select sum(valor) from cheques where id_cliente= :id_cliente´;
   dm.sdsCheques.ParamByName(´id_cliente´).AsString:=cod_cli.Text;
   jvEdit1.Text:=dm.sdsCheques.CommandText;



GOSTEI 0
Jpauloss

Jpauloss

14/09/2007

sobe


GOSTEI 0
Martins

Martins

14/09/2007

sobe


Faz assim:

dm.sdsCheques.Close; 
   dm.sdsCheques.CommandText:= ´select sum(valor) as Valores from cheques where id_cliente= :id_cliente´; 
   dm.sdsCheques.ParamByName(´id_cliente´).AsString:=cod_cli.Text; 
   jvEdit1.Text:=dm.sdsCheques.Fields[0].AsString;
//ou então...

// jvEdit1.Text:=dm.sdsCheques.FieldByName(´Valores´).AsString;


Boa sorte e bons códigos!!!


GOSTEI 0
Jpauloss

Jpauloss

14/09/2007

[quote:118fe21544=´jpauloss´]sobe


Faz assim:

dm.sdsCheques.Close; 
   dm.sdsCheques.CommandText:= ´select sum(valor) as Valores from cheques where id_cliente= :id_cliente´; 
   dm.sdsCheques.ParamByName(´id_cliente´).AsString:=cod_cli.Text; 
   jvEdit1.Text:=dm.sdsCheques.Fields[0].AsString;
//ou então...

// jvEdit1.Text:=dm.sdsCheques.FieldByName(´Valores´).AsString;


Boa sorte e bons códigos!!![/quote:118fe21544]

Está exatamente desse jeito e está dando este erro:
---------------------------
Debugger Exception Notification
---------------------------
Project SisFactory.exe raised exception class EConvertError with message ´Nenhum argumento para o formato ´¬s´´. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------



GOSTEI 0
Jpauloss

Jpauloss

14/09/2007

O que pode ser isso?


GOSTEI 0
Martins

Martins

14/09/2007

O que pode ser isso?


vc está usando esse código em um Button ou KeyPress de algum componente ou algo assim?

vou fazer um teste com o Delphi depois.


GOSTEI 0
Jpauloss

Jpauloss

14/09/2007

[quote:cbdd78bad6=´jpauloss´]O que pode ser isso?


vc está usando esse código em um Button ou KeyPress de algum componente ou algo assim?

vou fazer um teste com o Delphi depois.[/quote:cbdd78bad6]

Estou usando no componente JvDBSearchComboBox1 no evento onChange.


GOSTEI 0
Martins

Martins

14/09/2007

[quote:477ba9c363=´Martins´][quote:477ba9c363=´jpauloss´]O que pode ser isso?


vc está usando esse código em um Button ou KeyPress de algum componente ou algo assim?

vou fazer um teste com o Delphi depois.[/quote:477ba9c363]

Estou usando no componente JvDBSearchComboBox1 no evento onChange.[/quote:477ba9c363]

Não conheço o componente, mas acredito q não seja o melhor lugar para se usar a instrução, se vc nos passar a idéia podemos ver como implementar a sua idéia, pq vc deve selecionar algo nesse [b:477ba9c363]JvDBSearchComboBox1[/b:477ba9c363], então nos passe a idéia.

Boa sorte e bons códigos.


GOSTEI 0
Jpauloss

Jpauloss

14/09/2007

[quote:3f6f40d556=´jpauloss´][quote:3f6f40d556=´Martins´][quote:3f6f40d556=´jpauloss´]O que pode ser isso?


vc está usando esse código em um Button ou KeyPress de algum componente ou algo assim?

vou fazer um teste com o Delphi depois.[/quote:3f6f40d556]

Estou usando no componente JvDBSearchComboBox1 no evento onChange.[/quote:3f6f40d556]

Não conheço o componente, mas acredito q não seja o melhor lugar para se usar a instrução, se vc nos passar a idéia podemos ver como implementar a sua idéia, pq vc deve selecionar algo nesse [b:3f6f40d556]JvDBSearchComboBox1[/b:3f6f40d556], então nos passe a idéia.

Boa sorte e bons códigos.[/quote:3f6f40d556]

Esse componente seleciona o cliente desejado na tela de ´Troca de Cheques´. O cliente me pediu que no grid só aparecesse os cheques relacionados ao cliente selecionado, até aí tudo bem fiz desse jeito e funcionou legal no evento onChange do componente jvDBSearchComboBox.
//**Instruções para jogar somente no dbgrid os cheques dos clientes selecionados**//
 dm.sdsCheques.Close;
 dm.sdsCheques.CommandText:=´select * from cheques where id_cliente= :id_cliente´;
 dm.sdsCheques.ParamByName(´id_cliente´).AsString:=cod_cli.Text;
 dm.sdsCheques.Open;
 dm.cdsCheques.Refresh;

O cliente me pediu tambem que colocasse um campo bem visual para visualizar o valor total de cheques trocados somente do cliente selecionado. Aí fiz no mesmo componente no mesmo evento ´onChange´ logo abaixo do código acima e ficou assim:
 //Instruções para soma//
 dm.sdsCheques.Close;
 dm.sdsCheques.CommandText:=´select sum(valor) as valores from cheques where id_cliente= :id_cliente´;
 dm.sdsCheques.ParamByName(´id_cliente´).AsString:=cod_cli.Text;
 dm.sdsCheques.Open;
 total.Text:=FloatToStr(dm.sdsCheques.fieldbyname(´valores´).Value);
 end;


O problema que esse sistema não fui eu que fiz, já peguei o Layout pronto com tabelas em paradox, e o cliente me pediu que não alterasse o layout. Coloquei em firebird e adicionei algumas funcionalidades.

Alguma ideia?

O evento onChange do componente JvDBSearchComboBox1 ficou assim:
procedure TFrmCheques.clienteChange(Sender: TObject);
begin
//**Instruções para jogar somente no dbgrid os cheques dos clientes selecionados**//
 dm.sdsCheques.Close;
 dm.sdsCheques.CommandText:=´select * from cheques where id_cliente= :id_cliente´;
 dm.sdsCheques.ParamByName(´id_cliente´).AsString:=cod_cli.Text;
 dm.sdsCheques.Open;
 dm.cdsCheques.Refresh;

 //Instruções para soma//
 dm.sdsCheques.Close;
 dm.sdsCheques.CommandText:=´select sum(valor) as valores from cheques where id_cliente= :id_cliente´;
 dm.sdsCheques.ParamByName(´id_cliente´).AsString:=cod_cli.Text;
 dm.sdsCheques.Open;
 total.Text:=FloatToStr(dm.sdsCheques.fieldbyname(´valores´).Value);
 end;



GOSTEI 0
Martins

Martins

14/09/2007

Proble resolvido com o ´santo´ Aggregates! Depois de quebrar muito a cabeça (coisa de iniciante) depois como fazer campos agregado. Vai aí a dica para quem esta com o mesmo problema. Marcar no ClientDataSet a opção AggregatesActive = true Dar dois cliques no ClientDataSet depois clicar com o botão direito e escolher a opção New Field... Dar um nome que vc queira e selecionar no Field Type: aggregate e depois dar ok! Nas opções do campo criado vai em Expression e coloca SUM(CAMPO_QUALQUER) aqui pode fazer um AVG MAX MIN etc... Vai no form que vc quer coloca um dbtext e seta para o ClientDataSet e o campo agregado criado e pronto.


Queria entender o problema para chegarmos a uma solução, realmente com campo agregado é bem melhor.

Mandou bem.

Boa sorte e bons códigos!


GOSTEI 0
POSTAR