FoxPro/Visual FoxPro - ayuda con reemplazo de datos en una base de datos

   
Vista:

ayuda con reemplazo de datos en una base de datos

Publicado por fran (3 intervenciones) el 12/09/2014 00:14:02
hola, tengo un problema para reemplazar datos en una base de datos

lo que quiero es reemplazar en la base de datos todos los registros que contengan un x valor por otro que yo determine

yo hice este bucle en foxbase+ dos


USE X
GO TOP
DO WHILE .NOT. EOF ()
LOCATE FOR XX=1
IF FOUND()
REPLACE N WITH A
REPLACE CC WITH B
REPLACE GG WITH C
REPLACE MM WITH D
PACK
CONTINUE
ENDIF
ENDDO

** no resulta y se tilda en el bucle y nunca sale y no graba
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

ayuda con reemplazo de datos en una base de datos

Publicado por Fidel José (558 intervenciones) el 12/09/2014 01:59:33
No es buena idea anidar un LOCATE / CONTINUE dentro de un Do While. O uno u otro. Si usas do While para correr los registros de una tabla, la mejor fórmula sería
1
2
3
4
5
6
7
DO WHILE talCondiciónVerdadera
        Haga lo que tenga que hacer
        SKIP
        IF EOF()
            EXIT
        ENDIF
ENDDO
En tu caso, colocas DO WHILE !EOF(), pero no pones el comando SKIP, con lo cual la llegada de EOF() se daría solamente si no encuentra lo que está buscando.

Colocar un PACK cuando no has borrado nada, no tiene ningún sentido
Jamás debes colocar un PACK dentro de un bucle Do while. El comando PACK cierra la tabla
REserva PACK para tareas de mantenimiento de tablas. Si son tablas compartidas no se puede utilizar. Funciona solamente en modo exclusivo.

Para el caso que intentas (Tu ejemplo es verdaderamente malo)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
USE X
SELECT X
SCAN FOR XX=1
     REPLACE N WITH "A", CC WITH "B", GG WITH "C"        && y lo que sea
ENDSCAN
 
* Alternativamente puedes hacerlo con DO WHILE (mucho más lento)
DO WHILE !EOF()
        IF XX=1
               REPLACE Tal WITH Cual
       ENDIF
       SKIP
       IF EOF()
             EXIT
       ENDIF
ENDDO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauricio Antonio

ayuda con reemplazo de datos en una base de datos

Publicado por Mauricio Antonio (1367 intervenciones) el 12/09/2014 02:36:34
Intentalo de esta manera:
USE X
SCAN
.........IF XX = 1
............REPLACE N WITH A, CC WITH B, GG WITH C, MM WITH D
........ENDIF
ENDSCAN
Suerte!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar