Somar ou diminuir e o campo resultado destacado

Delphi

27/12/2003

Olá pessoal

Eh o seguinte uso o delphi 6 e a tabela paradox

Tenho uma tabela com um campo entrada, saida e saldo. Como eh que eu faço para samar as entradas dimuir as saidas e o resultado no campo saldo ficar azul se saldo possitivo e vermelho saldo negativo.

Ufa! para mim que sou iniciante ta dificil, por favor pode me passar com detalhes tipo em que evento propriedades eu devo colocar os parametros.

Obrigado e feliz ano novo
wagnernormando@ig.com.br


Wagner

Wagner

Curtidas 0

Respostas

Fórum Vini

Fórum Vini

27/12/2003

Olá,
coloque uma Query, um Label e um Botão no seu formulário, mude a propriedade DatabaseName do Query1 para o nome do seu Alias e no OnClick do botão, coloque esse código:
var
  Entradas, Saidas, Saldo: Double;
begin
  Query1.Active:= false;
  Query1.Sql.Text:= ´Select SUM(Entradas) as SE, Sum(Saidas) as SS from tabela´;
  Query1.Active:= true;
  Entradas:= Query1.FieldByName(´SE´).asFloat;
  Saidas:= Query1.FieldByName(´SS´).asFloat;
  Saldo:= Entradas - Saidas;
  if (Saldo > 0) then
    Label1.Font.Color:= $0000CC;
  else
    Label1.Font.Color:= $CC0000;
  Label1.Caption:= FloatToStr(Saldo);



GOSTEI 0
Wagner

Wagner

27/12/2003

Cara, diz um nosso amigo do forum

´Pareçe dificil mais não eh facil não´

Como sou iniciante ainda enfrento os problemas com um pouco de cautela eu já tenho em meu formulario um dbedit onde informo entradas e um dbedit onde informo saida e um outro dbedit com o saldo. Funcionaria com a sua dica? o que devo alterar?

Obrigado


GOSTEI 0
Martins

Martins

27/12/2003

Ilmo. Wagner!!

Tente assim:

No Evento OnShow de Um Form q pode ser chamado de ViewBalanco, onde será verificado o balanco de Entradas e Saidas, vc coloca o codigo abaixo:

IbQuery1.Close;
IbQuery1.SQL.Clear;
IbQuery1.SQL.Text:=´Select SUM(Entrada) as SE, SUM(Saida) as SS From Caixa´;
IbQuery1.Open;
IbQuery2.Insert;
IbQuery2Entrdas.Value:=IbQuery1.FieldByName(´SE´).AsFloat;
IbQuery2Saidas.Value:=IbQuery1.fieldByName(´SS´).AsFloat;
IbQuery2Saldo.Value:=IbQuery2Entrdas.Value-IbQuery2Saidas.Value;
if IbQuery2Saldo.Value < 0 then
DbEdit3.Font.Color:=$0000CC
else
DbEdit3.Font.Color:=$CC0000;
IbQuery2.Post;
IbTransaction1.CommitRetaining; //Só se usar o Interbase.

- Coloque 1 Query e um Table;
- Coloque o DBGrid para vizualizar;
- Coloque os DbEdit´s q receberão os valores;

Não Testei esse código, pois no micro onde estou não tenho Delphi instalado, mas deve rodar blz, qualquer coisa poste novamente aqui, com esse humilde exemplo, vc poderá implementar melhor o seu trabalho, desculpe não poder ajudá-lo mais ainda, é que estou queimando a cuca com uns problemas no Server Linux.

T+

Boa Sorte!

MessageDlg(´Que neste ano que se aproxima, possamos nos unir,´+#13+´nos fortalecermos, refletirmos, buscando dentro de nós´+13+ ´A tão sonhada PAZ, pois, só depende de cada um de nós´+13+´Um Feliz 2004 a todos do Clube Delphi e deste Forum´, mtInformation, [mbOk],0);


GOSTEI 0
Wagner

Wagner

27/12/2003

Cara eu fiz dessa forma mais ainda nao deu certo, o que eu estou fazendo de errado


begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text:=´Select SUM(Entrada) as SE, SUM(Saida) as SS From Caixa´;
Query1.Open;
Query1.Insert;
dbedit4.Text:=Query1.FieldByName(´SE´).Asfloat;
dbedit5.text:=Query1.fieldByName(´SS´).Asfloat;
dbedit6.text:=(dbedit5.Text-dbedit4.Text);
if dbedit6.text < 0 then
DbEdit6.Font.Color:=$0000CC
else
DbEdit6.Font.Color:=$CC0000;
Query1.Post;


GOSTEI 0
Martins

Martins

27/12/2003

Qual é o erro q dá?

Olha só um detalhe, vc não pode usar string para calculo.
[color=red:13d5162692]
dbedit4.Text:=Query1.FieldByName(´SE´).Asfloat;
dbedit5.text:=Query1.fieldByName(´SS´).Asfloat;
dbedit6.text:=(dbedit5.Text-dbedit4.Text); }
[/color:13d5162692]
vc deve usar DbEdit4.value OK!
ou então tente assim StrToInt(DbEdit4.text).

Mas não acho q funcione, é melhor usar (value), assim vc vai trabalhar com os valores de forma correta.

Qualquer coisa.

Estamos aqui.


GOSTEI 0
Wagner

Wagner

27/12/2003

Ainda esta dando os erros descritos logo abaixo o que eu estou esquecendo de colocar?

begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text:=´Select SUM(Entrada) as SE, SUM(Saida) as SS From Caixa´;
Query1.Open;
Query1.Insert;
dbedit4.value:=Query1.FieldByName(´SE´).Asfloat;
dbedit5.value:=Query1.fieldByName(´SS´).Asfloat;
dbedit6.value:=(dbedit5.Text-dbedit4.Text);
if dbedit6.value < 0 then
DbEdit6.Font.Color:=$0000CC
else
DbEdit6.Font.Color:=$CC0000;
Query1.Post;

end;


[Error] U_livrocaixa.pas(151): Undeclared identifier: ´value´
[Error] U_livrocaixa.pas(152): Undeclared identifier: ´value´
[Error] U_livrocaixa.pas(153): Undeclared identifier: ´value´
[Error] U_livrocaixa.pas(153): Operator not applicable to this operand type
[Error] U_livrocaixa.pas(154): Undeclared identifier: ´value´
[Fatal Error] Admincondo1.dpr(41): Could not compile used unit ´U_livrocaixa.pas´


GOSTEI 0
Martins

Martins

27/12/2003

Ainda esta dando os erros descritos logo abaixo o que eu estou esquecendo de colocar? 

begin 
Query1.Close; 
Query1.SQL.Clear; 
Query1.SQL.Text:=´Select SUM(Entrada) as SE, SUM(Saida) as SS From Caixa´; 
Query1.Open; 
Query1.Insert; 
dbedit4.value:=Query1.FieldByName(´SE´).Asfloat; 
dbedit5.value:=Query1.fieldByName(´SS´).Asfloat; 
dbedit6.value:=(dbedit5.Text-dbedit4.Text); 
if dbedit6.value < 0 then 
DbEdit6.Font.Color:=$0000CC 
else 
DbEdit6.Font.Color:=$CC0000; 
Query1.Post; 

end; 


[Error] U_livrocaixa.pas(151): Undeclared identifier: ´value´ 
[Error] U_livrocaixa.pas(152): Undeclared identifier: ´value´ 
[Error] U_livrocaixa.pas(153): Undeclared identifier: ´value´ 
[Error] U_livrocaixa.pas(153): Operator not applicable to this operand type 
[Error] U_livrocaixa.pas(154): Undeclared identifier: ´value´ 
[Fatal Error] Admincondo1.dpr(41): Could not compile used unit ´U_livrocaixa.pas´

[color=blue:899a3ab9b0]
Vejamos, o erro mostrado diz q (value) não foi declarado, isso não deve ocorrer se vc estiver utilizando os componentes Dbedit da Paleta Data Controls do DELPHI, por favor verifique se vc está utilizando os componentes corretos, não utilize ´value´ nos componentes EDIT pois eles não o suportam, eu acho q deve ser esse o problema, mas qualquer coisa, poste aqui novamente, vc pode informar tambem seu e-mail para que eu possa lhe enviar um exemplo OK!
[/color:899a3ab9b0]


GOSTEI 0
Wagner

Wagner

27/12/2003

Se puder mandar eu agradeço

wagnernormando@ig.com.br

ah! quando coloco dessa forma acontece os seguintes erros abaixo

begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text:=´Select SUM(Entrada) as SE, SUM(Saida) as SS From Caixa´;
Query1.Open;
Query1.Insert;
dbedit4.Text:=Query1.FieldByName(´SE´).Asfloat;
dbedit5.text:=Query1.fieldByName(´SS´).Asfloat;
dbedit6.text:=(dbedit5.Text-dbedit4.Text);
if dbedit6.text < 0 then
DbEdit6.Font.Color:=$0000CC
else
DbEdit6.Font.Color:=$CC0000;
Query1.Post;

end;

[Error] U_livrocaixa.pas(151): Incompatible types: ´String´ and ´Double´
[Error] U_livrocaixa.pas(152): Incompatible types: ´String´ and ´Double´
[Error] U_livrocaixa.pas(153): Operator not applicable to this operand type
[Error] U_livrocaixa.pas(154): Incompatible types: ´String´ and ´Integer´
[Fatal Error] Admincondo1.dpr(41): Could not compile used unit ´U_livrocaixa.pas´


GOSTEI 0
Martins

Martins

27/12/2003

Certo, pode deixar q te mando um exemplo básico, na mesma estrutura q queres OK!

Veja seu e-mail mais tarde...


GOSTEI 0
Martins

Martins

27/12/2003

Meu nobre, peço desculpas por lhe informar códigos erroneos, é que ando meio confuso com algumas paradas loucas q andam acontecendo aqui no PC, mas já estou resolvendo isso, acesse o seu e-mail OK!


GOSTEI 0
Wagner

Wagner

27/12/2003

Obrigado a todos pelas dicas, paciência, e ate mesmo os exemplos enviados, mais ainda não consegui resolver meu problema

Nesta dica da um erro que tabela não existe

// var
// Entradas, Saidas, Saldo: Double;
begin
// Query1.Active:= false;
// Query1.Sql.Text:= ´Select SUM(Entradas) as SE, Sum(Saidas) as SS from tabela´;
// Query1.Active:= true;
// Entradas:= Query1.FieldByName(´SE´).asFloat;
// Saidas:= Query1.FieldByName(´SS´).asFloat;
// Saldo:= Entradas - Saidas;
// if (Saldo > 0) then
// Label1.Font.Color:= $0000CC
// else
// Label1.Font.Color:= $CC0000;
// Label1.Caption:= FloatToStr(Saldo);

project admincondo.exe raised exception class edbengineerro with message table does not exist

file c:\arq..prog..\admicondo1\tabela.db
file c:\arq..prog..\admicondo1\tabela.bdf
file c:\arq..prog..\admicondo1\tabela.txt



E o outro exemplo é muito complicado, eu gostaria de uma coisa mais simples se puder tipo

Entradas + saldo
Saidas - saldo

dbedit3:= saidas -saldo + entradas // bom! que no dbedit ou edit ou ate mesmo label me mostre o resultado do que entrou e saiu
(entradas acrescenta ao saldo, saida diminui do saldo e assim me sa uma cor para saldo negativo e possito (as dicas dadas esta faltando pouco para ser resolvida esta quase dando certo mais eu gostaria de ajuda para desvendar esse erros


GOSTEI 0
Wagner

Wagner

27/12/2003

Ops! Melhorou parece que surgiu uma luz no fim do túnel eu fiz algumas alterações, mais ainda da uns errinhos fácil de se resolver :D para vocês e claro :lol:

var
Entrada, Saida, Saldo: Double;
begin
Query1.Active:= false;
Query1.Sql.Text:= ´Select SUM(Entrada) as SE, Sum(Saida) as SS from livrocaixa1´;
Query1.Active:= true;
Entrada:= Query1.FieldByName(´SE´).asFloat;
Saida:= Query1.FieldByName(´SS´).asFloat;
//Saldo:= Entrada - Saida;(tirei isso porque não estava dando certo)
saldo:= strtofloat (t_livrocaixa[´entrada´] + t_livrocaixa[´saldo´] - t_livrocaixa[´saida´]);
if (Saldo > 0) then
dbedit6.Font.Color:= $0000CC
else
dbedit6.Font.Color:= $CC0000;
dbedit6.text:= FloatToStr(Saldo);
end;

dessa forma (saldo:= strtofloat) da um erro na hora que entro no formulário “ conversão do tipo variante invalido”

e dessa forma (saldo:=floattostr) da os erros abaixo
[Error] U_livrocaixa.pas(154): Incompatible types: ´Double´ and ´String´
[Fatal Error] Admincondo1.dpr(41): Could not compile used unit ´U_livrocaixa.pas´


GOSTEI 0
Wagner

Wagner

27/12/2003

Continua o problema ai. so acesso o forum nos fins de semana já que minha conexão e discada sai mais barato :lol: sou vou puder olhar agora no proximo fim de semana, enquanto isso quebro minha cabeça, uma boa semana a todos saude e paz o resto a gente corre atras


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

27/12/2003

Colega,

Considerando que dbEdit6 é um componente Data-Aware, deve estar ´conectado´ a sua query via DataSource, então basta:

begin

  // Obtem o valor das entradas e saídas da tabela LIVROCAIXA1
  Query1.Close;
  Query1.Sql.Text:= ´Select (SUM(Entrada) - Sum(Saida)) as SaldoTotal from livrocaixa1´;
  Query1.Open;

  // Se nSaldo maior que zero
  if ( Query1.FieldByName(´SaldoTotal´).Value > 0) then
    dbedit6.Font.Color:= $0000CC
  else // Senão
    dbedit6.Font.Color:= $CC0000;

end;



GOSTEI 0
Wagner

Wagner

27/12/2003

Vou tentar


GOSTEI 0
Bilatto

Bilatto

27/12/2003

8) Vi sua mensagem no fórum e pensei que já tivesse sido resolvido o seu problema. Isto que você quer é igual ao que eu faço no meu programa de Caixa, só que em Clipper e funciona desde 1991. Se for possível me envie os fontes da unit que está com problemas, ou do aplicativo para analise. Eu não uso rotinas com SQL, e os arquivos Paradox que você usa não precisam ter muitos registros, somente uns 10 ou 20 para ver se faço funcionar.
Espero poder ajudar, em Clipper sei que funciona, em Delphi deveria ser mais fácil. Espero sua resposta.


GOSTEI 0
POSTAR