soma em DBText

Delphi

25/07/2012

Ola pessoal, mais uma dúvida...

Tenho 4 DBText. Nos tres primeiros consegui montar querys para trazer o total pra cada item. Exemplo abaixo:

DBText1 = query para retornar total para item1;
DBText2 = query para retornar total para item2;
DBText3 = query para retornar total para item3;

O problema esta no DBText4 onde quero que apareça a soma de tudo seguindo a seguinte formula:

DBText4 = ((DBText1 + DBText2) - DBText3);

Se possivel, como faço para limpar a memoria dos dados que digitei em um form de cadastro mas desisti no meio do caminho?

alguem me de uma luz, por favor.
Carlos Magno

Carlos Magno

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

25/07/2012

Olá, não entendi a segunda pergunta, mas a questão da soma pode ser resolvida da convertendo o texto dos demais DBTexts. Por exemplo:
var
total:double;
begin
total := StrToFloat(DBText1.Text) + StrToFloat(DBText2.Text) + StrToFloat(DBText3.Text);
DBText4.Text := FormatFloat(´#,##0.00´, total);

Isso após definir o texto dos três primeiros componentes.
Boa sorte.
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

A segunda pergunta é o seguinte...

Quando dou um Append para iniciar um novo cadastro, noto que no dbgrid o cursor indica um novo cadastro. Só que se eu fechar o form de cadastro sem clicar em salvar, os dados digitados ficam la no dbgrid e se eu abrir novamente o form para cadastrar os dados digitados ainda estarão lá. Como fazer para limpa-los.

Colega, criei um outro tópico antes desse e ainda não consegui resolve-lo. Se puder me dar uma ajuda la. o Link segue abaixo:
[url]https://www.devmedia.com.br/forum/aparecer-sinais-+-e-em-numeros/420359[/url]

Valeu pela ajuda que me prestar.
GOSTEI 0
Bruno Leandro

Bruno Leandro

25/07/2012

voce precisa dar um refresh na query, execute o MinhaQuey.Close; MinhaQuery.Open;
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

25/07/2012

Para resolver essa situação, você pode verificar se o dataset está em edição/inserção ao fechar o form e cancelar a operação. Por exemplo, no evento OnClose do form você pode definir um código como este:
if query.State in [dsEdit, dsInsert] then
   query.Cancel;


Abraço.
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

A inserção ou edição não é através de query, e sim de um DataSet
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

25/07/2012

Carlos, por DATASET, pode-se entender Query, Table, ClientDataSet, até mesmo StoredProcedures em certas situações. Como o componente mais utilizado é a Query (TQuery, TADOQuery, TIBQuery, TSQLQuery, etc), nós costumamos utilizar essa denominação nos exemplos. Porém, basta você utilizar seu dataset no exemplo dado.
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

Como disse no outro topico eu sou iniciante.

Eu coloquei o código desta forma:

if dm01.tbl_servico.State in [dsInsert, dsEdit] then
dm01.tbl_servico.Cancel;


Esta dando erro Undeclared indentifier. dsInsert
GOSTEI 0
William

William

25/07/2012

Acrescente na cláusula Uses do seu form a unit DB...
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

Wllfl....se você se refere a unit dm01(Data Module), ela ja esta inserida.
GOSTEI 0
William

William

25/07/2012

Carlos a unit DB faz parte da VCL do delphi, ela dá suporte para o uso da enum[dsInsert, dsEdit, dsInactive] entre outras funções.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

25/07/2012

Carlos, é a unit DB mesmo. No form onde você está usando o [dsInsert, dsEdit]. Acrescente a unit DB à cláusula Uses.
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

Valeu galera, deu certo....brigadão a todos...agora só falta resolver o outro tópico.

[url]https://www.devmedia.com.br/forum/aparecer-sinais-+-e-em-numeros/420359[/url]
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

Ola pessoal e em especial os Joel.....sobre a duvida deste tópico sobre soma em DBText, a possível solução postada pelo Joel deu erro: Cannot access protected symbol TControl.Text:


Olá, não entendi a segunda pergunta, mas a questão da soma pode ser resolvida da convertendo o texto dos demais DBTexts. Por exemplo:
#Código

var
total:double;
begin
total := StrToFloat(DBText1.Text) + StrToFloat(DBText2.Text) + StrToFloat(DBText3.Text);
DBText4.Text := FormatFloat(´#,##0.00´, total);

Isso após definir o texto dos três primeiros componentes.
Boa sorte.


Não sei se esqueci de falar, mas os valor são em moeda e os DBText1, DBText2 e DBText3 possuem querys próprias para retorna a soma...


DBText1 = query para retornar total para item1;
DBText2 = query para retornar total para item2;
DBText3 = query para retornar total para item3;

DBText4 = ((DBText1 + DBText2) - DBText3);


seria mais ou menos assim...
DBText1 = R$ 100,00
DBText2 = R$ 350,00
DBText3 = R$ 84,50

DBText4 = (R$ 100,00 + R$ 350,00) - R$84,50)
DBText4 = R$ 365,50
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

25/07/2012

Cara, vê se no lugar de Text você pode usar Caption.
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

Vou tentar isso mais tarde, pois esse projeto esta no meu pc em casa.
GOSTEI 0
William

William

25/07/2012

Colega esse símbolo monetário R$ pode atrapalhar sua conta, ideal é realizar as operações matemáticas sem esse símbolo.

Quanto à captura dos valors vc pode usar:
DBText1.Text
ou
DBText1.Field.AsString
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

Galera...eu tentei, não apresentou erros, mas também não me retornou nada.
GOSTEI 0
William

William

25/07/2012

Colega se possível poste novamente seu código...
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

Willian, já to até pensando em desistir, rsrsrsrsrsr.....mas vamos lá.

É uma tabela para controle de caixa, e são três tipos de entradas. Tenho 4 DBTexts e três deles me retornam a soma do total para cada tipo:

DBText1 me retornar a soma dos valores para entradas do tipo 1 através de um TQuery;
DBText2 me retornar a soma dos valores para entradas do tipo 2 através de um TQuery;
DBText3 me retornar a soma dos valores para entradas do tipo 3 através de um TQuery;

No DBText4 quero que me mostre o valor resultante total seguindo a formula abaixo:
DBText4 = ((DBText1 + DBText2) - DBText3);
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

Willian, já to até pensando em desistir, rsrsrsrsrsr.....mas vamos lá.

É uma tabela para controle de caixa, e são três tipos de entradas. Tenho 4 DBTexts e três deles me retornam a soma do total para cada tipo:

DBText1 me retornar a soma dos valores para entradas do tipo 1 através de um TQuery;
DBText2 me retornar a soma dos valores para entradas do tipo 2 através de um TQuery;
DBText3 me retornar a soma dos valores para entradas do tipo 3 através de um TQuery;

No DBText4 quero que me mostre o valor resultante total seguindo a formula abaixo:
DBText4 = ((DBText1 + DBText2) - DBText3);
GOSTEI 0
William

William

25/07/2012

Colega jamais desista de um código, vc aprende errando !!!!

Bom vamos lá, tentei reproduzir seu cenário e fiz algumas modificações:

1 - Mude para false a propriedade currency de todos os campos monetários, não vai mais aparecer R$.
2 - Na propriedade DisplayFormat dos campos monetários atribua esse valor ##0.00, estamos inserindo uma máscara básica para seu valores.
3 - Estou supondo que essa soma ocorra durante uma inserção no banco de dados, então usei esse código para somar e salvar.
var
   total : Double;
begin
     if cds1.State in [dsInsert, dsEdit] then
     begin
         total := 0;
         total := ((StrToFloat(dbedtVALOR.Text) + StrToFloat(dbedtVALOR_CUSTO.Text)) - StrToFloat(dbedtVALOR_VENDA.Text));
         dbedtVALOR_TOTAL.Text := FloatToStr(total);
         cds1.Post;
     end;
end;


Funcionou perfeitamente, testa aí qualquer coisa poste novamente, mas nunca desista!
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

Não william, não é durante a inserção. Isto fica num form onde mostra as estatísticas do caixa a cada inserção. A inserção acontece por outro form onde escolho entre três opções o tipo de entradas.

Tipo 1 = Doações (entrada em caixa);
Tipo 2 = Recebimentos (entrada em caixa);
Tipo 3 = Pagamentos (saída);

o DBText4 é para saber o total que tenho em caixa;

DBText4 = ((DBText1 + DBText2) - DBText3)
Total em caixa = ((entrada tipo1 + entrada tipo2) - saidas;
GOSTEI 0
William

William

25/07/2012

VC quer disparar essa soma por qual evento, exemplo um botão etc..

Para trabalhar com DBEdit vc precisa inserir ou editar campos, se for só para apresentar valor da soma e não gravar a soma no banco pode usar edit mesmo.
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

bem..não é pra gravar nem inserir, é somente para apresentar o resultado da formula que mostrei acima. No caso do Edit seria um campo, mas quero que apresente como texto, como uma label, tem como?
GOSTEI 0
William

William

25/07/2012

Segue o mesmo código mas usando label:

GOSTEI 0
William

William

25/07/2012

Foi mal, enviei sem o código:

var
total : Double;
begin
if cds1.State in [dsInsert, dsEdit] then
begin
total := 0;
total := ((StrToFloat(dbedtVALOR.Text) + StrToFloat(dbedtVALOR_CUSTO.Text)) - StrToFloat(dbedtVALOR_VENDA.Text));
Label.caption := Formatfloat(##0.00, total);
cds1.Post;
end;
end;
GOSTEI 0
William

William

25/07/2012

Não esquece se vc não vai inserir então fica mais simples o código, é o sono acho rsrsrsr...

var
total : Double;
begin
total := 0;
total := ((StrToFloat(dbedtVALOR.Text) + StrToFloat(dbedtVALOR_CUSTO.Text)) - StrToFloat(dbedtVALOR_VENDA.Text));
Label.caption := Formatfloat(##0.00, total);
end;
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

Deu erro....Cannot access protected symbol TControl.Text
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

vou dormir.....minha cabeça ja ferveu por hj...amanha ou vou tentar mais ainda....rsrsrsrs
GOSTEI 0
William

William

25/07/2012

Cara vc tem skype, pq já viramos o código de cabeça pra cima.

Eu testo e copio o código para fórum, ou acessar sua máquina via teenview..
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

nao tenho nada disso....mas amanha podemos ver isso no pc do trabalho, pode ser? pq la eu uso o AMMY Admin.

caso queira ver o form ta o link da imagem do form logo abaixo:

[url]http://oticasaofco.com.br/images/caixa.jpg[/url]
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

Pode me dizer a que horas podemos ver a questão dos códigos?
GOSTEI 0
William

William

25/07/2012

Então Carlos durante o dia, só mesmo pelo skype ou pelo fórum, já à noite pode ficar mais fácil acessar remotamente.

Seu código deve estar faltando apenas detalhes, inclusive baseado nessa última mensagem de erro que tem relação com o uso do Label.caption.
GOSTEI 0
Cauê Nishijima

Cauê Nishijima

25/07/2012

Eu não sei se estou entendendo certo, mas Carlos Magno porque você não usa campos calculados pra fazer isso? e porque não usa a propriedade currency pra colocar o R$?
Ou eu não estou entendendo qual o real problema!
Se quiser eu dou uma explicada melhor de como fazer usando campos calculados.

Att.
Cauê Nishijima
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

Opa....Desculpa a demora em responder, eu não havia visto sua postagem. Não sei fazer com campos calculados, já tentei uma vez sem orientação e não consegui. Então em uma pesquisa vi que podia fazer com querys e filtragens (que é o que eu preciso). As filtragens eu consegui na boa, só não tô conseguindo chegar ao total geral calculado.
GOSTEI 0
Deivison Melo

Deivison Melo

25/07/2012

Ainda está com problemas?
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

Ainda estou sim...
GOSTEI 0
Deivison Melo

Deivison Melo

25/07/2012

Quais os problemas atuais Carlos?
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

ainda estou sem conseguir efetuar a soma. Ja fiz as querys para efetuar soma com filtragens, mas não consigo calcular o total geral seguindo a formula que especifiquei em uma postagem acima.
GOSTEI 0
Carlos Magno

Carlos Magno

25/07/2012

Galera...consegui resolver usando uma dica do William.....mas mesmo assim, obrigados a todos os outros que deram dicas......
GOSTEI 0
POSTAR