Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   saber si existe una columna de una tabla de firebird (https://www.clubdelphi.com/foros/showthread.php?t=88084)

identsoft 10-04-2015 11:22:26

saber si existe una columna de una tabla de firebird
 
Un saludo para todos.
La idea es actualizar una base de datos(metadatos, no registros de datos) por codigo delphi. Para ello necesito saber si existe una columna determinada de una tabla determinada de Firebird (atraves de sus metadatos).
¿Es posible?. ¿Alguna idea?
Gracias

ecfisa 10-04-2015 11:48:02

Hola identsof.
Cita:

Empezado por identsoft (Mensaje 491087)
necesito saber si existe una columna determinada de una tabla determinada de Firebird

Código SQL [-]
SELECT RDB$FIELD_ID, RDB$FIELD_NAME, RDB$FIELD_SOURCE, RDB$FIELD_POSITION
FROM RDB$RELATION_FIELDS
WHERE RDB$RELATION_NAME = :TB_NAME
  AND RDB$FIELD_NAME = :FLD_NAME
  AND RDB$SYSTEM_FLAG = 0

Saludos :)

identsoft 10-04-2015 11:48:53

Perdon, no se porque aparece dos veces.
Me contesto yo mismo:
Código Delphi [-]
SELECT * FROM RDB$RELATION_FIELDS' +
                               ' WHERE RDB$RELATION_NAME = ' + QuotedStr('LIN_FACT') +
                               ' AND  RDB$FIELD_NAME = ' + QuotedStr('CLV_CONCE');

identsoft 10-04-2015 11:51:17

Gracias ecfisa.
pero porque : AND RDB$SYSTEM_FLAG = 0

ecfisa 10-04-2015 15:31:57

Hola identsof.

Para descartar las tablas de sistema de la selección. Firebird marca con un 1 las tablas del sistema y con un 0 las creadas por el usuario.

En realidad es mas seguro hacer,
Código SQL [-]
....
    AND COALESCE( RDB$SYSTEM_FLAG, 0 ) = 0
o con el mismo resultado:
Código SQL [-]
...
   AND (RDB$SYSTEM_FLAG = 0 OR RDB$SYSTEM_FLAG IS NULL)

Por ejemplo, para listar las tablas de sistema:
Código SQL [-]
SELECT RDB$RELATION_NAME
FROM RDB$RELATIONS
WHERE RDB$VIEW_BLR IS NULL 
  AND COALESCE(RDB$SYSTEM_FLAG, 1) = 1;
Saludos :)


La franja horaria es GMT +2. Ahora son las 05:49:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi