FoxPro/Visual FoxPro - Remplazar texto en base de datos

   
Vista:

Remplazar texto en base de datos

Publicado por Gustavo (2 intervenciones) el 01/07/2012 19:27:18
Buenos dias, integrantes del foro. Soy un novato en base de datos, tengo la necesidad de cambiar unos datos, para lo cual descargue Microsoft visual basic foxpro 9 sp1, abri la tabla (o no se cual seal el nombre correcto en programacion) llamada Mgw10010, en la cual existen diversas columnas y filas (o no se cual seal el nombre correcto en programacion). Cocretamente lo que quiero realizar es si en el columna llamada Cidprodu01 tiene el valor cierto valor numerico me anote en la columna Cidunidad determnado valor nimerico lo que se ve facil pero para mi es un problema muy grande. Puedo hacermo campo por campo pero son como 30,000 registros.

En resumen lo que quiero es algo similar a esto

Cidprodu01 tiene el valor 1 me anote en la columna Cidunidad 4
Cidprodu01 tiene el valor 2 me anote en la columna Cidunidad 1,
Cidprodu01 tiene el valor 3 me anote en la columna Cidunidad 5,
Cidprodu01 tiene el valor 4 me anote en la columna Cidunidad 4,
Cidprodu01 tiene el valor 6 me anote en la columna Cidunidad 4,
Cidprodu01 tiene el valor 12 me anote en la columna Cidunidad 1,
Cidprodu01 tiene el valor 24 me anote en la columna Cidunidad 3,
Cidprodu01 tiene el valor 50 me anote en la columna Cidunidad 2,


Y asi sucesivamente, en la Columna Cidprodu01 solo existen valores numericos del 1 al 191.


Y la otra pregunta, si existe una formula, donde la inserto (menu) para que me lo ejecute automaticamente.


Saludos y gracias por su atencion prestada al presente
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

Remplazar texto en base de datos

Publicado por Gustavo (2 intervenciones) el 01/07/2012 19:28:57
Ah se me olvido anexar una imagen para mayor comprension

http://sdrv.ms/N5oNwr
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

Remplazar texto en base de datos

Publicado por Mauricio (1367 intervenciones) el 01/07/2012 21:56:20
CLOSE TABLE ALL
USE mgw100 IN 0
SELE mgw10010
SCAN
.......IF CidProdu01 = 1
...........REPLACE cidunidad = 4
......ENDIF
*--
.......IF CidProdu01 = 2
...........REPLACE cidunidad = 1
......ENDIF
ENDSCAN
*-------------
Y asi sucesivamente hasta 191...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
Imágen de perfil de Mauricio

Remplazar texto en base de datos

Publicado por Mauricio (1367 intervenciones) el 01/07/2012 23:38:21
CLOSE TABLE ALL
USE mgw100 IN 0
SELE mgw10010
SCAN
.......IF CidProdu01 = 1
...........REPLACE cidunidad WITH 4
......ENDIF
*--
.......IF CidProdu01 = 2
...........REPLACE cidunidad WITH 1
......ENDIF
ENDSCAN
*-------------
Y asi sucesivamente hasta 191...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

Remplazar texto en base de datos

Publicado por Gustavo (1 intervención) el 02/07/2012 23:59:11
Gracias por la respuesta
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

Remplazar texto en base de datos

Publicado por Juan Manuel Cruz juanmcruz@hotmail.com (508 intervenciones) el 09/07/2012 11:59:04
No nos has dicho si existe una relación lógica entre la comparación de CIDPRODU01 y el resultado que debe anotarse en CIDUNIDAD. De haberlo hecho, podrías establecer una tabla auxiliar de comparación, para autumatizar el proceso.

También puedes hacer un programita, como los colegas te han sugerido.

Si quieres una solución en una sola línea, utiliza la función ICASE

Select Mgw10010
replace all CidUnidad with ICASE( Cidprodu01=1, 4,;
Cidprodu01=2, 1,;
Cidprodu01=3, 5,;
0)
(Y así sucesivamente, siempre a pares y dejando el utlimo argumento, impar, para el ELSE)

Como sea, creo que lo mejor sería tener una tabla comparativa. La llamaré TABLAAUX con dos columnas, VALOR con los valores del 1 al 191, y RETORNO con el valor que debe retornar para cada caso.

select TablaAux
Index on valor tag iValor

Select Mgw10010
Scan
if seek( "Mgw10010.CidProdu01", "Tablaaux", "iValor")
replace Cidunidad with TablaAux.retorno
endif
EndScan
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