PDA

Ver la Versión Completa : Quiero capturar mensajes de error de Access y personalizarlos en Delphi


bigpeter80
04-12-2008, 21:17:26
Hola amigos del Club, de nuevo yo con un nuevo problema... Estuve buscando en los foros pero no encontre nada o simplemente se me paso....
Bueno, tengo una base de datos Access, utilizo una conexión Jet4 y lo que necesito hacer ahora, es, al momento de comprobar los datos que estoy guardando, si por ejemplo, no se ha ingresado un campo requerido, quiero capturar el mensaje de error de la base de datos y personalizar el mensaje de error.

Hasta ahora, con la ayuda de los foros del club he conseguido capturar el mensaje de error en Delphi asi:

procedure TFProp.BtnGuardarClick(Sender: TObject);
begin
try
if MessageDlg('¿Desea guardar el registro?',mtConfirmation, mbYes,mbNo],0)=mrYes then // si la respuesta es si
begin
ADOQuery1.Post; // guarda el registro
end
else
begin
DBEdit1.SetFocus; // sino se vuelve a posicionar en el formulario
end;
except
on E:EDatabaseError do // si hay un mensaje de error de la BD
begin
ShowMessage('Error: '+E.message); // muestra error de la BD
end;
end;
end;

Con esto logro capturar el mensaje de error de la Base de Datos Access y mostrarlo en Delphi. Ahora lo que necesito hacer es, cuando exista un mensaje de error, capturarlo y saber si se trata de un error de duplicación de datos, o campos requeridos; y entonces crear mi propio mensaje de error ("Debe ingresar todos los datos").

Espero se comprenda la idea... Gracias a todos desde ya....

Delphius
04-12-2008, 21:24:56
Hola bigpeter80,
Pues el procedimiento es el mismo:

try
// lo que deseas intentar
except
on E: ETipoError1 do
begin
// que hacer en este tipo de error...
end;
on E: ETipoError2 do
begin
// que hacer si el error es de otro tipo...
end;
end; // fin del try

El asunto ahora es encontrar la lista de los tipos (mejor dicho clases) de errores;)

EDITO: Por favor emplea las etiquetas DELPHI para que el código resalte.

Saludos,

coso
04-12-2008, 22:17:21
Hola, existen tambien en el ADOQuery eventos relacionados con los errores (OnPostError, OnEditError,etc...). Saludos

bigpeter80
05-12-2008, 15:30:24
Gracias por las rcomendaciones delphius, y voy a seguir probando.... Con respecto a los códigos de error, alguien tiene idea cuáles son los códigos por cada tipo de error para bases de datos access??

bigpeter80
05-12-2008, 15:31:05
Gracias coso, voy a probar con esos eventos también..

bigpeter80
06-12-2008, 11:13:44
No logro encontrar las clases de error o tipos de errores de la EDatabaseError, si alguien puede darme una ayudita le estare agradecido...

enecumene
06-12-2008, 19:40:25
No logro encontrar las clases de error o tipos de errores de la EDatabaseError, si alguien puede darme una ayudita le estare agradecido...

¿Y qué clase de errores o escepciones intentas capturar?, si no son genéricos de Delphi tienen un tratamiento diferente, intentalo así:

try
//código
except
on E: Exception do
if E.ClassNameIs('nombre de la clase') then
//Aquí codificas el error
end;


Saludos.

Delphius
06-12-2008, 19:57:53
El asunto es que debe estudiarse como es la jerarquí de clases de EDataBaseError, que es la clase base a todas las excepciones producidas por los motores de base de datos. Esta clase se encuentra en la unidad DB.

Si usas ADO, luego debería estudiar la clase y la rama de jerarquía de EADOError.
Lastimosamente debe investigar y reveer la unidad ADODB que es donde se manejan lo referente a ADO.

Si emplea otra tecnología, el proceso es el mismo, estudiar la jerarquí de clases de excepciones que se manejen allí.

Saludos,

luchin001
09-12-2008, 00:06:41
Puedo opinar ?

http://www.kadao.dir.bg/

Set de componentes Kadao, te permiten controlar todos los mensajes de access, especificamente el componente Kadaoinfo y la libreria msldbusr.dll, se puede hasta identificar que usuario se conecto ....:rolleyes:, funciona con todos los acces incluida el 2007

son gratis y no tienes que estar reinventando la rueda .... :D

bigpeter80
10-12-2008, 15:14:03
Hola a todos... Luchin001 he descargado el set de componentes Kadao del link que has puesto, ya lo instale... Ahora te pregunto, si no es molestia, como lo utilizo?

luchin001
20-12-2008, 18:32:45
Disculpa hace dias que no pasaba por aca:p

http://www.clubdelphi.com/foros/showthread.php?t=8510

aqui yo buscaba una solucion a algo similar a lo que necesitas tu, espero te sirva.:o

ahora si te fijas el componente tiene las siguientes propiedades:

active = boolean
daoinfodll = ubicacion de la dll
database = base de datos
errousers = lista de errores de los usuarios
lasterror
lasterrortext
loggeduserex

no es nada complicado

no te olvide de usar la dll localmente, no en el servidor por la velocidad, se ralentiza mucho usar la dll remotamente.