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

calcular coluna valor total no dbgrid


Guest Marcelo Augusto

Pergunta

Guest Marcelo Augusto

como somar a coluna valor total do dbgrid e coloca-lo em um dbedit fora do dbgrid?e como faço para colocar o código do produto e ele aparece a descrição do produto?

sou principiante e preciso muito dessa ajuda..

agradeço desde já..

Marcelo Augusto

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
como somar a coluna valor total do dbgrid e coloca-lo em um dbedit fora do dbgrid?e como faço para colocar o código do produto e ele aparece a descrição do produto?
Marcelo, não deixe de informar qual o banco de dados que está utilizando e o componente de acesso aos dados.

Para não haver confusão... Se seu objetivo é apenas mostrar o total na tela, e não guardá-lo no banco de dados, então você não vai utilizar um componente TDBEdit mas sim um TEdit. Se tiver dúvida quanto a diferença entre um e outro, é porque não estão lhe ensinando direito no curso que acaso faça. Se não fizer, é melhor que tente conhecer melhor o Delphi para saber exatamente o que deseja tirar dele. Veja este post do Jhonas - tem uns links interessantes.

Quanto a somar a coluna valor total do DBGrid, vale o que não me canso em repetir: O DBGrid apenas mostra os dados existentes no dataset a ele ligado. Assim, se quer somar a coluna valor total, faça um loop onde você totaliza a coluna (campo do seu dataset) valor total em uma variável e depois a atribui ao seu edit. Se você informar o componente que utiliza, seu nome e o nome do campo envolvido, dá para exemplificar sem lhe confundir mais.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

você usa um select para popular este grid, certo ?

Então, neste select adiciona isto.

select .....seus campos..., sum(nomedocampoquevcquevcquersomar) as ValorTotal from suatabela

depois você pode fazer...ex: se for um adoquery

edit := adoquery.fieldbyname('ValorTotal').asFloat;

espero ter ajudado..

abs

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Marcelo Augusto

Micheus, obrigado pela dica do TDBEdit, realmente me ensinaram errado, o que quero fazer é o seguinte:

- tenho os campos codpro, desc, qnt, vlrunit, vlrtot em uma tabela que esta ligada a um datasource, que é mostrado no dbgrid.

- lembrando que no dbgrid, eu já fiz o calculo vlrtot= qnt*vlrunit, e ele me da o resultado linha pro linha, e eu quero agora colocar o resultado em um TEdit.

- uso paradox 7.

e uma outra duvida, como que eu faço para colocar o codpro e ele já me mostrar a descrição e preço do produto?

abraço, obrigado pela força!

Link para o comentário
Compartilhar em outros sites

  • 0
- lembrando que no dbgrid, eu já fiz o calculo vlrtot= qnt*vlrunit, e ele me da o resultado linha pro linha, e eu quero agora colocar o resultado em um TEdit.
Provavelmente você utiliza um campo calculado no dataset para mostra vlrtot no DBGrid (só para confirmar...).

Quanto a mostrar no TEdit, o procedimento poderá ser feito de duas maneiras:

- a que já mencionei, em que você percorre todos os registros do dataset ligado ao DBGrid somando o campo vlrtot e atribuindo o resultado ao seu TEdit através da conversão para texto (pode ser via função FloatToStr ou FormatFloat).

- outra, seria utilizando um componente TQuery (supondo que você utilize os componentes da paleta BDE) para executar um SQL do tipo SUM. Assim, você obtém a totalização apenas executando a query (talvez a mais simples). Mas é importante saber se você utiliza algum tipo de filtro para mostrar os dados no seu DBGrid, pois este filtro terá que ser aplicado à instrução SQL para obtenção do resultado correto.

Diga-me que opção você prefere, e eu tento lhe explicar como implementá-la. Informe também o nome do dataset ligado ao DBGrid, se ele está em um datamodule - coisas necessárias para uma exemplificação menos genérica.

e uma outra duvida, como que eu faço para colocar o codpro e ele já me mostrar a descrição e preço do produto?
você diz fazer isto no DBGrid? Tipo, você utiliza o DBGrid para edição dos dados?

Supondo que seja, eu teria a oferecer duas opções:

- você digitar o código e mostrar em outro campo (lookup) a descrição;

- você selecionar diretamente a descrição de uma lista.

do mesmo modo, diga-me o que prefere.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Marcelo Augusto

micheus, prefiro fazer as coisas do modo mais simples, porém eu não sei fazer o que você me disse:

- outra, seria utilizando um componente TQuery (supondo que você utilize os componentes da paleta BDE) para executar um SQL do tipo SUM. Assim, você obtém a totalização apenas executando a query (talvez a mais simples). Mas é importante saber se você utiliza algum tipo de filtro para mostrar os dados no seu DBGrid, pois este filtro terá que ser aplicado à instrução SQL para obtenção do resultado correto.
o nome do datasource é dspedidos e está dentro do datamodule1.

"você diz fazer isto no DBGrid? Tipo, você utiliza o DBGrid para edição dos dados?

Supondo que seja, eu teria a oferecer duas opções:

- você digitar o código e mostrar em outro campo (lookup) a descrição;

- você selecionar diretamente a descrição de uma lista."

positivo, quero fazer isto no dbgrid, e a 1ºopção que você me deu é o que preciso, digitar o código do produto no campo codpro, e ele aparece a descrição no campo descpro e o preço no campor vlrunit.

agradeço desde já

Marcelo Augusto

Link para o comentário
Compartilhar em outros sites

  • 0
micheus, prefiro fazer as coisas do modo mais simples, porém eu não sei fazer o que você me disse:
- outra, seria utilizando um componente TQuery (supondo que você utilize os componentes da paleta BDE) para executar um SQL do tipo SUM. Assim, você obtém a totalização apenas executando a query (talvez a mais simples). Mas é importante saber se você utiliza algum tipo de filtro para mostrar os dados no seu DBGrid, pois este filtro terá que ser aplicado à instrução SQL para obtenção do resultado correto.
o nome do datasource é dspedidos e está dentro do datamodule1.
estas informações não são as esperadas, mas vamos ver o que sai...

você precisará adicionar um componente TQuery no seu datamodule1 (vou chamá-la, QrySomaPedido). Configura a priopriedade DatabaseName com o alias que você utiliza em seu sistema (o mesmo das outras tabelas). Na propriedade SQL você adiciona o seguinte comando:

SELECT SUM(qnt*vlrunit) AS vlrtot
FROM pedidos
WHERE ...
na cláusula WHERE você definirá o filtro. Como você diz que a tabela se chama pedidos, imagino que você esteja somando os items dos pedidos de um determinado cliente ou algo assim. Como disse, faltaram informações para poder exemplificar melhor, mas espero que você consiga entender o espírito da coisa. Com esta query pronta, basta que você execute ela a cada vez que quiser atualizar o valor total, com um código mais ou menos assim:
with datamodule1 do
begin
 // os parâmetros são utilizados no caso de precisar fazer 
 // o filtro na cláusula WHERE
  QrySomaPedido.ParamByName(<nome do parâmetro>);
 // ao executar Open, o resultado será obtido
  QrySomaPedido.Open;
 // buscamos o campo que foi calculado ao qual demos
 // o nome "vlrtot" e formatamos ele para mostrar no Edit
  Edit1.Text := FormatFloat('#,##0.00', QrySomaPedido.FieldByName('vlrtot').AsFloat);
 // fechamos a consulta
  QrySomaPedido.Close;
end;
...
"você diz fazer isto no DBGrid? Tipo, você utiliza o DBGrid para edição dos dados? Supondo que seja, eu teria a oferecer duas opções: - você digitar o código e mostrar em outro campo (lookup) a descrição; - você selecionar diretamente a descrição de uma lista."
positivo, quero fazer isto no dbgrid, e a 1ºopção que você me deu é o que preciso, digitar o código do produto no campo codpro, e ele aparece a descrição no campo descpro e o preço no campor vlrunit.
Para isso, você deverá adicionar um componente TQuery (vou chamá-lo QryProduto). Configura a propriedade DatabaseName (como já mencionei antes) e coloca na propriedade SQL uma instrução do tipo SELECT para que possamos obter o nome do produto e valor unitário. Entretanto, deveremos filtrar apenas o código do produto que queremos e para isso fazemos uso da cláusula WHERE parametrizada:
SELECT descpro, vlrunit
FROM produto
WHERE codpro = :codpro
você me disse em outro post:
(...), o que quero fazer é o seguinte: - tenho os campos codpro, desc, qnt, vlrunit, vlrtot em uma tabela que esta ligada a um datasource, que é mostrado no dbgrid.
a pergunta é: o campo desc e vlrunit existem na sua tabela de pedidos sendo edita? É isso? Supondo que seja, o que vamos fazer, na seqüência, é atribuir os valores obtidos via QryProduto a estes campos. Para isto, iremos fazer uso o evento OnValidate do seu campo (field) codpro. Dê um duplo-click no dataset pedido que você está utilizando no DBGrid, localize o campo codpro e na janela Object Inspector acesse Events e dê um duplo-click no evento OnValidate. No editor de código colocaremos (supondo o nome do seu dataset TabPedido):
procedure TForm1.TabPedidoCodProValidate(Sender: TField);
begin
  QryProduto.ParamByName('CodPro').AsInteger := TabPedidoCodPro.Value;
  QryProduto.Open;
  TabPedidodescpro.Value := QryProdutodescpro.Value;
  TabPedidovlrunit.Value := QryProdutovlrunit.Value;
  QryProduto.Close;
end;

Para concluir, estes campos não deverão ser editados no DBGrid, logo, se você incluiu os campos no DBGrid em design-time, dê um duplo-click nele e selecione os campos (com as conf. das colunas) descpro e vlrunit e na propriedade ReadOnly, marque ela como True.

Bom, espero que você consiga implementar. Fica um pouco difícil dar uma instrução correta quando não se tem as informações necessárias. Se você entender o espírito da coisa, irá conseguir implementar.

Abraços

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
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...