Fórum Como faz para jogar nun edit soma de coluna do dbgrid #346051
14/09/2007
0
Jpauloss
Curtir tópico
+ 0Post mais votado
19/09/2007
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.
Jpauloss
Gostei + 1
Mais Posts
14/09/2007
Raserafim
Gostei + 0
14/09/2007
Martins
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
14/09/2007
Martins
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
16/09/2007
Jpauloss
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
16/09/2007
Jpauloss
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
17/09/2007
Jpauloss
Gostei + 0
17/09/2007
Martins
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
17/09/2007
Jpauloss
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
17/09/2007
Jpauloss
Gostei + 0
17/09/2007
Martins
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
17/09/2007
Jpauloss
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
18/09/2007
Martins
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
19/09/2007
Jpauloss
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
19/09/2007
Martins
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
Clique aqui para fazer login e interagir na Comunidade :)