Problema al reemplazar datos
Publicado por Antonio (55 intervenciones) el 17/11/2007 19:07:42
En el siguiente código pretendo reemplazar cAntiguo por cNuevo en todos los registros usando el índice del campo (N_OT) que contiene la información a reemplazar:
USE MovAlma NEW
SET INDEX TO MovAlma, MovAlmaA, MovAlmaB, MovAlmaC, MovAlmaD, MovAlmaE
GO TOP
SEEK cAntiguo
IF FOUND()
GO TOP
WHILE !EOF()
IF N_OT==cAntiguo
REPLA N_OT WITH cNuevo
ENDIF
SKIP
ENDDO
COMMIT
ENDIF
CLOSE INDEX
CLOSE DATABASES
Sin embargo solo reemplaza 1 de los 10 registros que existen con N_OT = cAntiguo. El índice esta bien, ya que al margen de haberlo borrado y creado de nuevo, he probado con código hacer:
SET FILTER TO N_OT=cAntiguo
COUNT TO nReg
? nReg //Resultado 10
Sin embargo si para reemplazar utilizo cualquier otro índice, incluso la propia base de datos con SET ORDER TO X, si reemplaza los 10 registros:
USE MovAlma NEW
SET INDEX TO MovAlma, MovAlmaA, MovAlmaB, MovAlmaC, MovAlmaD, MovAlmaE
GO TOP
SEEK cAntiguo
IF FOUND()
SET ORDER TO 0
GO TOP
WHILE !EOF()
IF N_OT==cAntiguo
REPLA N_OT WITH cNuevo
ENDIF
SKIP
ENDDO
COMMIT
ENDIF
CLOSE INDEX
CLOSE DATABASES
¿Alguien sabe porque solo me sustituye un registro de los diez que hay utilizando el índice del campo que contiene los diez registros que he de reemplazar?
USE MovAlma NEW
SET INDEX TO MovAlma, MovAlmaA, MovAlmaB, MovAlmaC, MovAlmaD, MovAlmaE
GO TOP
SEEK cAntiguo
IF FOUND()
GO TOP
WHILE !EOF()
IF N_OT==cAntiguo
REPLA N_OT WITH cNuevo
ENDIF
SKIP
ENDDO
COMMIT
ENDIF
CLOSE INDEX
CLOSE DATABASES
Sin embargo solo reemplaza 1 de los 10 registros que existen con N_OT = cAntiguo. El índice esta bien, ya que al margen de haberlo borrado y creado de nuevo, he probado con código hacer:
SET FILTER TO N_OT=cAntiguo
COUNT TO nReg
? nReg //Resultado 10
Sin embargo si para reemplazar utilizo cualquier otro índice, incluso la propia base de datos con SET ORDER TO X, si reemplaza los 10 registros:
USE MovAlma NEW
SET INDEX TO MovAlma, MovAlmaA, MovAlmaB, MovAlmaC, MovAlmaD, MovAlmaE
GO TOP
SEEK cAntiguo
IF FOUND()
SET ORDER TO 0
GO TOP
WHILE !EOF()
IF N_OT==cAntiguo
REPLA N_OT WITH cNuevo
ENDIF
SKIP
ENDDO
COMMIT
ENDIF
CLOSE INDEX
CLOSE DATABASES
¿Alguien sabe porque solo me sustituye un registro de los diez que hay utilizando el índice del campo que contiene los diez registros que he de reemplazar?
Valora esta pregunta


0