Cita:
Empezado por jasmad
[...] y si no es posible por esos medios es posible hacer esto de alguna otra forma ?
|
Cita:
Empezado por jasmad
[...] desde la aplicacion; de hecho casi siempre los paquetes de acceso a datos tienen un componente de metadatos pero eso depende del paquete que uses.
|
Bueno, como has de imaginar, puedes hacer la consulta respectiva desde la propia aplicación.
Seguramente los hay, pero no conozco un paquete de componentes que te dé esa información de manera fácil, salvo un "FirebirdSQLConnection" que hace tiempo derivé de TSQLConnection. Es para Delphi y no creo que compile en Lazarus, así que al menos podría poner aquí una copia de los métodos que hacen el trabajo sucio:
Código Delphi
[-] Function TMagiaSQLConnection.FieldRefTable (Const Table, Field :String)
:String;
Begin
Result := ConstraintRefTable (FieldConstraint (Table, Field));
End;
Function TMagiaFirebirdSQLConnection.FieldConstraint (
Const Table, Field :String) :String;
Begin
Result := SelectTrim (
'First 1 RC.RDB$Constraint_Name From RDB$Relation_Constraints RC ' +
'Inner Join RDB$Index_Segments ISe On ISe.RDB$Index_Name = ' +
'RC.RDB$Index_Name Where (RC.RDB$Relation_Name = ' +
QuotedCasedName (Table) + ') And (ISe.RDB$Field_Name = ' +
QuotedCasedName (Field) + ') And (ISe.RDB$Field_Position = 0)');
End;
Function TMagiaFirebirdSQLConnection.ConstraintRefTable (
Const Constraint :String) :String;
Begin
Result := SelectTrim (
'Select RelC.RDB$Relation_Name From RDB$Relation_Constraints RelC ' +
'Inner Join RDB$Ref_Constraints RefC On RefC.RDB$Const_Name_UQ = ' +
'RelC.RDB$Constraint_Name Where RefC.RDB$Constraint_Name = ' +
QuotedCasedName (Constraint));
End;
SelectTrim es un método que ejecuta un simple
Select sobre un campo de la base de datos (mediante el método nativo Execute), devolviendo el resultado como cadena de caracteres y quitándole espacios que tuviera en ambos extremos. QuotedCasedName es una función que lo único que hace (en este caso y para simplificar) es convertir a mayúsculas una cadena de caracteres y encerrarla entre comillas simples. El código completo de esa y otras clases está
aquí (pasen por alto la licencia, estoy por cambiarla a
open source).
A partir de aquí y con lo que ya conoces sobre cómo
acceder a las tablas del sistema (
metadatos), jasmad, creo que podrás conseguir lo que pides. Espero sea de ayuda.
Algunas otras monerías de estas clases:
Código Delphi
[-] Function TMagiaSQLConnection.ExecProc (Const Proc :String;
Const AParams :Variant) :Variant;
Function TMagiaSQLConnection.CurrentTimeStamp :TDateTime;
Function TMagiaSQLConnection.Max (Const Table, Field :String;
Const Conditions :String = '') :Variant;
Function TMagiaSQLConnection.NextValue (Const Sequence :String) :Integer;
Function TMagiaFirebirdSQLConnection.TableError (Const Msg :String)
:TghTableError;
Saludos.
Al González.