¿Qué sentencia puedo utilizar para borrar registros de una tabla con Visual Fox Pro?

¿Podrías por favor ayudarme? Tengo una tabla que guarda datos de facturación de los clientes y necesito filtrarla para hacer un sorteo con la gente que este al día, es decir necesito verificar que todas las cuotas se hayan pagado, ya que si una no esta al día, el usuario automáticamente queda afuera, el problema es que no encuentro una manera eficiente para borrar los registros, por ejemplo uno de los filtros es por fecha de cobro, si esta vacía, significa que no pago, por lo tanto debo eliminar todos los registros de este usuario(datan desde marzo de 2008, es decir, ¿son muchos registros por cliente) que sentencia puedo utilizar para borrarlos de una manera Rápida y eficiente?

1 respuesta

Respuesta
1
Yo creo que deberías necesariamente hacer un proceso para primero sacar el primer filtro que seria buscar las fechas de cobro en blanco y luego en base al código de cliente eliminar todos los registros y para hacer todo esto usar instrucciones sql
Justamente es eso lo que hago, pero no logro que los borre a todos, da la impresion que no recorre por completo alguno de los cursores
esta es para seleccionar los registros con fecha de cobro en blanco
SELECT poblacion,abonado from sinfiltrar WHERE (EMPTY(fec_cobro)) INTO CURSOR sinfiltrar1 READWRITE
y este es para eliminar del primer cursor todos los registros que pertenezcan al que tiene la fecha en blanco
DELETE FOR (sinfiltrar.poblacion=sinfiltrar1.poblacion) WHILE (sinfiltrar.abonado=sinfiltrar1.abonado) IN sinfiltrar
lo intente de varias formas pero siguen quedando varios registros en blanco, podrias ayudarme??
¿Vamos por parte primero dime el select te esta devolviendo todas las fechas de cobro en blanco? Confírmalo poniendo un browse después del select para ver el resultado de la consulta ah y el readwrite creo que esta de más igual ese cursor solo te servirá de consulta, verifica eso y luego vemos el segundo query
Si, por lo que pude controlar, selecciona todos los registros con fecha de cobro en blanco. Son 118548 reg
Ya ok, ¿ahora dime algo dentro de dicha tabla tienes registros duplicados? ¿Osea un abonado tiene diferentes fechas de cobro? Porque si no es así lo que podrías hacer es después del select hacer un scan de tu cursor sinfiltrar1 y dentro del scan harías más o menos lo siguiente :
select sinfiltrar1
scan
ncodigo=abonado
delete from sinfiltrar where abonado = ncodigo and empty(fec_cobro)
select sinfiltrar1
Endscan
Creo yo que con eso podría solucionarse tu problema o al menos ahí iríamos resolviendo tu problema
Si un abonado puede tener varias, ya que es uno por bimestre... algunas pueden estar pagadas y otras con la fecha vacía, pero al tener al menos una fecha de cobro vacía, hay que borrar todos los registros de este abonado (es decir aun cuando alguna este pagada), muchas gracias por tu ayuda y prontas respuestas!
Ah en ese caso en el delete quítale la ultima condición así te eliminara todos los registros solo en base al abonado, cualquier duda me la haces conocer
Gracias! Al parecer funciona porque abajo me indica que esta borrando registros, el problema es que esta muy lento, facial hace más de 5 minutos que está con eso... ¿qué podría hacer para optimizarlo? Saludos!
Mmm lastimosamente creo que no hay otra manera creo yo ademas es debido a la gran cantidad de registros que maneja esa tabla, lo que podrías hacer es correr ese proceso en una maquina con buenas características

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas