Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Manejo de Excepciones Intraweb (https://www.clubdelphi.com/foros/showthread.php?t=34493)

Capo 11-08-2006 01:48:46

Manejo de Excepciones Intraweb
 
Buenas noches. Saludos desde Colombia.
De antemano gracias por la ayuda que puedan brindarme :):
Intraweb 7.2.41 + Delphi 7 + [ADO] MSSQL.

Respetados amigos, en mi aplicacion de escritorio con delphi uso una "rutina" para cachear errores de base de datos [ADO], esa misma "rutina" la he adaptado a mi nueva WebApplication con Intraweb, pero tengo un error que no entiendo como poderlo corregir [[Error] UserSessionUnit.pas(133): Incompatible types: 'Parameter lists differ'], o talvez estoy errado en la forma de cachear los errores de mi base de datos.

En mi IWUsersession tengo una funcion llamada: MostrarMensaje y arribita declaro las constantes de errores ADO:

Código Delphi [-]
var
  IWUserSession: TIWUserSession;
const
  {Declare constants we're interested in}
  eKeyViol = -2147217873;
  eCRFalta = -2147467259;
  eConvert = 1240520;
  eForeignKey = 9733;
  eDetailsExist = 9734;
  eReglaMask = 1242448;
  eIntegridad = -2147217900;
implementation
uses ServerController;
{$R *.dfm}

Function MostrarMensaje(AException : Exception): Boolean;
Var iADOError: Integer;
begin
iADOError := 0;
if (AException is EDataBaseError) then
  iADOError := IWUserSession.ADOConn.Errors.Item[0].Number;
  case iADOError of
    eCRFalta:
    begin
      WebApplication.ShowMessage('Campo Requerido en la Base de Datos', smAlert);
    end;
    eKeyViol:
    begin
      WebApplication.ShowMessage('Violacion de restriccion en la Base de datos, Favor Verifica Datos', smAlert);
    end;
    eConvert:
    begin
      WebApplication.ShowMessage('Error de conversion de datos, Favor Verificar Datos', smAlert);
    end;
    eReglaMask:
    begin
      WebApplication.ShowMessage('Error Ingreso de datos, Favor Verificar Datos', smAlert);
    end;
    eIntegridad:
    begin
      WebApplication.ShowMessage('Error Integridad de Base de Datos, Favor Verificar Datos',smAlert);
    end;
  else
    WebApplication.ShowMessage(Pchar('Error de Base de datos.           '+#13+'#Error: '+IntToStr(iADOError)+#13+'Clase:'+AException.ClassName), smAlert);
  end;
end;

Luego tengo un procedure llamado Excepciones, el cual llama la funcion MostrarMensaje y manda la excepcion.

Código Delphi [-]
Procedure TIWUserSession.Excepciones(AApplication: TIWApplication; AException: Exception);
Begin
  If Not MostrarMensaje(AException) Then
    WebApplication.ShowMessage('Error de Base datos', smAlert);
End;

Al final en el evento Create de mi IWUserSession, escribo lo siguiente para la cacheada de los errores:

Código Delphi [-]
IWServerController.OnException := Excepciones;

Pero el error al intentar ejecutarlo es: [[Error] UserSessionUnit.pas(133): Incompatible types: 'Parameter lists differ'].

Como cito arriba en mi Applicacion de escritorio funciona bien, aunque el unico cambio que realice para adaptarlo a Intraweb fue en los parametros de la propiedad OnException.

Para Intraweb
Código Delphi [-]
 Procedure Excepciones(AApplication: TIWApplication; AException: Exception);

y asi se debe crear para Escritorio
Código Delphi [-]
Procedure Excepciones(Sender: TObject; E: Exception);

Agradezco cualquier norte ke me puedan brindar. saludos. Dabeto

geovany 11-08-2006 02:00:07

Hola
 
Primero que nada tu código se ve bastante interesante. Bueno pasando a lo siguiente.

El error es simplemente que no es mimo tipo el que te pide y el que le estan dando. Otra cosa que no me convence y no creo que eso te marque error es la asignacion del evento del servercontroller onexeption ese lo estan reasignando a una sesion diferente cada vez que un usuario se conecta y tercero no se si el mandar mensajes directamente del usersession este bien.

saludos

Capo 11-08-2006 14:46:29

Muy buenos dias. Geovany gracias por tu respuesta.
Es una adaptacion de mi codigo para aplicacion de escritorio, pero soy nuevo con Intraweb, y no se que tan contraproducente puede ser el envio de mensajes desde mi IWUsersession??.

Alguna recomendacion para manejar excepciones en Intraweb??

Saludos.

geovany 11-08-2006 17:39:56

Try catch
 
Las excepciones las puedes cachar en la forma donde estas utilizando el acceso a datos con un try y catch y puedes obtener de que tipo es la excepcion y ahi hacer lo que tengas que hacer

saludos

Capo 11-08-2006 20:48:08

Gracias Geovany.
Cuando te refieres a Acceso a Datos entiendo que utilice [Try...Except..End] al grabar los datos en mis tablas??, eso ya lo toy haciendo y anda bien, solo ke me gustaria centralizar el manejo de errores, pero gracias por tus buenas observaciones como siempre.

Saludos.


La franja horaria es GMT +2. Ahora son las 14:51:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi