Fórum Incompatibilidade nas variáveis #250976
17/09/2004
0
Descobri que a Unit Math não funcionava no meu computador, pelo fato de eu estar utilizando a versão Standard do Delphi 3, assim sendo, consegui hoje a versão Client/Server, mas agora outro problema segura o meu projeto. Tenho certeza de que a solução é simples, porém pela minha inexperiência não consegui resolver:
Tenho os seguintes campos em uma tabela:
(Vencimento = Data), (Valor = Moeda), (Juros = Numerico), (Pago em = Data), (Dias em atraso = Numerico ´Representa a DatadoPagamento-DataDoVencimento)
(A Pagar = Moeda)
O Código que estou utilizando é o seguinte:
---------------------------------------------------------------------------------
procedure TMensalidades_.BotaoPagarClick(Sender: TObject);
Var
X, Y: Real;
begin
// Fórmula para cálculo de juros: Valor*(1+Juros)^DiasAtrasados
X := dm_.QryMensalidadesJuros_mora.Value+1;
Y := dm_.QryMensalidadesDiasAtraso.Value;
dm_.QryMensalidadesAPagar.Value := dm_.QryMensalidadesValor.Value*Power(X,Y);
end;
---------------------------------------------------------------------------------
Quando compilo apresenta a seguinte mensagem de erro:
Incompatible types: ´Integer´ and ´Real´.
Se alguém puder dizer-me onde está o erro e como corrigí-lo, conte com o meu mais sincero obrigado.
Acreditando no auxílio de todos que formam o ClubeDelphi, antecipadamente agradeço.
Pro-luck
Curtir tópico
+ 0Posts
17/09/2004
Uildenei
veja os tipos de dados usados nos tipos de campos da tabela.
Gostei + 0
18/09/2004
Pro-luck
E as variáveis do tipo Double são compatíveis com Integer?
Antecipadamente agradeço pelo auxílio prestado.
Gostei + 0
18/09/2004
Pro-luck
Gostei + 0
18/09/2004
Vinicius2k
Por favor, relacione para nós os tipos dos TFields envolvidos neste cálculo. (TIntegerField, TFloatField, Etc)...
- QryMensalidadesJuros_mora
- QryMensalidadesDiasAtraso
- QryMensalidadesAPagar
- QryMensalidadesValor
T+
Gostei + 0
20/09/2004
Pro-luck
Banco de dados gerado no Paradox:
- QryMensalidadesJuros_mora = Tipo Númeric
- QryMensalidadesDiasAtraso = Tipo Numeric
- QryMensalidadesAPagar = Tipo Currency
- QryMensalidadesValor = Tipo Currency
A fórmula usada para calcular o valor A Pagar está sendo usada no evento OnClick de um botão existente no formulário.
A fórmula é a seguinte:
A Pagar = Valor * (1+Imposto) ^ Dias de atraso.
E a fórmula que estou utilizando é a seguinte:
dm_.QryMensalidadesAPagar.Value := dm_.QryMensalidadesValor.Value*Power(X,Y);
end;
Onde, dm_ é o nome do DataModulo que contém as Queries do sistemas, QryMensalidade é o nome da Query que contém os dados que deverão ser calculados. Power é a função que calcula potência (dica fornecida já pelo ClubeDelphi).
X representa (1+dm_.QryMensalidadesJuros_Mora.Value) e
Y representa dm_.QryMensalidadesDiasAtraso.Value).
Espero ter sido o mais claro possível.
Brigadão pela força pessoal.
Té +
Gostei + 0
20/09/2004
Vinicius2k
Eu não consigo simular seu erro...
Criei a tabela conforme a estrutura que vc passou e inseri uma query com o mesmo cálculo que vc e funciona normalmente...
A mensagem de erro do compilador sugere que um dos TFields que vc está usando seja TIntegerField, mas se a estrutura da tabela for exatamente a que vc passou, não são...
Confira por favor, no FieldsEditor (duplo click na query) o tipo de cada TField
- QryMensalidadesJuros_Mora -> TFloatField
- QryMensalidadesDiasAtraso -> TFloatField
- QryMensalidadesAPagar -> TCurrencyField
- QryMensalidadesValor -> TCurrencyField
T+
Gostei + 0
21/09/2004
Pro-luck
- QryMensalidadesJuros_Mora -> TFloatField
- QryMensalidadesDiasAtraso -> TFloatField
- QryMensalidadesAPagar -> TCurrencyField
- QryMensalidadesValor -> TCurrencyField
Continua dando erro na compilação. Veja se existe algum erro no código que estou utilizando por favor.
---------------------------------------------------------------------------------
procedure TMensalidades_.BotaoCalcJurosClick(Sender: TObject);
Var
X, Y: Integer;
begin
X := dm_.QryMensalidadesDiasAtraso.Value;
Y := (1+dm_.QryMensalidadesJuros_mora.Value);
dm_.QryMensalidadesAPagar.Value := dm_.QryMensalidadesValor.Value*Power(Y,X);
end;
---------------------------------------------------------------------------------
Té +, e brigadão pela força.
Gostei + 0
21/09/2004
Vinicius2k
X e Y no seu código original eram REAL agora estão INTEGER, com esta definição de tipo, até para mim ocorre o erro, mas como REAL não ocorre... compila, executa e efetua o cálculo (apenas não sei lhe dizer se a fórmula é correta) normalmente...
Veja :
... var x, y: Real; begin x:= QryMensalidadesJuros_mora.Value + 1; y:= QryMensalidadesDiasAtraso.Value; QryMensalidadesAPagar.Value:= QryMensalidadesValor.Value * Power(x,y); end;
Eu criei uma tabela em Paradox, nos moldes do que vc informou, e fiz a operação, usando, inclusive, os mesmos nomes que vc...
Realmente, não sei lhe explicar o que pode estar ocorrendo...
T+
Gostei + 0
22/09/2004
Pro-luck
Resolvi o problema da seguinte forma: O mesmo código que eu estava utilizando dentro do form de Mensalidades
utilizei no evento OnCalcFields da Query em questão.
E lá compilava perfeitamente, só que mudei o campo APagar para um campo calculado e não físico como estava anteriormente.
E criei também uma espécie de gatilho, porque o cálculo funciona em tempo de execução, e dava erro constantemente
informando que a minha Query não estava em modo de edição nem de inserção, então fiz o seguinte:
Var
X, Y: Real;
begin
if (QryMensalidadesDiasAtraso.Value <= 0) then
begin
QryMensalidades.Active := True;
end
else
begin
X := (QryMensalidadesJuros_Mora.Value/100)+1;
Y := QryMensalidadesDiasAtraso.Value;
QryMensalidadesAPagar.Value := QryMensalidadesValor.Value*Power(X,Y);
end;
Muito obrigado pela força tuas dicas ajudaram muito e, se eu puder te ajudar de alguma forma, tô na área.
Té +.
Gostei + 0
22/09/2004
Vinicius2k
Não tenho certeza se lhe ajudei muito, mas o importante é que está resolvido...
T+
Gostei + 0
23/09/2004
Pro-luck
QryMensalidades.Active := True;
Por:
QryMensalidadesAPagar.Value := QryMensalidadesValor.Value;
Assim se não existe atraso, paga-se o valor normal.
Té + galera...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)