Delphi - Duvidas

Delphi

06/08/2019

Boa tarde pessoal
Uma dúvida, no seguinte código

try
try
FDConnection.Connected := False; // fecha a conexão
FDConnection.Params.Values[''''Database''''] := GetCurrentDir + ''''\\\\\\\\BANCO.FDB''''; // recebe o caminho do banco no diretório do .Exe
FDConnection.Connected := True; // abre a conexão
except
raise Exception.Create(''''Não foi possível Conectar ao Banco de Dados!''''); // Cria mensagem de erro de conexão
if not Assigned(FrmConfiguracao) then // testa se o objeto já está em memória
FrmConfiguracao := TFrmConfiguracao.Create(Self); // caso nao esteja, ele cria
FrmConfiguracao.ShowModal;
end;
finally
FreeAndNil(FrmConfiguracao); // libera o objeto da memória
end;

Explicação...

Ao utilizar esse comando ->> raise Exception.Create(''''Não foi possível Conectar ao Banco de Dados!'''');

ele não executa o próximo, que seria esse...

if not Assigned(FrmConfiguracao) then // testa se o objeto já está em memória
FrmConfiguracao := TFrmConfiguracao.Create(Self); // caso nao esteja, ele cria
FrmConfiguracao.ShowModal;

portanto, se no lugar do raise Exception eu utilizar, Application.Messagebox(....);
ele executa o próximo código normal...

Alguem sabe me explicar, por que isso ocorre?
Jefferson Quinelatto

Jefferson Quinelatto

Curtidas 0

Respostas

Douglas Wordell

Douglas Wordell

06/08/2019

Você criou um bloco try except, o que está dentro do try será executado, caso ocorra uma exceção o código da linha seguinte não será executado e será encaminhado para o que está dentro do except. Dentro do except vai ocorrer o mesmo, o código será executável e caso ocorra uma exceção o código da linha seguinte não será executado, mas como não tem um except depois vai para o próximo lugar que trate alguma exceção (ou nenhuma).
Quando você executa raise Exception.Create('') você está gerando uma exceção (dentro do seu tratamento de exceção) e o que tem depois não será executado mesmo, a menos que você colocasse outro bloco try. Mas penso que se o objetivo é apenas notificar o usuário não precisa lançar uma nova exceção.
GOSTEI 0
Jefferson Quinelatto

Jefferson Quinelatto

06/08/2019

Você criou um bloco try except, o que está dentro do try será executado, caso ocorra uma exceção o código da linha seguinte não será executado e será encaminhado para o que está dentro do except. Dentro do except vai ocorrer o mesmo, o código será executável e caso ocorra uma exceção o código da linha seguinte não será executado, mas como não tem um except depois vai para o próximo lugar que trate alguma exceção (ou nenhuma).
Quando você executa raise Exception.Create('') você está gerando uma exceção (dentro do seu tratamento de exceção) e o que tem depois não será executado mesmo, a menos que você colocasse outro bloco try. Mas penso que se o objetivo é apenas notificar o usuário não precisa lançar uma nova exceção.
GOSTEI 0
Jefferson Quinelatto

Jefferson Quinelatto

06/08/2019

Boa noite, consegui compreender, fiz algumas alterações...
O que precisava era que após a mensagem para o usuário, abrisse a tela de configuração do arquivo manipulado para conexão.
Coloquei dentro do OnShow do meu form.

if FdConnection.Connected = False then
begin
if not Assigned(FrmConfiguracao) then
FrmConfiguracao := TFrmConfiguracao.Create(Self);
try
FrmConfiguracao.ShowModal;
finally
FreeAndNil(FrmConfiguracao);
end;

Será que poderia utilizar dessa forma mesmo?
GOSTEI 0
Douglas Wordell

Douglas Wordell

06/08/2019

Poderia, talvez poderia até achar interessante no método OnCreate também, que ocorre apenas 1 vez no Form.
GOSTEI 0
POSTAR