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 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
  #2  
Antiguo 26-02-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Lanza tu ejecutable desde el Explorador de windows, no verás ese aviso .

PD: Si quieres puedes deshabilitar ese mensaje de Delphi, en Tools -> Debugger Options -> "Stop on Exception" (o algo así se llama ).

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 26-02-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 26
maeyanes Va por buen camino
Hola...

Lo que te sucede solo es cuando estás ejecutando la aplicación desde el debugger...

Trata ejecutando tu aplicación desde afuera y verás que trabaja como debe ser...



Saludos...
Responder Con Cita
  #4  
Antiguo 12-03-2008
Avatar de peccatum
peccatum peccatum is offline
Miembro
 
Registrado: oct 2005
Posts: 89
Poder: 21
peccatum Va por buen camino
Gracias Lepe y maeyanes ya configuré el debugger para que no moleste en las pruebas.

Tengo otra inquietud y necesito opiniones al respecto, el escenario es masomenos el siguiente:

Un form1 en el cual dispongo de una rejilla, barra de navegación, campos de búsqueda y los elementos no visuales necesarios (Dataset para consulta y actualizaciones, Datasources, Etcétera).

Programé para lograr que cuando el usuario apreta el botón de la barra navegadora para realizar una inserción (+) se abra ótro form2 en donde aparecen todos los campos de edicion y botones para que el usuario cargue datos para luego darle al botón 'aceptar' con lo cual se intenta guardar lo ingresado. Los campos en el form2 apúntan al dataset en el form1. En el botón 'Aceptar' es que tengo una estructúra del tipo try...except, en donde intento realizar el post del dataset en el form1. El problema aparece cuando ocurre una excepción al intentar guardar los datos: se muestra el mensaje de la excepción e inmediatamente se cierra el form 2 dejando el form 1 'on top'. El comportamiento que yo quiero es que al ocurrir una excepción se muestre el mensaje del error pero que no se cierre el formulario y el usuario pueda seguir trabajando con los datos que había intentado guardar...

Se entiende? qué sería lo más recomendable en esta situación?

de antemano muchas gracias!

Saludos...
Responder Con Cita
  #5  
Antiguo 31-08-2010
Dens Dens is offline
Miembro
 
Registrado: ago 2010
Posts: 20
Poder: 0
Dens Va por buen camino
Amigos disculpenme la ignorancia pero es que no veo por ningun lado applicationevents , suponiendo que es un componente.
Responder Con Cita
  #6  
Antiguo 31-08-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
Caral Va por buen camino
Hola
Cita:
Empezado por Dens Ver Mensaje
Amigos disculpenme la ignorancia pero es que no veo por ningun lado applicationevents , suponiendo que es un componente.
Efectivamente; Es un componente que esta en la paleta additional.
Saludos
PD: Ignorante es el que no pregunta, no el que busca la respuesta.
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 01-09-2010
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 23
rastafarey Va por buen camino
resp

capturala dentro de un cuerpo try except

y dependiendo del tipo de exceion enviar el mensaje con la caja de dialogo que mejor te parezaca

Código Delphi [-]
try
  //codigo ...
except
  on e: exception do begin
    if E Is tipoexceptionfirebirddependiendodelcomponenente then
       shomessage('mensaje')
    else 
       showmessage(e.message);
  end;
end

Espero te sirva.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
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 19:04:23.


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