Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Somar ao Clicar em um registro no DBGrid


alemoraes

Pergunta

Boa tarde

Tenho 02 tabelas LOCALIZACAO e LOCALIZACAO_ITENS (Master-Detail) funcionando perfeitamente.

Apesar de pesquisar no Forum não consegui encontrar o que eu queria fazer: é o seguinte:

Quando clico em um registro no DBGridMaster da tabela Pai ele  mostra os registros no DBGridDetail

da tabela Filha, mas quero trazer a soma Total para aparecer no Label (lblTotal).

Seguem os códigos que fiz:

function TfrmLocalizacao.SomaLocalizacaoGrid: Currency;

begin

with FDQuerySomaColuna do

  begin

   Close;

   Active:= true;

   SQL.Clear;

   SQL.Text:= 'SELECT SUM(A.QUANT * A.VALOR_UNITARIO) As Total, B.LOC_CODIGO FROM LOCALIZACAO_ITENS A INNER JOIN LOCALIZACAO B ON (A.LOC_CODIGO = B.LOC_CODIGO) WHERE B.LOC_CODIGO =  '''+ IntToStr(DBGrid1.SelectedRows.Count) + '''  GROUP BY B.LOC_CODIGO';

   Open;

   Result := FieldByName('Total').AsCurrency;

  end;

end;

 

No evento On CellClick

procedure TfrmLocalizacao.DBGrid1CellClick(Column: TColumn);

begin

  if dmDados.tblLocalizacao.State in [dsBrowse] then

   lblTotal.Caption:= FormatCurr('R$ #,0.00', SomaLocalizacaoGrid);

end;

 

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

voce tem um componente FDQuery

e nele voce criou um campo Virtual  ( Total ) onde voce atribuiu uma soma do campo A.Quant * A.Valor_Unitario

SQL.Text:= 'SELECT SUM(A.QUANT * A.VALOR_UNITARIO) As Total,

o que voce tem que fazer agora é mostrar esse campo Total no componente FDQuery 

e depois atribuir o resultado ao componente Label

lblTotal.Caption:= FormatCurr('R$ #,0.00', FDQueryTotal.value);

OBS: Não feche a query antes da atribuição do valor ao label, se não o valor não aparece

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas obrigado pela dica

Eu tentei mas não tive sucesso.

Consegui resolver alterando uma linha da função acima

em vez de:

WHERE B.LOC_CODIGO =  '''+ IntToStr(DBGrid1.SelectedRows.Count) + '''

alterei para:

WHERE B.LOC_CODIGO =  '''+ DBGrid1.DataSource.DataSet.FieldByName('LOC_CODIGO').AsString +'''

e funcionou.

No evento OnCellClick do DBGrid ficou:

procedure TfrmLocalizacao.DBGrid1CellClick(Column: TColumn);

begin

  if dmDados.tblLocalizacao.State in [dsBrowse] then

   begin

     FDQuerySomaColuna.Open;

     lblTotal.Caption:= FormatCurr('R$ #,0.00', SomaLocalizacaoGrid);

 end;

end;

 

Esquecí: Resolvido

Esquecí: Resolvido

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...