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)
-   -   No puedo detectar la excepción "EDatabaseError" (https://www.clubdelphi.com/foros/showthread.php?t=9655)

Adan 28-04-2004 18:50:04

No puedo detectar la excepción "EDatabaseError"
 
Saludos,

Tengo el siguiente problema, trabajo con Delphi 7 y una Base de Datos Interbase 7.0, estoy usando una tabla que contiene información, la llave primaria es mi número de expediente que es de tipo char de 10 caracteres y la tengo definida como la Primary key "PK_NEXPEDIENTE".

En mi programa de delphi uso los componentes del DBexpress y al momento de insertar un registro con un expediente que ya existe, deseo atrapar la excepción y mostrar un mensaje al usuario que diga "Expediente ya existente".
mi código es el siguiente:

try
clientdataset1.Post;
if (clientdataset1.ChangeCount > 0) then
clientdataset1.ApplyUpdates(-1);
except
on E: Exception do begin
ShowMessage('Expediente ya existente');
end

pero al correr el programa e introducir el dato duplicado, nunca me arroja la excepción. Si lo corro desde delphi, el compilador si me arroja el error de "EdatabaseError violation of primary key..." pero nunca me arroja el mensaje de excepción. Y al correrlo fuera de delphi, obviamente nunca me marca el error a pesar de que no lo puede insertar por estar duplicado el expediente.

también intenté lo siguiente:

try
clientdataset1.Post;
if (clientdataset1.ChangeCount > 0) then
clientdataset1.ApplyUpdates(-1);
except
on E: EDatabaseError do begin
ShowMessage('Expediente ya existente');
end

y tampoco la atrapa, se sigue de largo.

Alguna idea para solucionarlo????

Gracias de Antemano

Adán

sanxpue 28-04-2004 19:54:31

tal vez no puedas
 
Tal vez no puedas detectar el error ya que no es un Exception o un EDataBaseError, prueba con EIBInterbaseError

Adan 28-04-2004 20:47:44

lo intenté así y nada, se sigue de largo, despues de ejecutar la línea
cds1.ApplyUpdates(-1);
y marcar el error de "EDatabaseError primary key violation..." no ejecuta mi código de excepción.

Alguna idea??

try
cds1.Post;
if (cds1.ChangeCount > 0) then
cds1.ApplyUpdates(-1);
except
on E: EIBInterbaseError do begin
ShowMessage('Error al guardar la manifestación');
end;



Cita:

Empezado por sanxpue
Tal vez no puedas detectar el error ya que no es un Exception o un EDataBaseError, prueba con EIBInterbaseError


cmagno 28-04-2004 20:56:26

Lo que te falta es añadir la libreria IB en la sección de declaracion de librerias de la interfaz de tu unidad ....

interface

uses

IB, .... el resto de las unidades por defecto

Espero que te haya podido ayudar! :D

Adan 28-04-2004 21:06:14

ya tengo esa libreria (IB) y tambien DB, y nada, nunca detecta la excepción, se sigue de largo...


Otra Idea :rolleyes: ??

Adán


Cita:

Empezado por cmagno
Lo que te falta es añadir la libreria IB en la sección de declaracion de librerias de la interfaz de tu unidad ....

interface

uses

IB, .... el resto de las unidades por defecto

Espero que te haya podido ayudar! :D


igiron 30-04-2004 01:04:51

Hola:

Algo que puedes hacer es utilizar el ApplyUpdates de esta manera

if DATASET.ApplyUpdates(0) > 0 then begin
messagebox('No se inserto el registro en la base de datos');
DATASET.cancel;
exit;
end if

Creo que esta es una forma, porque ApplyUpdates devuelve la cantidad de errores que produjeron al aplicar los cambios en la base de datos.

Espero que te ayude.

Saludos :p

igiron 30-04-2004 01:20:41

Algo que no me percate fue:

El TRY tienes el EIBDatabaseException y el error lo esta produccion el EDatabaseException que se encuentra en DB.


;)

CCCP 20-03-2005 11:29:05

Reconcile
 
prueba hacer un reconcile del cds

Delfino 21-03-2005 20:07:24

Prueba haciendolo en el evento OnPostError del dataset, inluso puedes condicionarlo con el IBErrorCode..


La franja horaria es GMT +2. Ahora son las 04:59:58.

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