Detectar llaves foraneas con TFields
hola
alguien sabe si es posible detectar si un campo es llave foranea accesando a los procedimientos, funciones o propiedades del tfield, y si no es posible por esos medios es posible hacer esto de alguna otra forma ? creo esto seria muy util para poder generar formularios dinamicamente saludos |
A través de TFields no, pero dependiendo del motor de base de datos que estés utilizando puedes hacer consultas a los metadatos.
Por ejemplo, si tu base de datos fuese Firebird, en ella podrías acceder a diversas tablas especiales como RDB$Index_Segments, RDB$Relation_Constraints y RDB$Ref_Constraints para averiguar si un campo en particular forma parte de un índice de llave externa y cuál es ese índice y el nombre de la respectiva restricción. NOTA: Siempre es bueno indicar con qué tecnologías trabajas. Saludos. |
Detectar llaves foraneas
hola,
estoy con motor Firebird codetyphon 2.50 lazarus 0.9.31 componentes de acceso a bd ibdac ya conocia esa forma de accesar a las tablas de sistema de firebird pero estoy buscando una manera de saber si el campo es llave foranea y a que tabla referencia 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. |
Si es firebird, entonces lo que te ha indicado Al González:
Cita:
|
Cita:
Cita:
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:
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:
Saludos. Al González. |
gracias por tu ayuda Al
|
La franja horaria es GMT +2. Ahora son las 14:22:34. |
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