Manera adecuada de hacer cálculos con un cursor

Buenas tardes Expertos.

Mi pregunta es: Estaba usando un cursor para sacar datos en un select de dos tablas. Ahora necesito hacer unos cálculos con ese cursor para hacer un reporte y desearía saber como hago eso.

según yo quiero crear un nuevo cursor e ir agregando los nuevos campos que vaya calculando.: ejemplo

tengo un cursor cursor1 con campo1, campo2, campo3, campo4, campo5

y quiero tener un nuevo cursor cursor2 con campo1, campo2, ( campo2 * campo3), (campo4 - campo5), y un campo resultado que es (campo2 - campo3) multiplicado por (campo4 - campo5)

algo parecido, ahora pienso hacer un scan del cursor1 y ahí ir agregando los campos calculados en un cursor2 ya creado con todos los campos necesarios.

Espero que me hayan comprendido, espero que me puedan ayudar gracias

1 respuesta

Respuesta
1

Espero poder ayudarte! :) En el INIT de tu form, debes definir el cursor en donde almacenaras los cálculos. Así

CREATE CURSOR cursor2(campo1 N(12,2), campo2 N(12,2), campo3 N(12,2))

Le agregas el numero de campos que necesitas... primero el nombre del campo "campo1", dejas un espacio... y definís el tipo de datos para el campo (N = numérico, C= carácter, D = FECHA... y así) y luego definís la extensión del campo. Si es numérico... yo le dejo una extensión de 12 caracteres y decimales 2) (12,2) Ves!

Luego, vas al evento en donde realizas el calculo (el click de un botón, por ejemplo) y haces algo así

LOCAL ln1, ln2, ln3

SELECT cursor1

GO TOP

SCAN

ln1 = cursor1.campo2 - cursor1.campo3

ln2 = cursor1.campo4 - cursor1.campo5

ln3 = ROUND(ln1 * ln2, 2)

**--Round es una función que te permite redonear una cifra al numero de decimales que desees. Pones la cifra, una coma y el numero de decimales devueltos que quieres

SELECT cursor2

INSERT INTO cursor2(campo1) VALUES(ln3)

ENDSCAN

Proba y me avisas! :)

Lo he probado y funciona muy bien gracias..

aunque en vez de usar

INSERT INTO cursor2(campo1) VALUES(ln3) use el replace. pero me ayudo todo lo explicado gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas