PDA

Ver la Versión Completa : Problema con las Excepciones y OO


kueik
17-06-2004, 13:49:43
Estoy haciendo una aplicacion en 3 capas con Delphi. Por cada clase que me estoy creando en Delphi me creo tamien una clase Excepción para ella, PARA QUE OS ACLAREIS:

Unit DaoConnection:

Type EDaoConnection = Class ( Exception );
Type TDaoConnection = Class
.... atributos, metodos, properties...
end;

Unit GINRole

Type EGINRole = Class ( Exception );
type TGINRole = class
.... atributos, metodos, properties...
end;

Bien pues lo que me esta pasando es lo siguiente: kuando DaoConnection genera una excepción del tipo EDaoConnection ( EDaoConnection.Create(message) ), la Clase GINRole tiene esto:
try
.....
Except
on E: EDaoConnection do
raise EGINRole.Create('TGINRole: Error '+ E.Message);
end;

//Cuando se lanza una excepción DaoConnection, GINRole la controla i lanza una nueva suya (EGINRole) con el mensaje de la otra. PERO ES QUE ME PETA! da un error de memoria! por que? Alguien me puede ayudar?
HELP ME!

kueik
17-06-2004, 13:53:04
Es decir añado! ME DA UN ERROR DE MEMORIA PORQUE EN E NO HAY NADA!

Except
on E: EDaoConnection do
raise EGINRole.Create('TGINRole: Error '+ Exception(E).Message);
//En E.Message Peta porke? Pero en ejecución e? Peta en Ejecución!
end;

marto
17-06-2004, 13:59:03
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

Type EDaoConnection = Class ( Exception );
Type EGINRole = Class ( Exception );

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private

public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
try
raise EDaoConnection.Create('lalala');
Except
on E: EDaoConnection do
raise EGINRole.Create('TGINRole: Error '+ E.Message);
end;

end;

end.


A mi me funciona bien...

kueik
17-06-2004, 14:24:18
haver el control de la Excepción DaoConnection està dentro de la Classe GINRole.

Type EGINRole = Class ( Exception );
type
TGINRole = class
...
..
..
Procedure kaka();
begin
try
DaoConnection.InsertCliente(...); //Aqui se produce la excepción.
Except
on E: EDaoConnection do
raise EGINRole.Create('TGINRole: Error '+ E.Message);
end;

end;

end;

y en el Form:

try
Except
on E: EGINRole do
ShowMessage(E.Message);
end;

marto
18-06-2004, 14:05:34
Solo se me ocurre una cosa, la excepción que genera InsertaCliente no es del tipo EDAoConnection, por lo tanto no se está capturando... ¿Puede ser?
Haz una prueba, en lugar de

Procedure kaka();
begin
try
DaoConnection.InsertCliente(...); //Aqui se produce la excepción.
Except
on E: EDaoConnection do
raise EGINRole.Create('TGINRole: Error '+ E.Message);
end;
end;

haz:

Procedure kaka();
begin
try
DaoConnection.InsertCliente(...); //Aqui se produce la excepción.
Except
on E: EDaoConnection do
raise EGINRole.Create('TGINRole: Error '+ E.Message);
on E: Exception do
ShowMessage(E.ClassName);
end;
end;


Ah! y por favor pon tu código entre tags [delphi] ;)