Delphi - Multiplicación

 
Vista:

Multiplicación

Publicado por Castillo (23 intervenciones) el 24/03/2004 22:17:38
Hola quisiera que alguien me pudiera decir como hago esto:
Quiero multiplicar una columna de un dbgrid por un número x que tengo en otro lado, y almacenarlo en otra columna del dbgrid. La información que tengo en el dbgrid la obtengo de una tabla, y tengo una columna vacía (del campo que estoy calculando). Intenté hacerlo con campos calculados y obtuve el resultado, pero no puedo almacenarlo en una tabla, he estado buscando y parece que no se puede... Ojalá alguien me pueda ayudar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Multiplicación

Publicado por Delfino (1216 intervenciones) el 24/03/2004 23:04:22
Claro q se puede, pero en este caso no tienes q crear campos calculados, tienen q ser campos normales y tu les vas actualizando a mano, lo haces o bien en el evento BeforePost del dataset o bien en el evento OnUpadateData del datasource..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiplicación

Publicado por Fer (269 intervenciones) el 25/03/2004 09:43:32
Vamos a ver, alma de Dios.

Si necesitas que el resultado de la multiplicación se vea en la pantalla, un campo calculado puede ser una buena solución.

Si además necesitas almacenarlo, como bien dices, la tabla debe tener una columna donde poder hacerlo.

Ahora se plantean dos posibilidades:

1) Utilizas el campo calculado porque quieres que la información aparezca "viva" en la pantalla y utilizas el evento BeforePost del DataSet para transferir el valor del campo calculado al campo físico.

2) Si no necesitas el campo calculado porque no te importa que el dato no se refresque en la pantalla, simplemente utilizas el método BeforePost para hacer tus cálculos y guardar el resultado.

No creo que sea tan complicado, ¿no?.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias, pero

Publicado por Castillo (23 intervenciones) el 26/03/2004 02:43:54
Si, efectivamente deseo que cada cambio se vea en la pantalla inmediatamente, y lo manejé con campos calculados y me funcionó, pero no sé como asignar el valor a un campo que tengo en mi tabla para que se almacene.... PLease ayúdenme
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Gracias, pero

Publicado por Fer (269 intervenciones) el 26/03/2004 09:13:25
En el evento BeforePost:

TuDataSet.FieldByName('Nombre_del_campo_físico').AsCurrency := TuDataSet.FieldByName('Nombre_del_campo_calculado').AsCurrency;

Ojo he puesto "AsCurrency" por poner algo, tendrás que hacer referencia a la propiedad adecuada al tipo de tu campo (AsInteger, AsFloat, etc.).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias, pero

Publicado por Castillo (23 intervenciones) el 26/03/2004 02:45:26
Si, efectivamente deseo que cada cambio se vea en la pantalla inmediatamente, y lo manejé con campos calculados y me funcionó, pero no sé como asignar el valor a un campo que tengo en mi tabla para que se almacene utilizando el evento BeforePost del DataSet ... PLease ayúdenme, que le pongo???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Gracias, pero

Publicado por Ing Francisco Arena (140 intervenciones) el 26/03/2004 15:52:34
Aparentemente, tienes el problema solucionado para mostrar el campo calculado. Ahora si quieres almacenar los valores en la tabla, tendras que usar un consulta SQL.

UPDATE MiTabla SET CampoResultante = CampoConElValor * CampoConElOtroValor

Si no sabes SQL, crea un procedimiento como el que sigue

Tabla.First;
while not Tabla.EOF do
begin
Tabla.Edit;
Tabla.FieldBYName('CampoResultante').AsFloat:= Tabla.FieldBYName('CampoConElValor').AsFloat * Tabla.FieldBYName('CampoConElOtroValor').AsFloat ;
Tabla.Post;
Tabla.Next;
end;

Por supuesto, es altamente recomendado el primer método.
Saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar