Raise Exception - Delphi XE3

12/02/2013

4

Olá estou tendo o seguinte Problema

Estou acompanhando a Vídeo Aula do Guinther Pauli, porém estou utilizando o Windows 8 e o Delphi XE3
E tem uma parte no vídeo que tem o seguinte comando:

procedure TDM_Cadastro.CDSAlunosDesc_AlunoValidate(Sender: TField);
begin
if CDSAlunosDesc_Aluno.AsCurrency >
CDSAlunosMensalidade_Aluno.AsCurrency then
raise Exception.Create('O valor do desconto não pode ser maior que a mensalidade');

E o que acontece, quando executo o programa e coloco por exemplo a mensalidade R$ 200,00 e o valor do desconto de R$ 250,00 não aparece a mensagem de alerta, conforme aparece no código.

O executável do Delphi já está para executar como administrador e em modo de compatibilidade com o Windows 7

Se alguém puder ajudar agradeço.
Responder

Posts

12/02/2013

David Sobral

O que percebi, se eu lançar o valor de R$ 200,00 como mencionei e o Desconto de R$ 200,24 o programa apresenta a mensagem
O valor do desconto não pode ser maior que a mensalidade, porém se o valor do desconto for acima de R$ 200,25 o programa não apresenta a mensagem.
O que pode estar ocorrendo?
Responder

13/02/2013

Joel Rodrigues

Tente depurar o código nesse ponto, verificar os valores dos dois campos e verificar o valor dessa expressão booleana utilizando CTRL+F7.
Responder

13/02/2013

David Sobral

Boa Tarde!!!

Joel

Depurei mas não encontrei o que você pediu.
Segue abaixo o código do datamodule.

unit UDM;

interface

uses
System.SysUtils, System.Classes, Data.DB, Datasnap.DBClient;

type
TDMCadastros = class(TDataModule)
CDSAlunos: TClientDataSet;
CDSAlunosMatri_Aluno: TAutoIncField;
CDSAlunosNome_Aluno: TStringField;
CDSAlunosSexo_Aluno: TStringField;
CDSAlunosEnd_Aluno: TStringField;
CDSAlunosCep_Aluno: TStringField;
CDSAlunosCidade_Aluno: TStringField;
CDSAlunosUF_Aluno: TStringField;
CDSAlunosEst_Civil_Aluno: TStringField;
CDSAlunosMensalidade_Aluno: TCurrencyField;
CDSAlunosDesc_Aluno: TCurrencyField;
CDSAlunosAtivo_Aluno: TBooleanField;
CDSAlunosCod_Curso_Aluno: TIntegerField;
CDSAlunosObs_Aluno: TBlobField;
CDSAlunosFoto_Aluno: TBlobField;
procedure CDSAlunosDesc_AlunoValidate(Sender: TField);
private
{ Private declarations }
public
{ Public declarations }
end;

var
DMCadastros: TDMCadastros;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

procedure TDMCadastros.CDSAlunosDesc_AlunoValidate(Sender: TField);
begin
if CDSAlunosDesc_Aluno.AsCurrency > CDSAlunosMensalidade_Aluno.AsCurrency then
raise Exception.Create('Valor do desconto não pode ser maior que a mensalidade');

end;

end.
Responder

13/02/2013

Joel Rodrigues

Você conseguiu avaliar os valores contidos nos dois campos nesse evento?
Responder

13/02/2013

David Sobral

Avaliei, pelo que vi está certo.
Responder

13/02/2013

Joel Rodrigues

Coloque um valor maior (250, por exemplo) e depure. Ao parar no breakpoint, seelcione toda a instrução que encontra-se dentro do IF e pressione CTRL+F7. Veja o que dá.
Responder

13/02/2013

David Sobral

Apareceu em result:
E2156 Expression too complicated

E quando clico em Inspect aparece:

Error inspecting ' if CDSAlunosDesc_Aluno.AsCurrency > CDSAlunosMensalidade_Aluno.AsCurrency then
raise Exception.Create('O valor do desconto não pode ser maior que a mensalidade');': expression error
Responder

13/02/2013

Marco Salles

Apareceu em result:
E2156 Expression too complicated

E quando clico em Inspect aparece:

Error inspecting ' if CDSAlunosDesc_Aluno.AsCurrency > CDSAlunosMensalidade_Aluno.AsCurrency then
raise Exception.Create('O valor do desconto não pode ser maior que a mensalidade');': expression error


Ueeee , mas acabou de aparecer o erro

Vc disse que


e o valor do desconto for acima de R$ 200,25 o programa não apresenta a mensagem.


mas a tela dedebug mostra o contrário

Vc esta com as opçoes para mostrar as exceções configuradas ??

Execute pelo Executável e veja se o erro é aporesentado nestas condiçoes

[]sds

Responder

13/02/2013

David Sobral

Pelo Executável não apresenta erro.
Muito estranho, não estou entendendo mais nada
Estou pensando em instalar uma máquina virtual com windows xp e windows 7 para testar.
O que sugere que eu faça?
Responder

16/02/2013

David Sobral

Instalei o Delphi 2007 Win 32 para testar e aparece o Seguinte:

Debugger Exception Notification
Project Project2.exe raised exception class Exception with message 'O valor do desconto não pode ser maior que a mensalidade'

Alguém poderia me auxiliar.


Responder

21/02/2013

David Sobral

Não consegui resolver o problema

Alguém poderia me ajuda?
Responder

21/02/2013

Lorival Filho

David,

Eu não gosto muito de usar dessa maneira (como falei é gosto) eu prefiro realizar todas as tratativas de informação de campo no botão Salvar (por exemplo) ou se trabalhar com DATASNAP no método de salvar.

Hoje na minha aplicação principal (Delphi XE3, MSSQL, dbExpress e DATASNAP ) eu faço as validações no método de salvar retornando a mensagem da validação para o client e mostro em um MessageBox customizado.

Abs
Responder

25/02/2013

David Sobral

Entendi o que você diz, o que não consigo entender é que na vídeo aula do Guinther Pauli dá certo e no meu projeto não, inclusive já refiz várias vezes e nada.
Responder

30/06/2013

José

Tópico concluído.
Responder