PDA

Ver la Versión Completa : Manejo de propiedades


PacoPepe
27-11-2008, 10:16:54
Tengo dudas sobre como seria la forma correcta de manejar propiedades.

Tengo una aplicación en el que se manejan una serie de variables relacionadas entre si, las cuales se almacenan en una tabla de una base de datos.

Por ejemplo, 3 variables relacionadas entre si, de las que el usuario va a definir 2 de ellas y el programa la tercera.En concreto son la longitud de una tubería, el número de tramos de la tubería y la longitud de cada tramo de la tubería. Definiendo el usuario dos de ellas, calculo la 3ª.

Como las variables están almacenadas en una base de datos, no se si lo correcto sería almacenar las 3 variables o solo 2 y calcular la 3ª.

Tampoco sé como debo definir las propiedades. Debo de definirlas así


private
FVariable: double;
public
property Variable: double read GetVariable write FVariable;


Y leer el valor de la base de datos en el onCreate del Form


function TForm1.GetVariable:double
begin
FVariable:= {leo el valor de la base de datos}
end;


Pero si lo hago asi y cambian el valor de la variable, tengo que almacenar el valor en la base de datos, y esto lo puedo hacer en ese momento o al cerrar el Form, ya que es posible que el usuario recalcule varias veces y con diferentes valores.

En fin, un lío que agradecería me ayudaran a resolver

Un saludo :confused:

Neftali [Germán.Estévez]
27-11-2008, 11:35:49
Si las combinaciones de cálculo van a ser todas, es decir, que el usuario puede colocar 2 propiedades cualquiera y el sistema siempre calcula la tercera, yo centralizaría eso en un procedimiento.

Cargas las tres propiedades al crear el form (o show) y guardalas al cerrarlos, para evitar operaciones innecesarias sobre Base de Datos.

Los GET los haría accediendo directamente al valor de la variable y los SET, con un procedimiento que recalcule. De esta forma cuando el usuario asigna un nuevo valor a una de las propiedades el sistema vuelve a recalcular.

No se si me expliqué bien...

Lepe
27-11-2008, 11:42:19
En realidad sólo necesitas esta linea:
property Variable: double read GetVariable write FVariable;
ahora pulsas CTRL + SHIFT + C (class completion de delphi) que generará todo lo demás.

Igual que estás usando el get, puedes usar el set:

private
Fvari :integer;

properyt Vari:integer read GetVari write SetVari;


y vuelta con el class completion jeje.

Ahora cuando necesites el valor, lo rescatas de la BBDD en GetVari y cuando el usuario le asigna el valor, se ejecuta SetVari y en ese procedimiento es donde lo guardas en la BBDD.

Si te gusta la opción de Neftali, pues get y set lo único que hacen es actualizar el valor de FVariable, después en el FormClose es cuando grabas los valores a la BBDD.

Edito: aquí te falta un pequeño detalle, asignar el result, supongo que será al tiempo de escribir en el foro:

function TForm1.GetVariable:double
begin
FVariable:= {leo el valor de la base de datos}
Result := FVariable;
end;

"Ahora es un lío" después será mecánico ;)

Saludos

PacoPepe
27-11-2008, 14:31:45
Gracias por las respuestas

He estado probando usando la primera opción de las que me dais (usando FVariable), porque prefiero leer lo menos posible de BD, pero ahora el problema me surge porque el usuario modifica los valores de estas variables a través de DBEdit, y por tanto tendría que enlazar el evento onChange de cada variable ( y tengo sobre 40) con SetVariable, por lo que el listado me va a llegar a Pekín.

Un saludo :confused: