Raise Exception - Delphi XE3
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.
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.
David Sobral
Curtidas 0
Respostas
David Sobral
12/02/2013
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?
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?
GOSTEI 0
Joel Rodrigues
12/02/2013
Tente depurar o código nesse ponto, verificar os valores dos dois campos e verificar o valor dessa expressão booleana utilizando CTRL+F7.
GOSTEI 0
David Sobral
12/02/2013
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.
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.
GOSTEI 0
Joel Rodrigues
12/02/2013
Você conseguiu avaliar os valores contidos nos dois campos nesse evento?
GOSTEI 0
David Sobral
12/02/2013
Avaliei, pelo que vi está certo.
GOSTEI 0
Joel Rodrigues
12/02/2013
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á.
GOSTEI 0
David Sobral
12/02/2013
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
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
GOSTEI 0
Marco Salles
12/02/2013
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
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
GOSTEI 0
David Sobral
12/02/2013
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?
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?
GOSTEI 0
David Sobral
12/02/2013
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.
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.
GOSTEI 0
David Sobral
12/02/2013
Não consegui resolver o problema
Alguém poderia me ajuda?
Alguém poderia me ajuda?
GOSTEI 0
Lorival Filho
12/02/2013
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
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
GOSTEI 0
David Sobral
12/02/2013
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.
GOSTEI 0
José
12/02/2013
Tópico concluído.
GOSTEI 0