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 16-08-2007
GuerreroDelphi GuerreroDelphi is offline
Miembro
 
Registrado: ago 2007
Ubicación: Bogotá - Colombia
Posts: 24
Poder: 0
GuerreroDelphi Va por buen camino
Capturar informacion en una excepción firebird

Deseo capturar la información relacionada a una excepción en firebird desde Delphi 5. Por ejemplo, si trato de eliminar un registro que es llave foránea, necesito saber las tablas en la que aparece dicha llave, y si es posible también saber información acerca del registro relacionado.
Si alguien me puede colaborar, le agradezco enormemente.
Responder Con Cita
  #2  
Antiguo 16-08-2007
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡Hola a todos!

Cita:
Empezado por GuerreroDelphi Ver Mensaje
Deseo capturar la información relacionada a una excepción en firebird desde Delphi 5. Por ejemplo, si trato de eliminar un registro que es llave foránea, necesito saber las tablas en la que aparece dicha llave, y si es posible también saber información acerca del registro relacionado.
Si alguien me puede colaborar, le agradezco enormemente.
En el mensaje de error "violation of FOREIGN KEY constraint "X"", X es el nombre de la llave foránea. Extraigo ese nombre que está entre comillas dobles para hacer una consulta en los metadatos (Firebird 1.5 y otras versiones).

Normalmente el índice de la llave foránea se llama igual que ésta. Así que, en ese caso, puede hacerse la consulta:
Código SQL [-]
  Select RDB$Relation_Name From RDB$Indices Where RDB$Index_Name = 'X'
Para obtener el nombre de la tabla que tiene esa llave foránea. Y para obtener el nombre del primer campo relacionado con ese índice:
Código SQL [-]
  Select RDB$Field_Name From RDB$Index_Segments Where
    (RDB$Index_Name = 'X') And (RDB$Field_Position = 0)

Esto lo escribí a botepronto, porque ya me retiraba a dormir. Mas espero pueda serte de utilidad.

Un meta abrazo.

Al González.
Responder Con Cita
  #3  
Antiguo 16-08-2007
GuerreroDelphi GuerreroDelphi is offline
Miembro
 
Registrado: ago 2007
Ubicación: Bogotá - Colombia
Posts: 24
Poder: 0
GuerreroDelphi Va por buen camino
Capturar información en una excepción firebird

Muchas gracias, Al, voy a probar tu sugerencia. Gracias por tu tiempo y tu colaboración.
Responder Con Cita
  #4  
Antiguo 16-08-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por Al González Ver Mensaje
Normalmente el índice de la llave foránea se llama igual que ésta. Así que, en ese caso, puede hacerse la consulta:
Para capturar el nombre del indice, en caso de que sea diferente

Código SQL [-]
Select RC.RDB$Index_Name From RDB$RELATION_CONSTRAINTS RC Where
RC.RDB$Constraint_Name = 'X'

Para capturar el nombre de la tabla,
a la cual hace referencia la llave foranea...

Código SQL [-]
SELECT I.RDB$RELATION_NAME
FROM RDB$REF_CONSTRAINTS RF
INNER JOIN RDB$RELATION_CONSTRAINTS RC ON (RF.RDB$CONST_NAME_UQ = RC.RDB$CONSTRAINT_NAME)
INNER JOIN RDB$INDICES I ON (I.RDB$INDEX_NAME = RC.RDB$INDEX_NAME)
WHERE RF.RDB$CONSTRAINT_NAME = 'X'

Lo que aún no encuentro como hacer es capturar los campos de la tabla,
a los cuales hace referencia la llave foranea.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 16-08-2007 a las 18:52:08. Razón: Organizar un poco el codigo SQL
Responder Con Cita
  #5  
Antiguo 16-08-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Listo, para listar los campos a los cuales esa llave foranea hace referencia, la consulta debe ser asi:

Código SQL [-]
SELECT S.RDB$FIELD_NAME FROM RDB$INDICES I
INNER JOIN RDB$INDEX_SEGMENTS S ON(S.RDB$INDEX_NAME = I.RDB$FOREIGN_KEY AND
I.RDB$INDEX_NAME='X')
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #6  
Antiguo 17-08-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Una pregunta, ¿Esas consultas que coloque le sirvieron a alguien?, es que quiero meterlas en la sección de trucos (En su categoria FireBird), pero antes quiero saber si alguien mas aparte de mi, le hizo alguna prueba y si encontro algo bueno o algo malo, solo eso , gracias.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #7  
Antiguo 20-08-2007
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Cita:
Deseo capturar la información relacionada a una excepción en firebird
Creo q lo mejor es hacerlo de la manera q lo hacen los propios componentes, IBX o MDO, para eso hay q investigar el codigo fuente de esos componentes, si no me equivoco cuando el servidor devuelve un mensaje de error lo devuelve en un array (status vector), en ese array esta el mensaje y tb las tablas y campos implicados, eso evitaria tener q hacer esas consultas,

si alguien lo puede hacer sera una ayuda muy valorable para todos..
__________________
¿Microsoft? No, gracias..
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Capturar una excepcion en Delphi producida por FIREBIRD ronson Firebird e Interbase 21 01-09-2010 21:18:10
Capturar la excepcion EAccessViolation beatriz g Varios 2 25-08-2006 10:49:16
Capturar informacion de balanza electronica zugazua2001 Varios 1 09-07-2006 20:23:58
Capturar excepcion formato datos DBGrid manolop Firebird e Interbase 1 13-05-2005 23:43:00
Cantidad de Informacion en Firebird Choclito Firebird e Interbase 9 27-10-2004 20:37:27


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


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