FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Obtener valor de Campo Calculado
Agradecería que alguien me echara una mano. Vaya por delante que son un novato con las BD.
A ver si soy capaz de explicame. Tengo dos tablas maestro/detalle en un formulario donde presento los datos detalle en una rejilla (DBgrid) y los datos maestro en DBEdit. Uno de los campos de la rejilla es un campo calculado (Con su OnCalcFields, su nombre, procedure de cálculo, etc). Todo funciona de maravilla: si cambio el cliente se actualizan los datos del cliente y de la rejilla (incluyendo el campo calculado). Mi problema surge cuando intento obtener los datos de la rejilla desde OTRO FORMULARIO. Obtengo todos los datos referentes a los campos de la rejilla sin dificultad, hasta que llego al campo calculado, en el que siempre obtengo un resultado vacío. Paradógicamente, si entro primero en el formulario de la tabla y a continuación en el segundo formulario SI OBTENGO el resultado, pero si entro antes en el segundo forrmulario (en cuya "Uses" tengo declarado el anterior), puedo obtener TODOS los valores de todos los campos MENOS el campo calculado. Por más vueltas que le doy no llego a comprenderlo. Si he sido capaz de explicarme y alguien puede ayudarme... !!MUCHAS GRACIAS¡¡ |
#2
|
||||
|
||||
Hola jhonalone.
Utilizando un TDataModule, con los TDataSets, sus respectivos TDataSources declarados y el evento OnCalcFied asignado, un TDBGrid que tenga la propiedad DataSource= 'DataModule.DataSourceDetail', mostrará el campo calculado, esté ubicado en el form que esté. Claro que siempre y cuando ese form incluya a la unit del TDataModule y esté definido el campo calculado en las columnas del TDBgrid. Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
|||
|
|||
Ante todo muchas gracias, ecfisa.
Puede que el problema sea ése. He prescindido del Data Module y he conectado las bases y el DBGrid manualmente. He añadido el campo calculado a la BD detalle y he conectado el procedimiento de cálculo al evento OnCalcFields de la misma BD detalle. Después he añadido el campo calculado a la rejilla. Ahora, si tengo que meterlo todo en un Data Module, me da algo, porque no sé como hacerlo cuando ya está todo conectado. Y rehacerlo todo y empezar de nuevo es lo último que quisiera hacer. Tengo mucho código repartido en otros formularios afectado. Ecfisa, si crees que hay alguna otra solución, tal y como están las cosas, por favor ayúdame, yo también seguiré buscando otras alternativas. Gracias de nuevo por tus esfuerzos. Saludos. |
#4
|
||||
|
||||
Hola jhonalone.
Lo importante es que todos los DBGrids, estén en el form que estén, hagan referencia al DataSource asociado al DataSet. Por ejemplo, si pusiste el DataSet/DataSource/OnCalcFields en Form1, y pones un DBGrid en Form2, en su propiedad DataSource debe figurar: 'Form1.DataSourceDetail', lo mismo para Form3, etc. De este modo siempre estarás haciendo referencia al mismo DataSet y por supuesto al mismo campo calculado y evento. Por lo tanto, no puede diferir el comportamiento de un DBGrid situado en un form al situado en otro. Espero haberme explicado bien. Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#5
|
|||
|
|||
Hola, de nuevo, ecfisa. Te explicaste mucho mas que perfectamente.
La cuestión es la siguiente: desde el Form2 pretendo recuperar los valores del DBGrid que pertenece al Form1. No tengo definido otro DBGrid en el Form2. Los presento (algunos valores, no todos) en un TListBox de la forma que tú me enseñaste. Uno de ellos es el campo calculado. Como te dije toma valor, si antes he entrado en el Form1, si entro directamente en el Form2 toman valor todos los campos excepto el campo calculado. Estoy desarrollando un Procedure para volverlo a calcular desde el Form2, con los datos del Form1. Esto no sería necesario si pudiera conseguir el valor directamente. Estoy empezando a pensar que la causa del problema es: que hasta que no se ejecuta al Form1, no se carga en memoria el Procedure que calcula el valor del campo. He intentado ejecutarlo desde el Form2 y, aunque no me da error, no soluciona el problema. Gracias de nuevo. Saludos. |
#6
|
||||
|
||||
Hola jhonalone.
Cita:
Me parece que este caso podrías prescindir del DBGrid y trabajar directamente sobre el DataSet: Por que en realidad, el campo calculado está definido en el TDataSet no en el TDBGrid. Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 19-03-2011 a las 02:28:04. |
#7
|
|||
|
|||
Ecfisa, eres GRANDE, MUY GRANDE. ¡¡FUNCIONÓ!!.
Espero no tener que abusar de tu inestimable ayuda muchas veces. Gracias. Un especial saludo. |
#8
|
||||
|
||||
Hola jhonalone.
Se nota que me estas mirando con una lupa... Me alegro que hayas solucionado el problema. Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Como obtener valor de Campo Autoincremento... | vic_ia | Firebird e Interbase | 5 | 10-05-2005 17:19:42 |
obtener el valor de un campo (Tquery) | Yoli | Conexión con bases de datos | 5 | 08-04-2005 22:07:05 |
como obtener el valor de un campo | Yoli | Conexión con bases de datos | 2 | 23-03-2005 15:04:24 |
Obtener el valor de una campo autoincremento | edum | Conexión con bases de datos | 2 | 26-08-2004 23:04:30 |
obtener valor de un campo despues de un insert + applyupdates(0) | wonder boy | Conexión con bases de datos | 1 | 10-06-2004 23:05:39 |
|