Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-04-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Propiedades de una columna

Estoy trabajando con una BB.DD. Firebird y necesito saber si en las propiedades de una columna se ha definido un valor por defecto. A través de las tablas RDB$ saco al información de las columnas de las tablas, pero no acabo de ver cómo saber si se ha definido un valor por defecto para una columna concreta y cuál es, llegado el caso, dicho valor.
Código SQL [-]
SELECT RDB$FIELD_NAME, RDB$FIELD_POSITION, RDB$DESCRIPTION, RDB$DEFAULT_VALUE 
FROM RDB$RELATION_FIELDS 
WHERE RDB$RELATION_NAME='PERSONA'
Con este código debería poder ver dicho valor por defecto pero, probando con EMS SQL Manager, no me deja acceder al valor contenido en esa selección RDB$DEFAULT_VALUE. Veo que el "icono" en la rejilla es diferente, pero no puedo ver el contenido.



Yo sé que el valor por defecto de esa columna poblacion es 1, pero ¿cómo puedo "leerlo"?

Última edición por ecfisa fecha: 08-04-2016 a las 12:16:02. Razón: Corregir problema WYSIWYG
Responder Con Cita
  #2  
Antiguo 08-04-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo recordar que el campo es "default_source"
Responder Con Cita
  #3  
Antiguo 08-04-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Fijate si esto es lo que estas buscando:
Código SQL [-]
SELECT RDB$FIELD_NAME,
       RDB$FIELD_POSITION,
       RDB$DESCRIPTION,
       RDB$DEFAULT_SOURCE
FROM RDB$RELATION_FIELDS
WHERE RDB$RELATION_NAME = :TABLE_NAME
  AND RDB$FIELD_NAME    = :COLUMN_NAME
  AND RDB$SYSTEM_FLAG = 0

Saludos

Edito: (Casimiro fué mas rápido )
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 08-04-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
¡Perfecto! Muchas gracias a los dos. No se me ocurría como encontrarlo.
Responder Con Cita
  #5  
Antiguo 08-04-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Pues no logro modificar por código las propiedades. En principio, al crear la base de datos, la columna CODPRV no tiene valor por defecto lo que es un grave error tratándose de un campo de la clave primaria pero no puedo fijarlo desde la creación porque van a haber instalaciones diferentes.

He montado esto:
Código:
Auxiliar->Close();     // Para saber que tablas he de modificar
Auxiliar->SQL->Text = "SELECT A.RDB$RELATION_NAME FROM RDB$RELATION_CONSTRAINTS A JOIN RDB$INDEX_SEGMENTS B ON A.RDB$CONSTRAINT_NAME = B.RDB$INDEX_NAME WHERE A.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' AND B.RDB$FIELD_NAME = 'CODPRV' ORDER BY RDB$RELATION_NAME";
Auxiliar->Open();
for (; !Auxiliar->Eof; Auxiliar->Next())
{
     Query->Close();     // Comprobar si ya se ha definido el valor DEFAULT
     Query->SQL->Text = "SELECT RDB$DEFAULT_SOURCE FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME = :Tabla AND RDB$FIELD_NAME = 'CODPRV' AND RDB$SYSTEM_FLAG = 0";
     Query->ParamByName("Tabla")->AsString = Auxiliar->FieldByName("RDB$RELATION_NAME")->AsString;
     Query->Open();

     if (Query->FieldByName("RDB$DEFAULT_SOURCE")->AsString.IsEmpty())
     {
          // Si no hay valor, establecerlo
          Query->Close();
          Query->SQL->Text = "UPDATE RDB$FIELDS SET RDB$CHARACTER_SET_ID = NULL WHERE RDB$FIELD_NAME = (SELECT RDB$FIELD_SOURCE FROM RDB$RELATION_FIELDS WHERE RDB$FIELD_NAME = "
                             "'CODPRV' AND RDB$RELATION_NAME = :Tabla)";
          Query->ParamByName("Tabla")->AsString = Auxiliar->FieldByName("RDB$RELATION_NAME")->AsString;
          Query->ExecSQL();

          Query->Close();
          Query->SQL->Text = "UPDATE RDB$RELATION_FIELDS SET RDB$COLLATION_ID = NULL WHERE RDB$FIELD_NAME = 'CODPRV' AND RDB$RELATION_NAME = :Tabla";
          Query->ParamByName("Tabla")->AsString = Auxiliar->FieldByName("RDB$RELATION_NAME")->AsString;
          Query->ExecSQL();

          Query->Close();
          Query->SQL->Text = "ALTER TABLE " + Auxiliar->FieldByName("RDB$RELATION_NAME")->AsString + " ALTER COLUMN CODPRV SET DEFAULT '" + ProvTit + "'";
          Query->ExecSQL();
     }
}
ProvTit es un AnsiString que saco del fichero de configuración de la aplicación y tiene valor (en las pruebas que hago 45).

Todo se ejecuta bien, no da ningún error... Pero no modifica la estructura de la columna. Dentro del if los dos primeros querys los he puesto dado que cuando pruebo con EMS SQL Manager a establecer el valor DEFAULT para la columna, monta los tres querys que hay.
Responder Con Cita
  #6  
Antiguo 08-04-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Acepto collejas por todos lados. ¡Se me había olvidado hacer el commit!
Responder Con Cita
  #7  
Antiguo 08-04-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Responder Con Cita
  #8  
Antiguo 08-04-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Deberíamos tener una etiqueta bb para esta imagen

LineComment Saludos
Responder Con Cita
  #9  
Antiguo 08-04-2016
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Deberíamos tener una etiqueta bb para esta imagen
Estoy de acuerdo.
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
Hacer que una columna de un DbGrid aparezca distinta según valor Aprendiendo OOP 11 30-11-2018 14:47:20
Poner una columna de un DBGrid como columna Fija rgstuamigo OOP 4 04-03-2009 21:54:38
Acceso a las propiedades de un objeto desde el editor de propiedades Hugo OOP 0 24-11-2006 12:58:22
Columna calculada en base a otra columna calculada Al González Firebird e Interbase 1 09-02-2004 23:51:57
Propiedades ADO Zopi Conexión con bases de datos 4 10-10-2003 15:41:57


La franja horaria es GMT +2. Ahora son las 06:14: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