Sumar total horas de un cursor

Como les va expertos, tengo una duda con un cursor

Tengo una tabla con un listado de horas paralizadas y esta tabla esta identificada con el código de producto. Lo que deseo es totalizar todas las horas según su código, osea ir sumando todas las horas que sean del código 1, luego sumo todas las del código 2 y sacar un cursor con esa lista.

luego este cursor comparar con otro cursor e ir asociando dependiendo del código, es eso posible.

si no fui tan claro me avisan y les mando el código y diagramas de las tablas, se que ustedes me pueden ayudar gracias

1 respuesta

Respuesta
1

Espero poder ayudarte. Supongamos que la tabla donde quieres hacer la suma se llama tabla1 y el campo horas! En el INIT de tu form, coloca esto:

CREATE CURSOR mycur1(código N(8), total N(8,2))

En el control donde realizas la accion:

LOCAL lncodigoproducto, lntotal

SELECT DISCTINCT (codigoproducto) FROM tabla1 INTO CURSOR temp1

SELECT temp1

GO TOP

SCAN

lncodigoproducto = temp1.código

SELECT tabla1

CALCULATE SUM(tabla1.horas) FOR tabla1.codigoproducto = lncodigoproducto TO lntotal

INSERT INTO mycur1(código, total) VALUES(lncodigoproducto, lntotal)

RELEASE lntotal

ENDSCAN

SELECT mycur1

GO TOP

BROWSE

Proba y me avisas! :)

gracias por la respuesta pero probé usando un

select sum(tabla.campo) from tabla group by tabla.código into cursor temp

y luego solo trabajo con el cursor temp, esta bien hacer así o no, escuche que la tabla puede bloquearse para otros usuarios del sistema o no.

Depende! Je je! Puede ser que si... y puede ser que no! Depende de como configures las propiedades de la tabla, el buffering, la sesión!

Podes hacer dos cosas...

en el init de tu form coloca

SET MULTILOCKS ON

CURSORSETPROP("Buffering", 5, "tabla")

Podes leer aquí

http://msdn.microsoft.com/es-es/library/cc467043(v=vs.71).aspx

Anda a la pestaña DATA de las propiedades del FORM y busca BufferMode y colócale en Optimistic. DATESESION comfigurala en 2 optimistic

Así te evitaras muchos dolores de cabeza.

Lo que podes hacer es crear un cursor de la tabla y trabajar en base a dicho cursor para las operaciones de suma y resta y otras.

EN el init de tu form coloca esto

LOCAL ARRAY aStruct(1) && Define una variable tipo ARRAY
=AFIELDS(aStruct, "tabla1") && Crea un Array con la estructura de tu tabla original
CREATE CURSOR temptabla1 FROM ARRAY aStruct && Crea el Cursor con la Estructura de tu tabla
**--Volcamos la tabla en el cursor y cargamos
SELECT temptabla1
APPEND FROM DBF("tabla1")

**--Para ver el cursor temptabla1 cargado con la misma estructura de la tabla (campos) y los datos de dicha tabla

SELECT temptabla1

BROWSE

Y listo. Ya tenes un cursor exactamente igual a la tabla física (dbf) solo que en memoria! Ahí podes trabajar de forma idéntica a como si estuvieras en la tabla. Los campos del cursor son los mismo de la tabla, así que cuando hagas referencia... en lugar de

select sum(tabla1.campo)

haces

SELECT SUM(temptabla1.campo)

Ves! :)

Gracias por toda tu ayuda, sabes que recién comencé a programar y hay cosas que aun no comprendo y con tus explicaciones he comprendido bastante.

De nuevo gracias por tu ayuda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas