Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Ayuda, EDataBaseError (https://www.clubdelphi.com/foros/showthread.php?t=63005)

pablonill 26-01-2009 02:40:59

Ayuda, EDataBaseError
 
Hola, muchas gracias por tomarse tiempo y leer mi problema, paso a detallarles mi inconveniente.

Esto me sucede con los siguientes bases de datos, Sql Server, Interbase, Firebird (con estas probe)
y con los siguiente controles DBX, IBX, UniDac, IBDac

El tema es el siguiente, tengo una tabla como la siguiente:

ID integer unico requerido llave
Usuario varchar (20) requerido

La idea es la siguiente, tengo un formulario con controles db adware, con un datasource enlazado a una tabla o query que a su vez esta enlazado con la base de datos, tambien tengo dos botones, uno que se llama guardar y otro cancelar, en el boton guardar llamo al metodo post y en el cancelar al metodo cancel (este formulario es creado por otro y antes de crearlo llama al metodo append), lo que quiero es que si el usuario deja un campo en blanco o viola alguna de las restricciones impuestas en la creacion de la tabla mostrar un mensaje de error personalizado, perooooo, la unca excepcion que lanza delphi es EDataBaseError el cual no me sirve mucho porque no puedo sacar los error codes del motor de base de datos, el classname que me da el EDataBaseError es EDataBaseError o sea no me da referencia a ningun error del motor especifico, o sea que es una exepcion generica de la base de datos, probe diez mil formas y no se como hacer, es el problema de los controles db adware que lanzan la exepcion generica antes que se genere el error del motor de base de datos, tambien probe con try except y lo mismo me sigue saliendo el EDataBaseError, y ya me estoy volviendo loco porque mi ignorancia no me permite saber el porque y el como de la cuestion!, si alguien tiene algun ejemplo en concreto para que pueda estudiarlo o la solucion se lo voy a agradecer. Muchas gracias por leer mi extenso problema y espero poder solucionar y poder publicar el codigo de mis mensajes personalizados asi ahorrarle el dolor de cabeza a alguien. Muchas gracias. Antes que me olvide, utilizo delphi 2009.

P.D.

Tambien use los constrains de las tablas y tampoco capturan los errores.

luisgutierrezb 26-01-2009 14:18:59

a ver, te manda el error ANTES de del motor de la base de datos? si es asi, crea los campos persistentes y utiliza el evento onvalidate para validar los datos tu mismo

pborges36 26-01-2009 15:48:06

Hola pablonil. Para saber el error que te da uso lo siguiente:
Código Delphi [-]
try
  Query1.ExecSQL;
except
  on e : EDatabaseError do
    begin
         MessageDlg('mysql ha dicho: '+e.Message, mtWarning, [mbOK], 0);
     end;
end;

De todas formas podriamos ayudarte mas si pusieras un ejemplo de tu codigo.
Saludos.

pablonill 26-01-2009 16:50:18

Listo, solucionado.

El tema era el siguiente y lo saque por deduccion, lo cual no indica que sea lo correcto, el tema es que funciona.

Primero tomo la tabla, le voy al Fields Editor... una vez alli recupero todos los campos que la componen, a los campos que tengo les quito la propiedad Required y listo. Por lo visto al quitarles la propiedad Required evito que delphi sea el que me haga la validacion del campo y me de el EDataBaseError, cuando le quito el Required delphi envia el campo tal cual se lo ingresa y entonces el motor de base de datos es el que se encarga de devolver el error. Muchas gracias.


La franja horaria es GMT +2. Ahora son las 12:24:48.

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