Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-04-2004
Adan Adan is offline
Registrado
 
Registrado: abr 2004
Posts: 3
Poder: 0
Adan Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 28-04-2004
sanxpue sanxpue is offline
Miembro
 
Registrado: jul 2003
Posts: 196
Poder: 21
sanxpue Va por buen camino
tal vez no puedas

Tal vez no puedas detectar el error ya que no es un Exception o un EDataBaseError, prueba con EIBInterbaseError
__________________
saludos desde Puebla Mexico..
asanxt@hotmail.com
"como siempre a sus ordenes y siempre con buena cara"
'lolita me excitas, perversa piel de melocotón'
Responder Con Cita
  #3  
Antiguo 28-04-2004
Adan Adan is offline
Registrado
 
Registrado: abr 2004
Posts: 3
Poder: 0
Adan Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 28-04-2004
cmagno cmagno is offline
Miembro
 
Registrado: abr 2004
Posts: 16
Poder: 0
cmagno Va por buen camino
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!
Responder Con Cita
  #5  
Antiguo 28-04-2004
Adan Adan is offline
Registrado
 
Registrado: abr 2004
Posts: 3
Poder: 0
Adan Va por buen camino
ya tengo esa libreria (IB) y tambien DB, y nada, nunca detecta la excepción, se sigue de largo...


Otra Idea ??

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!
Responder Con Cita
  #6  
Antiguo 30-04-2004
igiron igiron is offline
Registrado
 
Registrado: abr 2004
Posts: 2
Poder: 0
igiron Va por buen camino
Wink

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
Responder Con Cita
  #7  
Antiguo 30-04-2004
igiron igiron is offline
Registrado
 
Registrado: abr 2004
Posts: 2
Poder: 0
igiron Va por buen camino
Talking

Algo que no me percate fue:

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


Responder Con Cita
  #8  
Antiguo 20-03-2005
CCCP CCCP is offline
Miembro
 
Registrado: dic 2004
Ubicación: Barcelona
Posts: 38
Poder: 0
CCCP Va por buen camino
Reconcile

prueba hacer un reconcile del cds
Responder Con Cita
  #9  
Antiguo 21-03-2005
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Prueba haciendolo en el evento OnPostError del dataset, inluso puedes condicionarlo con el IBErrorCode..
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:39:55.


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