Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   identificar un error de clave foranea... (https://www.clubdelphi.com/foros/showthread.php?t=72978)

pnsd_89 23-03-2011 20:16:31

identificar un error de clave foranea...
 
hola amigos una consulta, este es el caso se que los errores de oracle se pueden identificar por su iderror.. ahora tengo una tabla con varios fk.. hay forma de identificar cual de estos fk es el que esta produciendo el error solo con el mensaje de error o algo asi? desde ya muchas gracias :rolleyes:

pnsd_89 23-03-2011 21:15:40

tambien me serviria un codigo que me devuelva el nombre de la clave secundaria que no se cumple...

ElKurgan 24-03-2011 07:53:37

Lo normal es poner nombres de restricciones cuando se declaran estas claves y, en general, para cualquier campo que pudiera fallar (campos no nulos, indices únicos, etc.)

Por ejemplo, en mi empresa trabajamos con Oracle y nombramos a las restricciones (constrints) de claves foráneas con el nombre "fk_tabla_campo", para saber al menos que campo clave de que tabla está fallando.

No se si usas firebird o MSSql pero supongo que todas deben permitir dar nombres de contraints de una u otra forma

Saludos

pnsd_89 24-03-2011 13:27:17

:)El kurgan Gracias por tu respuesta.. Si yo tambien trabajo con oracle y si en la empresa tambien se les da ese nombre con esa nomenclatura fk_campo. Ahora lo que yo quiero hacer es capturar eso con el delphi para luego hacer un
if error = nombre_fk then
begin
accion
end;

el caso es que la ventana con la que estoy trabajando hace una migracion de postgress a oracle con una tabla detalle. El caso es que esta tabla tiene 5 fk.. yo solo necesito que inserte en otra tabla en el caso que esa fkparticular sea la que cause el error de clave, constraint, llave o como esten acostumbrados a llamarlo..
De nuevo gracias y aguardo mas respuestas :) Bless:cool:

ElKurgan 25-03-2011 07:33:17

¿Y que componentes de acceso a datos estás utilizando? Al menos DBExpress devuelve el código de la restricción violada dentro del mensaje de error. Si no es una restricción con nombre suele devolver un nombre del sistema (ojo, sigo hablando de oracle), como por ejemplo "SYS_C00xxxxxx".

Tendrías que capturar la excepción con un try..except y luego obtener el texto buscando dentro del mensaje de error (por ejemplo, con la función "Pos".)

No se, seguro que hay otras formas más elegantes, pero asi, a bote pronto, es lo primero que se me ocurre.

Saludos

pnsd_89 25-03-2011 13:01:03

si... :) estaba pensando tambien en eso antes, pero no queria hacer eso por que hiba a ser mas lindo si habia una funcion primitiva de Delphi, pero al parecer no existe cuateto de dbxpress uso... y bue... Muchisimas gracias enserio! sos lo mas.. ahora vere que onda.. :cool:

LARGA VIDA A DELPHI!


La franja horaria es GMT +2. Ahora son las 00:29:00.

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