Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-03-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
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¡¡
Responder Con Cita
  #2  
Antiguo 15-03-2011
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 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 ....
Responder Con Cita
  #3  
Antiguo 16-03-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 17-03-2011
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 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 ....
Responder Con Cita
  #5  
Antiguo 18-03-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 18-03-2011
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 jhonalone.

Cita:
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.
Disculpame, recién ahora que me refrescas la memoria busqué (y encontré) el post anterior.

Me parece que este caso podrías prescindir del DBGrid y trabajar directamente sobre el DataSet:
Código Delphi [-]
procedure TForm2.Button1Click(Sender: TObject);
var
  BM: TBookMarkStr;
  i: Integer;
  s: string;
begin
  ListBox1.Clear;
  with Form1 do  // (si el DataSet reside en Form1)
  begin
    DataSet.Open; // Opcional: ( si no esta abierto)
    BM:= DataSet.Bookmark;
    DataSet.DisableControls;
    DataSet.First;
    while not DataSet.Eof do
    begin
      s:= '';
      for i:= 0 to DataSet.FieldCount - 1 do
      begin
        s:= s + DataSet.Fields[i].AsString;
        if i < DataSet.FieldCount - 1 then
          s:= s + '  -  ';
      end;
      ListBox1.Items.Add(s);
      DataSet.Next;
    end;
    DataSet.Bookmark:= BM;
    DataSet.EnableControls;
    DataSet.Close; // Opcional ( si queres cerrarlo )
  end;
end;
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.
Responder Con Cita
  #7  
Antiguo 19-03-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Ecfisa, eres GRANDE, MUY GRANDE. ¡¡FUNCIONÓ!!.

Espero no tener que abusar de tu inestimable ayuda muchas veces.

Gracias. Un especial saludo.
Responder Con Cita
  #8  
Antiguo 21-03-2011
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 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 ....
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
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


La franja horaria es GMT +2. Ahora son las 07:53:31.


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