Incompatibilidade nas variáveis
Olá pessoal,
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.
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
Curtidas 0
Respostas
Uildenei
17/09/2004
jah tentou usar DOUBLE ao inves de REAL?
veja os tipos de dados usados nos tipos de campos da tabela.
veja os tipos de dados usados nos tipos de campos da tabela.
GOSTEI 0
Pro-luck
17/09/2004
Que tipo de dados seriam melhores aplicados nesta situação.
E as variáveis do tipo Double são compatíveis com Integer?
Antecipadamente agradeço pelo auxílio prestado.
E as variáveis do tipo Double são compatíveis com Integer?
Antecipadamente agradeço pelo auxílio prestado.
GOSTEI 0
Pro-luck
17/09/2004
SOBE
GOSTEI 0
Vinicius2k
17/09/2004
Colega,
Por favor, relacione para nós os tipos dos TFields envolvidos neste cálculo. (TIntegerField, TFloatField, Etc)...
- QryMensalidadesJuros_mora
- QryMensalidadesDiasAtraso
- QryMensalidadesAPagar
- QryMensalidadesValor
T+
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
Pro-luck
17/09/2004
Não sei muito sobre os tipos de variáveis, como falei sou iniciante. Esforçado, mas iniciante. O que posso dizer é o seguinte:
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é +
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
Vinicius2k
17/09/2004
Colega,
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+
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
Pro-luck
17/09/2004
Os TFields combinam com o que vc me mandou:
- 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.
- 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
Vinicius2k
17/09/2004
Agora, tem um erro...
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 :
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+
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
Pro-luck
17/09/2004
Alô Vinícius,
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é +.
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
Vinicius2k
17/09/2004
Blz. :wink:
Não tenho certeza se lhe ajudei muito, mas o importante é que está resolvido...
T+
Não tenho certeza se lhe ajudei muito, mas o importante é que está resolvido...
T+
GOSTEI 0
Pro-luck
17/09/2004
Melhor ainda, troquei a seguinte linha:
QryMensalidades.Active := True;
Por:
QryMensalidadesAPagar.Value := QryMensalidadesValor.Value;
Assim se não existe atraso, paga-se o valor normal.
Té + galera...
QryMensalidades.Active := True;
Por:
QryMensalidadesAPagar.Value := QryMensalidadesValor.Value;
Assim se não existe atraso, paga-se o valor normal.
Té + galera...
GOSTEI 0