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 18-09-2004
Sinaloense Sinaloense is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 23
Sinaloense Va por buen camino
try
//codigo
except
on E: Exception do ErrorDialog(E.Message, E.HelpContext);
end;
Responder Con Cita
  #2  
Antiguo 01-02-2008
ozegarra ozegarra is offline
Miembro
 
Registrado: nov 2007
Ubicación: Lima - Peru
Posts: 35
Poder: 0
ozegarra Va por buen camino
Aprovecho este hilo para hacer una consulta sobre excepciones FireBird.

Yo genero mis excepciones en FireBird y las ejecuto segun alguna condicion en un Procedure(firebird tambien).

El tema es que yo quiero capturar ese mensaje de la excepcion por delphi. Estoy usando adoquery para ejecutar mis Procedures.

Si alguien pudiera asesorarme le agradeceria mucho ya que quiza para muchos es algo sencillo pero yo recien empiezo con el Delphi y sigo aprendiendo cosas nuevas.

Saludos
Oscar
Responder Con Cita
  #3  
Antiguo 03-02-2008
Avatar de PepeLolo
PepeLolo PepeLolo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Fuenlabrada - Madrid - Espagna
Posts: 265
Poder: 24
PepeLolo Va por buen camino
Talking

Hola,

El código indicado por "Sinaloense" es el que necesitas para controlar las excepciones de la BBDD.

un saludo
__________________
PepeLolo
El hombre el único virus que mide más de unas cuantas micras
Responder Con Cita
  #4  
Antiguo 15-02-2008
ozegarra ozegarra is offline
Miembro
 
Registrado: nov 2007
Ubicación: Lima - Peru
Posts: 35
Poder: 0
ozegarra Va por buen camino
uy, despues de tiempo. Estuve en otras y recien retomo el tema. Probe con la sentencia descrita pero sale un error que dice :
Código Delphi [-]
Undeclared identifier: 'ErrorDialog'

Nuevamente gracias por la atencion.

Oscar
Responder Con Cita
  #5  
Antiguo 16-02-2008
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 22
RolphyReyes Va por buen camino
Talking

Saludos.

Oscar, ErrorDialog es un nombre que le dio Sinaloense por decir un nombre a un metodo que llame un Showmessage o MessageDlg.

En cuanto a capturar la excepcion la gente de FibPlus tienen un tremendo componente para esto, es de pago vale la pena tener estos componentes.

Hasta luego.
__________________
Gracias,
Rolphy Reyes
Responder Con Cita
  #6  
Antiguo 17-02-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
No hace falta comprar nada.

Pon un ApplicationsEvents en tu ventana principal. En el evento OnException, puedes programar lo que quieras. Dentro del evento haz un showmessage de E.Message

Ahora en tus rutinas tienes 3 opciones mutuamente excluyentes:

1.- No poner bloques try..excepts, de forma que al ocurrir una excepción, ésta llegue al componente ApplicationsEvents.OnException en el que has programado lo que quieras hacer.

2.- Usar bloques try ... excepts, pero permitir que dicha excepción se lance de nuevo.

Típico caso, en la rutina haces un rollback de la transacción y después en el Application.OnException muestras el mensaje al usuario:
Código Delphi [-]
procedure mirutina;
begin 

  try 
     trans.StartTransaction;
      qryRestarStocks.ExecQuery; // suponemos que eso hace lanzar una excepción en la base de datos
     trans.Commit;
  except
  begin
     trans.Rollback; // anulamos los cambios hechos;
     raise; // re-lanzamos la misma excepción para que llegue al Application.OnException
  end;

3.- Usamos bloques try ... except, pero nos comemos la excepción. No llegará al Application.OnException. No se mostrará ningún mensaje al usuario.
Código Delphi [-]
procedure mirutina;
begin 

  try 
     trans.StartTransaction;
      qryRestarStocks.ExecQuery; // suponemos que eso hace lanzar una excepción en la base de datos
     trans.Commit;
  except
  begin
     trans.Rollback; // anulamos los cambios hechos;
     // raise; Aquí la gran diferencia.
  end;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 17-02-2008 a las 14:51:43.
Responder Con Cita
  #7  
Antiguo 26-02-2008
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Poder: 21
peccatum Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje

2.- Usar bloques try ... excepts, pero permitir que dicha excepción se lance de nuevo.
Hola,

Yo he elegido este método, el problema que tengo es que antes de mostrar el mensaje de la excepción al usuario la ejecución de mi programa se corta siendo necesario darle F9 devuelta para que recién ahí se muestre el mensaje y queden los objetos en el estado que yo quiero... ¿hay algúna forma de que esto no ocurra?

este es el código que produce la excepción:

Código Delphi [-]
try                 
                MDOTransaction1.StartTransaction;                 
                MDODataset1.QInsert.params.ByName('CANTI').AScurrency := 1;
                MDODataset1.QInsert.Params.ByName('NUMERO_CONTRATO').asInteger := Ncontrato;
                MDODataSet1.QInsert.Params.ByName('CATEGORIA').ASString :=   RXDBGrid1.Fields[1].AsString;
                MDODataSet1.Qinsert.Params.ByName('TARIFA').ASsTring := RXDBGrid1.Fields[0].AsString;
                MDODataSet1.QInsert.Params.ByName('PRECIO_UNITARIO').asCurrency := RXDBGRID1.Fields[4].ASCurrency;
                MDOQuery1.Close;
                IF stt[1] = 'K'  THEN                 MDOQuery1.SQL.Strings[14] := 'and tarifas.tipo <> '+ quotedStr('KM');
                if stt[1] = 'C' then                 MDOQuery1.SQL.Strings[15] := 'and tarifas.tipo <> '+ quotedStr('Combustible');
                MDOdataset1.QInsert.ExecQuery;
                MDOdataset1.open;
                MDOquery1.open;
               except                   
                        MDOTransaction1.Rollback;                   
                        MDOdataset1.Open;                                   
                        MDOquery1.Open;                    
                        raise;
               end;

'MDOdataset1.QInsert.ExecQuery ' es la linea que produce la excepción, como dije antes se corta la ejecución y me da un mensaje de el componente y me disgusta que eso ocurra quiero que solo se notifique el mensaje de error al usuario....


Gracias
Responder Con Cita
  #8  
Antiguo 17-02-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Cita:
Empezado por RolphyReyes Ver Mensaje
Saludos.

Oscar, ErrorDialog es un nombre que le dio Sinaloense por decir un nombre a un metodo que llame un Showmessage o MessageDlg.
Pues yo creo que no, ese dialogo existe en Delphi y si no me equivoco tienes que añadir un "uses" determinado. Busca en la ayuda.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 17-02-2008
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 22
RolphyReyes Va por buen camino
Exclamation

Saludos.

Lepe en mi ayuda no existe ningun topico sobre ese metodo, pero si en la tuya existe entonces favor de poner la explicación.

Gracias.
__________________
Gracias,
Rolphy Reyes
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


La franja horaria es GMT +2. Ahora son las 16:00:39.


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