Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-11-2005
clanmilano clanmilano is offline
Miembro
 
Registrado: ene 2005
Ubicación: Parana - Entre Rios - Argentina
Posts: 58
Poder: 20
clanmilano Va por buen camino
Question Capturar Excepciones

Hola, quisiera saber como generar yo mensaje de error en caso de que el usuario no complete todos los campos declarados como NO nulos del lado de la base de datos, al hacer un insert o update. Lo estoy haciendo en el evento beforepost del clientdataset de la tabla en particular, pero lo que no me termina de convencer es que el mensaje aparece dos veces al producirse la excepción. El código que coloco en ese evento es el siguiente:

if cdsClientes.FieldByName('DESCRIPCION').IsNull then
DatabaseError('Complete los campos marcados como obligatorios!!');

Suponiendo que el único campo que no puede tomar valor nulo es DESCRIPCION de la tabla CLIENTES.

¿Es correcto hacerlo asi?
¿Saben si se puede hacer de alguna otra forma?

Muchas gracias!

Muchas gracias!!
Responder Con Cita
  #2  
Antiguo 05-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
hazlos todos de una sola vez:

Código Delphi [-]
procedure ...BeforePost(....)
var Msg:string;
begin
Msg := EmptyStr;

if campo1.IsNull then
  Msg:= msg + #10#13+ 'campo1';

if campo2.IsNull then
  Msg:= msg + #10#13+ 'campo2';

if Msg <> EmptyStr then
begin
 Msg := ' Los siguientes campos no pueden estar vacios:'+#10#13+ Msg;
 Databaseerror(msg);
end;
Tambien puedes hacerlo más eficiente con un bucle sobre Tfields, viendo si tiene la propiedad Required y despues comprobando si es nulo

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 05-11-2005
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
Porque no lo haces en el evento "OnValidate" del dataset, se supone que para eso es.
Saludos!
Responder Con Cita
  #4  
Antiguo 27-10-2015
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Hola amigos, retomando el tema...

resulta que tengo una db firebird 2.5.4, en la que declaro unas excepciones; una de ellas es 'no_borrar'
Código Delphi [-]
with qEjecutar do
  begin
    Close;
    SQL.Clear;
    SQL.Add(CadenaSQL);
    // ShowMessage(CadenaSQL);
    try
      ExecSQL;
      Result := True;
      Transaccion.CommitRetaining;
      if notificado then
        MsgBox(Titulo, 'Registro actualizado satisfactoriamente...',
          mtInformation, ['Aceptar'], 0);
    except
      on E: exception do
             MsgBox(Titulo, 'Clase de error: ' + E.ClassName + chr(13) + chr(13) +
            'Mensaje del error: ' + E.Message, mtError, ['Aceptar'], 0);
      end;
  end;

en el código no sé cómo capturar la excepción de tal manera que sólo me aparezca el texto de la excepción sin que me diga el resto de cosas, ej.
nombre de la excepción, trigger en el cual se ha lanzado, ubicación de la línea de código...
yo sólo quiero la descripción del error "No puedes eliminar el registro porque..."

De antemano gracias por vuestra ayuda

Gustavo Cruz
Responder Con Cita
  #5  
Antiguo 27-10-2015
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por GustavoCruz Ver Mensaje
en el código no sé cómo capturar la excepción de tal manera que sólo me aparezca el texto de la excepción sin que me diga el resto de cosas, ej.
nombre de la excepción, trigger en el cual se ha lanzado, ubicación de la línea de código...
yo sólo quiero la descripción del error "No puedes eliminar el registro porque..."
Si te pone esa información es porque le dices que la ponga. La clase Exception tiene unas cuantas propiedades, la principal de ellas es "Message", que es la que contiene el mensaje de error. El resto de propiedades tienen información adicional, que a veces no es necesaria o deseable.

También has de notar que no es obligatorio usar el objeto lanzado. Incluso puedes hacer:
Código Delphi [-]
  TRY
    RAISE Exception.Create ('Esta es una excepción lanzada por mi.')
  EXCEPT
    Application.MessageBox ('Hubo una excepción', 'Ignorante')
  END;
Ese código mostrará el mensaje "[Ignorante] Hubo una excepción" independientemente de lo que haya en el objeto de excepción. De todas formas, no es recomendable. Mejor usar correctamente las excepciones:

Código Delphi [-]
  TRY
    ... { Código aquí... }
    IF IntentoBorrarYNoDebe THEN
      RAISE Exception.Create ('¡No puede eliminar eso!');
    ... { Código allá... }
  EXCEPT
    ON Error: Exception DO Application.MessageBox (Error.Message, 'Error')
  END;
Así mostrará el mensaje de error, y únicamente el mensaje de error.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #6  
Antiguo 27-10-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Tal y como comenta Ñuño, usa excepciones, y usalas sabiamente. No solo porque muestran un mensaje de error, sino porque ademas cortan la ejecucion del codigo
Responder Con Cita
  #7  
Antiguo 27-10-2015
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Hola Ñuño, gracias por tu respuesta lo que no quiero es lo que aparece en la imagen que te adjunto.
Yo solo quiero es "Error al intentar borrar un registro protegido por el sistema"

Gracias por vuestro tiempo


Gustavo Cruz
Imágenes Adjuntas
Tipo de Archivo: png Excepcion.png (21,5 KB, 28 visitas)

Última edición por GustavoCruz fecha: 27-10-2015 a las 18:26:50. Razón: Completar mensaje
Responder Con Cita
Respuesta



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 08:51:53.


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
Copyright 1996-2007 Club Delphi