FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Creación de campos en tiempo de ejecución
Hola muchachos,
aqui andamos de nuevo preguntando alguna cosilla que me trae loco. Ando preparando una aplicacioncilla, y como me estoy haciendo mayor, cada día quiero escribir menos código. Mi intención es , en base a cierta información que extraigo de las caracteristicas de las tablas, 'montar' unas ventanas de edición automáticamente. Utilizo Delphi 7 y Firebir 2.* En base a unas consultas a la BBDD, sé qué campos son primary key o foreign key. Lo que hago es crear y ocultar todos esos campos y lo que quiero es crear campos lookup para la edición y consulta. En el módulo de datos, ningún dataset tendría campos persistentes, sino que los iría creando en base a esta información. Mi problema es el siguiente: Puedo crear campos tipo lookup en tiempo de ejecución ? y campos calculados ?. Yo no lo he conseguido. La documentación dice que no se utilicen TFields en tiempo de ejecución. Seguro que algún maestro tiene experiencia al respecto, o en otro caso seguro que ilumina mi camino por otro lado. Gracias a todos por adelantado. Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#2
|
||||
|
||||
En este hilo se habló algo del tema, mira a ver si te ayuda en algo.
http://www.clubdelphi.com/foros/show...ghlight=lookup Éste puede que también te sirva. http://www.clubdelphi.com/foros/show...ghlight=lookup |
#3
|
||||
|
||||
Gracias, lo probaré. Creo que lo que hago mal es utilizar
Campo:= TField.Create(); Por lo que veo debo hacer Campo:= TStringField.Create(); o similar. Cuando lo pruebe os digo cómo ha quedado. Gracias de nuevo. Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#4
|
|||
|
|||
Hola, yo tengo algo similar para las dbgrid. ¿Estas seguro que necesitas los campos de manera persistente? ten en cuenta que cuando haces una consulta, se crean en ella los objetos correspondientes a los campos, por lo que seria inecesario ir creando TStringField, etc...en principio, con tansolo los nombres de los campos, tendrias de sobras.
te dejo aqui una funcion que uso para al despues de hacer un select cualquiera me adapte la dbgrid al respecto. En ella se ve el uso del datatype, etc...
Última edición por coso fecha: 25-08-2008 a las 17:43:45. |
#5
|
||||
|
||||
Gracias Coso
Tras unas pruebas he conseguido realizar lo que quería. Necesito crear campos en el dataset porque tengo claves foráneas. Podría hacer lo que comentas, pero tendría que crear columnas calculadas, procedimientos para calcular campos, ... Seguro que acabo haciendo un mix de Datasets y DBGrids Ahora me queda ver cómo crear campos calculados. Imagino que tendré que crear un parser o algo similar Esta tarde seguiré pegándole; intentaré publicar los avances con una explicación. Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#6
|
||||
|
||||
Hola de nuevo.
Tras varias pruebas ayer tarde, estoy empezando a obtener los resultados que quiero. Os cuelgo un ejemplo ( por supuesto mejorable ) del prototipo. PAra probar lo unico que hace falta es lo siguiente: DElphi 7 Firebird Se puede utilizar cualquier BBDD ya creada. Ejecutar CreacionSQL.sql para crear la tabla Z_DEFINICION_CAMPO y el procedure Z_TABLAS Ejecutar el procedure Z_TABLAS y localizar las foreign keys Añadir en la tabla Z_DEFINICION_CAMPO los campos que sean FK-s. Creo que son triviales los valores que hay que poner en los campos. En el campo QUERY_SI_FK poner lo siguiente: SELECT IDCLIENTE, NOMBRE FROM CLIENTES ORDER BY NOMBRE en este caso campo IDCLIENTE es la sea FK de la tabla PEDIDOS, siendo la tabla clientes la que contiene los clientes, siendo IDCLIENTE la PK. Creo que el ejemplo es bastante descriptivo. Una vez hecho esto, abrir el proyecto, en la query MDOQUERY1 poner la select que querais ( en le ejemplo seria SELECT * FROM PEDIDOS ) Si hubiera varias FK's habría que dar de alta tantos registros en la tabla Z_DEFINICION_CAMPO como FKs hubiera. Y nada más... a partir de aquí, lo que se quiera. Se puede combinar con la personalización de los dbgrids tal y como comenta coso. Una mezcla de ambos métodos puede dar un resultado muy grato con poco trabajo. Ya sólo faltan los campos calculados.... en otra ocasión. Y por supuesto, el código es mejorable. Mejoras pendientes: Control de errores creando campos lookup si no existiera la definición Otros valores para los campos. ... Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problemas con la creación de TTimer es tiempo de ejecución | vejerf | OOP | 3 | 14-04-2008 16:26:14 |
creacion de una base de datos en tiempo de ejecucion | lokodelphi | SQL | 3 | 24-04-2006 14:37:43 |
Creación de componentes en tiempo de ejecución | jymy788 | Varios | 2 | 27-01-2005 17:22:20 |
Creación de tabla en tiempo de ejecución | sledgehammer | Conexión con bases de datos | 3 | 16-09-2003 15:08:01 |
Creacion de componente en tiempo de ejecución | cone220 | OOP | 1 | 16-09-2003 03:47:16 |
|