Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-12-2015
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
Angel.Matilla Va por buen camino
Cita:
Empezado por dec Ver Mensaje
Hola,

¿Has probado con el método "getMessage" de la excepción, o sea E->getMessage()?
He probado con E->getMessage() y con ErrorIB->getMessage(), y en ambos casos me indica el compilador que no existe el método. Siento ser tan paliza, pero es que por más que he buscado documentación no he visto cómo usar esas excepciones definidas; no lo entiendo.

Última edición por Angel.Matilla fecha: 22-12-2015 a las 17:41:49.
Responder Con Cita
  #2  
Antiguo 22-12-2015
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
Angel.Matilla Va por buen camino
A ver. El único mensaje al que puedo acceder es E->Message y su valor es, en este caso:
Cita:
violation of PRIMARY or UNIQUE KEY constraint \"UQ_CONEXION\" on table \"CONEXION\"\r Problematic key value is (\"NOMBRE\" = 'FEDERICO
No aparece por ningún lado lo que he definido en la excepción.
Responder Con Cita
  #3  
Antiguo 22-12-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Angel.Matilla
Cita:
Empezado por Angel.Matilla Ver Mensaje
A ver. El único mensaje al que puedo acceder es E->Message y su valor es, en este caso:
No aparece por ningún lado lo que he definido en la excepción.
No tengo en claro el objetivo que buscas, pero también podes acceder a la propiedad Message de la clase EIBInterBaseError:
Código PHP:
void __fastcall TUnForm::UnManejador(TObjectSenderExceptionE)
{
  if (
E->ClassNameIs("EIBInterBaseError")) {
    
EIBInterBaseError *eib static_cast <EIBInterBaseError*> (E);  
    
ShowMessage(eib->Message);  
    
    
/*  O si lo preferis, de este modo: 
    String msg = (static_cast<EIBInterBaseError*>(E))->Message; 
    ShowMessage(msg);
    
    O simplemente: ShowMessage(static_cast<EIBInterBaseError*>(E)->Message); 
    */ 
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 22-12-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno, yo tengo que decir que metí la pata... puesto que creí que tratábamos de PHP y no de C++... por eso no existe el método "getMessage" en el objeto/excepción, pero dicho método existe en PHP. Siento haberte hecho perder el tiempo. Prueba la solución del compañero Daniel a ver si hay suerte.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 22-12-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por dec Ver Mensaje
Hola,

Bueno, yo tengo que decir que metí la pata... puesto que creí que tratábamos de PHP y no de C++...
No es nada extraño David ya que se usan las mismas etiquetas para el código. (A mi me ha pasado varias veces pero al revés )

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 22-12-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
No es nada extraño David ya que se usan las mismas etiquetas para el código. (A mi me ha pasado varias veces pero al revés )

Saludos
Pues es verdad que se usan las mismas etiquetas... aunque yo ni me fijé en ese detalle. El código me pareció PHP tal cual, vamos.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 23-12-2015
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
Angel.Matilla Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
No tengo en claro el objetivo que buscas, pero también podes acceder a la propiedad Message de la clase EIBInterBaseError:
¡Hombre! Me parece bastante evidente: Si defino un mensaje para uan excepción lo lógico es emplearlo y mostrar al usuario la información lo más precisa posible. A un usuario de una aplicación, que no tiene por qué saber de programación, el mensaje genérico «violation of PRIMARY or UNIQUE KEY constraint \"UQ_CONEXION\" on table \"CONEXION\"\r Problematic key value is (\"NOMBRE\" = 'FEDERICO'» no le dice nada, pero si le informo que «'Este usuario está activo en otro terminal'» se preocupará de buscar la razón.
Responder Con Cita
  #8  
Antiguo 23-12-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Trata de averiguar si cuando hacemos esto:

Código:
CREATE EXCEPTION USUARIO_CONECTADO 'Este usuario está activo en otro terminal'
... estamos dando un texto, una descripción a la excepción, o, si simplemente se trata de un comentario en el código. Si fuese el primer caso, para mí lo intuitivo sería acceder al texto usando el método "getMessage", "Message" o el que sea que exista en C++ para acceder al mensaje de las excepciones. Si fuese el segundo caso, igual no contamos con nada más que el tipo de excepción y el texto o mensaje hemos de ponerlo nosotros mismos en el programa, a partir del tipo de excepción.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 23-12-2015
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is online now
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.679
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por dec Ver Mensaje
Hola,
Trata de averiguar si cuando hacemos esto:
Código:
CREATE EXCEPTION USUARIO_CONECTADO 'Este usuario está activo en otro terminal'
... estamos dando un texto, una descripción a la excepción, o, si simplemente se trata de un comentario en el código. Si fuese el primer caso, para mí lo intuitivo sería acceder al texto usando el método "getMessage", "Message" o el que sea que exista en C++ para acceder al mensaje de las excepciones. Si fuese el segundo caso, igual no contamos con nada más que el tipo de excepción y el texto o mensaje hemos de ponerlo nosotros mismos en el programa, a partir del tipo de excepción.
Ese mensaje; "Este usuario está activo en otro terminal." es el mensaje que le saldrá al usuario cuando se produzca la excepción.
No hay que hacer nada más.
Responder Con Cita
  #10  
Antiguo 23-12-2015
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
Angel.Matilla Va por buen camino
Cita:
Empezado por dec Ver Mensaje
... estamos dando un texto, una descripción a la excepción, o, si simplemente se trata de un comentario en el código. Si fuese el primer caso, para mí lo intuitivo sería acceder al texto usando el método "getMessage", "Message" o el que sea que exista en C++ para acceder al mensaje de las excepciones. Si fuese el segundo caso, igual no contamos con nada más que el tipo de excepción y el texto o mensaje hemos de ponerlo nosotros mismos en el programa, a partir del tipo de excepción.
Gracias por contestar.Yo entiendo que estamos dando un texto; si consulto la base de datos con SQL Manager veo esto:



Así yo entiendo que he creado una excepción y su mensjae asociado. En otro hilo de este mismo subforo encontré una respuesta; es para Delphi y en principio debería ser fácil de adaptar a Builder. Pero me dejó perplejo parte del código que hay:
Código:
uses IB;
...
try
   ...
   insertquery.ExecSQL;
except on E:Exception do
   case EIBInterBaseError(E).IBErrorCode of
   $14000019: ShowMessage('Deadlock');
   $14000888:// se produjo la excepcion ERR_NO_TITULO
        ShowMessage('El título no puede estar vacio');
end;
Esos valores 14000019 y 14000888 he estado buscándolos en el listado de errores de FB y no existen por lo que no sé como tratarlos.

En otros hilos he visto que hay la posibilidad de modificar los mensajes genéricos de FB, pero entonces no sé para que valen esos mensajes de excepción que se puede definir en la base de datos.
Responder Con Cita
  #11  
Antiguo 24-12-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por Angel.Matilla Ver Mensaje
¡Hombre! Me parece bastante evidente:
...
Te aseguro que no lo era tanto para mí...

Es decir que queres traducir los mensajes de error, a otra forma que consideras que tus usuarios entenderán mejor.
Bueno, para eso no veo otra opción que hacerlo manualmente evaluando todos los GDSCODE, me refiero a algo similar a este ejemplo:
Código PHP:
  if (E->ClassNameIs("EIBInterBaseError")) {
    
String Msg;
    
int gdsc = (static_cast<EIBInterBaseError*>(E))->IBErrorCode;
    switch (
gdsc) {
      ...
      case 
335544578Msg "Columna desconocida."; break;
      case 
335544579Msg "Error interno."; break;
      ...
    }
    
ShowMessage(Msg); 
Cita:
Empezado por Angel.Matilla Ver Mensaje
...encontré una respuesta; es para Delphi y en principio debería ser fácil de adaptar a Builder. Pero me dejó perplejo parte del código que hay:
Código:
uses IB;
...
try
   ...
   insertquery.ExecSQL;
except on E:Exception do
   case EIBInterBaseError(E).IBErrorCode of
   $14000019: ShowMessage('Deadlock');
   $14000888:// se produjo la excepcion ERR_NO_TITULO
        ShowMessage('El título no puede estar vacio');
end;
Esos valores 14000019 y 14000888 he estado buscándolos en el listado de errores de FB y no existen por lo que no sé como tratarlos.
$14000019(Delphi) = 0x14000019(C++) = 335544345(decimal)
Código:
SQLCODE | GDSCODE   |    SYMBOL       TEXT
--------+-----------+---------------+------------------------------------- 
-901    | 335544345 | lock_conflict | Lock conflict on no wait transaction
$14000888 = 0x14000888 = 335546504 (no existe como código de error en Firebird)

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 24-12-2015 a las 03:13:21. Razón: sintáxis
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Duda Sobre Excepciones - Propagar Excepciones entre los formularios Neeruu Varios 2 26-02-2010 20:36:50
Gestionar contraseñas ?????????? david_uh Varios 11 04-01-2008 18:46:17
Como gestionar un proyecto Aprendiendo Varios 1 30-06-2007 00:28:14
Gestionar excepciones Angel.Matilla C++ Builder 0 29-01-2007 13:41:54
Gestionar Base de Datos tarco35 Conexión con bases de datos 1 22-11-2003 15:55:33


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


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