Array
(
)

Delphi 2006 ASP.Net

Mfsdiv
   - 24 out 2006

Caros colegas de lista. Sou novato na lista. Trabalho com desenvolvimento em Delphi
Win32 já algum tempo e estamos nos aperfeiçoando em ASP.Net com Delphi. E dentro desta
idéia estamos criando alguns padrões para este novo ambiente.

Neste raciocinio utilizamos a materia do sr. Isaque Pinheiro publicada no nro 67 ( página 21 )
da Clube Delphi como modelo para criação de classes para as tabelas de um projeto teste, logicamente
fazendo as adaptações necessárias ao ambiente Asp.net. Acontece que estamos com
problema da seguinte ordem : No metodo delete de uma classe ( utilizado para executar
o delete de uma linha na tabela ) criamos uma regra que evita que se delete o codigo = 1 da
tabela e se esta situação for encontrada o metodo cria um exceção na classe e aborta
o delete.

No WebForm onde chamamos o metodo nós criamos a classe, chamamos o método e logo
em seguida destruimos a classe ( para limpar os objetos de memoria ) neste momento
a exceção gerada pelo delete se perde e não mais se propaga passando a dar o segte erro
Object reference not set to an instance of an object.

A conclusão que eu cheguei é que pelo fato da exception ter sido criada pela classe
e logo após ter destruido a classe o ambiente se perde e não sabe o que fazer com
a execption gerada.

Porque estou criando a classe, deletando a linha e destruindo a classe ?
Faço isto para manter a regra que em ASP .Net deve tentar manter a conexão de banco
aberta o minimo de tempo aberta possível. ( já visto em outras materias da revista )

Se puderem me dar uma dica do que esta acontecendo agradeceria muito.


Para documentar estou enviando
------------------------------

Método delete da classe
***********************

procedure TEscola.Delete(W_Codigo: String);
begin;

if Convert.ToInt32(W_Codigo) = 1 then
begin
raise EErroClasse.Create(´#Atencao-Impossível excluir escola = 1´);
end;

try
try
begin
if not Assigned(W_Context.Session[´WS_ConnStringDBA´]) then
begin
raise EErroClasse.Create(´Atencao-Escola_OOP - Falta String de Conexão´);
end;
StringConexaoDBA := W_Context.Session[´WS_ConnStringDBA´].ToString;
StringConexaoUSU := W_Context.Session[´WS_ConnStringUSU´].ToString;
AbreConexao;
// Carrega Parametros
W_Params[1].TR_ParamNome := ´@ESC_CD´;
W_Params[1].TR_ParamTipo := ´01´;
W_Params[1].TR_ParamValor := W_Codigo;
W_SQL := (´DELETE FROM Escola WHERE ESC_CDX = @ESC_CD´);
ExecSQL(W_SQL, W_Params, 1);
end;
finally
begin
FechaConexao;
end;
end;
except
raise EErroClasse.Create(´Atencao-Erro na deleção de aluno´);
end;

end;

Chamda ao Método delete da classe
*********************************

procedure TWebForm1.ButtonExcluir_Click(sender: System.Object; e: System.EventArgs);
begin
try
try
begin
WC_Escola := TEscola.Create;
WC_Escola.Delete(TextBoxCd.Text);
end;
finally
WC_Escola.Destroy; ********* Se esta linha for mantida da o erro
********* Object reference not set to an
********* instance of an object, e a exception gerada
********* no metodo delete da classe se perde.

end
except
on E: EErroClasse do
begin
TJavaScriptDirector.AddStartupShowMessage(Self, Copy(E.Message,9,50));
else
begin
raise Exception.Create(´Exceção não esperada´);
end;
end;

Response.Redirect(´SCH020140.aspx´);

end;