![]() |
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 |
tal vez no puedas
Tal vez no puedas detectar el error ya que no es un Exception o un EDataBaseError, prueba con EIBInterbaseError
|
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:
|
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 |
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:
|
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 |
Algo que no me percate fue:
El TRY tienes el EIBDatabaseException y el error lo esta produccion el EDatabaseException que se encuentra en DB. ;) |
Reconcile
prueba hacer un reconcile del cds
|
Prueba haciendolo en el evento OnPostError del dataset, inluso puedes condicionarlo con el IBErrorCode..
|
La franja horaria es GMT +2. Ahora son las 01:59:53. |
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