Actuliazar datos

**** Bueno este procedimiento me funciona pero no del todo, yo quiero filtrar la informacion por fechas y guardarla en una tabla con la cual hago un reporte, pero durante el procedimiento me filtra bien pero a la hora de guardar la informacion solo me guarda un dato aunque hayan 3 o mas datos a la hora de filtar.
aqui esta el procedimiento.
********************************************////temppagos es donde guardo lo que filtro-.
set exclusive on
USE C:\controlalumnos\temppagos IN 0 AGAIN
delete all
CLOSE TABLES all
set exclusive on
USE C:\controlalumnos\temppagos IN 0 AGAIN
pack
close table all
set exclusive on
USE C:\controlalumnos\temppagos IN 0 AGAIN
go top
SCATTER MEMVAR BLANK MEMO
append blank
close table all
*********////////***PROCEDIMIENTO PARA LIMPIAR SIEMPRE MI TABLA PARA REPORTES
USE C:\controlalumnos\dbf\alumnos IN 0 AGAIN
USE C:\controlalumnos\dbf\pagos IN 0 AGAIN
use c:\controlalumnos\rangofecha in 0 again
use c:\controlalumnos\temppagos in 0 again
update pagos set fecha1 = rangofecha.f1
update pagos set fecha2 = rangofecha.f2
*************///ABRE LAS TABLAS QUE SE VAN A USAR
PUBLIC contador as Integer
PUBLIC i as Integer
contador = 0
********VARIABLES
SET EXCLUSIVE ON
USE C:\controlalumnos\dbf\pagos IN 0 AGAIn
SELECT boleta, count(boleta) as registro FROM pagos,rangofecha WHERE fecha between f1 AND f2 GROUP BY boleta;
into CURSOR regis
i = regis.registro
******////LA IDEA CON ESTE PROCEDIMIENTO ES FILTRAR POR FECHA MI TABLA DE PAGOS Y SACAR CUANTOS REGISTROS HAY Y GUARDARLOS EN MI VARIABLE i y eso lo hace bien-
*****************************
select nombrep,monto,fecha,boleta from pagos,rangofecha where fecha between f1 and f2;
into cursor pag
*****************INFORMACION OBTENIDA POR LA TABLA PAGOS Y GUARDADA EN UNA TEMPORAL LLAMDA PAG
SELECT telefono1,telefono2,telefono3,status FROM alumnos,rangofecha,pagos WHERE fecha between f1 AND f2;
into CURSOR alum
********************INFORMACION OBTENIDA POR LA TABLA ALUMNOS Y GUARDADA EN UNA TEMPORAL LLAMADA ALUM
FOR contador = contador TO i
*****//////LA IDEA CON ESTE FOR ES QUE PASE LAS VECES O EL NUMERO DE REGISTROS QUE TENGA LA TABLA Y LOS VAYA INSERTANDO A LA TABLA FISICA DE DONDE SACO MI REPORTE pero es DONDE INSERTA MAL Y SOLO ME INSERTA UNO DATO EL NUMERO DE VECES QUE TENGO EL REGISTRO.
INSERT INTO temppagos (nombre,monto,fecha,boleta) VALUES (pag.nombrep,pag.monto,pag.fecha, pag.boleta)
SKIP
UPDATE temppagos SET telefono1 = alum.telefono1 WHERE temppagos.boleta = pag.boleta
UPDATE temppagos SET telefono2 = alum.telefono2 WHERE temppagos.boleta = pag.boleta
UPDATE temppagos SET telefono3 = alum.telefono3 WHERE temppagos.boleta = pag.boleta
UPDATE temppagos SET status = alum.status WHERE temppagos.nombre = pag.boleta
***************inseta datos de pagos
endfor
****************finaliza el for de pagos
*REPORT FORM c:\controlalumnos\informes\temppagos2.frx ALL ENVIRONMENT preview NOEJECT NOCONSOLE TO PRINTER RANGE 1,999
thisform.check5.value = 0
thisform.salir.setfocus
///********** BUENO ESPERO ME PUEDAS AYUDAR Y CORREGIRME EN DONDE ESTOY FALLANDO GRACIAS.

1 Respuesta

Respuesta
1
Estuve mirando un poco tu código y veo que el problema esta en el FOR, recorres el FOR desde contador = 0 hasta i pero al insertar los registros en la tabla temppagos al primero lo va a insertar bien, y al resto de los registros los va a repetir y eso se debe a que tanto el cursor pag y el cursor alum en todo el FOR siguen en el primer registro, lo que tendrías que hacer es ir recorriendo esos cursores con un skip, pero ahí también esta el problema, porque lo que no se es si tienen la misma cantidad de registros los 2 cursores, y como se relacionana entre si para que puedas actualizar bien los teléfonos.
Pienso que lo mejor sería hacer una consulta donde estén incluidos los datos: nombre, monto, fecha, boleta, telefono1, telefono2, telefono3, status.
Para poder armar esa consulta me tendrías que pasar las estructuras de las tablas: alumnos, pagos, rangofecha y como se relacionan estas tablas entre si, a través de que campo o campos claves.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas