Reemplazar texto en base de datos

1,284 views
Skip to first unread message

Manuel

unread,
Jul 1, 2012, 1:35:58 PM7/1/12
to publice...@googlegroups.com
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).
Concretamente lo que quiero realizar es si en el columna llamada Cidprodu01  tiene el valor cierto valor numerico  me anote en la columna Cidunidad determinado valor numerico 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.

Anexo imagen para una mayor comprension
 

Saludos y gracias por su atencion prestada al presente


 

Fox Learner

unread,
Jul 1, 2012, 3:08:49 PM7/1/12
to publice...@googlegroups.com
Hola! No te entendí muy bien. Si lo que necesitas es ingresar datos en una columna solo hay que teclearlos manualmente o crear un formulario y programar los controles para que hagan las "altas" en la "columna" que deseas.

Ahora bien, si lo que deseas es que en base a un valor de una "columna"  (o campo) se inserte un valor en otra, tienes varias opciones.

Una de las mas comunes sería esta:

* Crea una rutina .PRG tecleando modi comm mirutina.prg en la ventana de comandos.
* En la ventana que aparece teclea

USE Mitabla IN 0
Select Mitabla

SCAN
REPLACE Cidunidad WITH "valor"
* o puedes crear la condicion para que se efectue el reemplazo

ENDSCAN

Consulta el archivo de ayuda de Fox para las condiciones IF, CASE y los bucles SCAN, WHILE, FOR.

Saludos!


CAC Grupo Centrosoft - Carlos A. Coronel - Cúcuta /Colombia

unread,
Jul 1, 2012, 3:09:19 PM7/1/12
to publice...@googlegroups.com
hola puedes hacer lo siguente... en la ventana de comandos digitas lo siguiente:

REPLACE  Cidunidad WITH 4 FOR Cidprodu01=1 ALL
REPLACE  Cidunidad WITH 1 FOR Cidprodu01=2 ALL 
REPLACE  Cidunidad  WITH 5 FOR Cidprodu01=3 ALL 
REPLACE  Cidunidad  WITH 4 FOR Cidprodu01=4 ALL 
REPLACE  Cidunidad  WITH 4 FOR Cidprodu01=6 ALL 
REPLACE  Cidunidad  WITH 1 FOR Cidprodu01=12 ALL 
REPLACE  Cidunidad  WITH 3 FOR Cidprodu01=24 ALL  
REPLACE  Cidunidad  WITH 2 FOR Cidprodu01=50 ALL

debes continuar con todos los demas... espero te sirva! 

Roberto Lemos

unread,
Jul 2, 2012, 1:10:12 PM7/2/12
to publice...@googlegroups.com
Tu sentencia esta mal si pones ALL el FOR no lo toma, reemplaza todo
 
Saludos
 
Roberto Lemos

Jairo

unread,
Jul 2, 2012, 1:46:45 PM7/2/12
to publice...@googlegroups.com

El commando es asi:

 

REPLACE ALL Cidunidad WITH 4 FOR Cidprodu01 = 1

 

JM

Roberto Lemos

unread,
Jul 2, 2012, 2:19:54 PM7/2/12
to publice...@googlegroups.com
El ALL es reiterativo, si estas usando un condición FOR, el ALL esta demás
 
REPLACE Cidunidad WITH 4 FOR Cidprodu01 = 1
 
Saludos
 
Roberto Lemos

Luis Maria Guayan

unread,
Jul 2, 2012, 2:28:10 PM7/2/12
to publice...@googlegroups.com
No es así, el alcance del REPLACE es ALL para todos los registros, pero solo los que cumplan la condición FOR

Es correcto escribir REPLACE ALL Cidunidad WITH 4 FOR Cidprodu01 = 1

Quizás no sea lo mas optimo para lo que se busca, pero eso es otro tema

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Jairo

unread,
Jul 2, 2012, 2:30:35 PM7/2/12
to publice...@googlegroups.com

Claro, claro tienes razón, sería como una redundancia.. en el comando  

Luis Maria Guayan

unread,
Jul 2, 2012, 2:37:43 PM7/2/12
to publice...@googlegroups.com
No es redundante,

ALL, NEXT n, REST es el alcance o rango de registros

FOR es la condicón que se debe cumplir

Ej:
REPLACE ALL Atrasado WITH .T. FOR DATE() > FechaVencimiento


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Roberto Lemos

unread,
Jul 2, 2012, 2:42:48 PM7/2/12
to publice...@googlegroups.com
De cualquier forma si pongo esto
 
REPLACE Cidunidad WITH 4 FOR Cidprodu01 = 1
 
cumple la misma función y me parece más lógico
Reemplazar los registros que cumplen la condición.
 
Saludos
 
Roberto Lemos

Luis Maria Guayan

unread,
Jul 2, 2012, 2:52:05 PM7/2/12
to publice...@googlegroups.com
En este caso cumple para ALL, pero si el alcance fuera NEXT 50 ó REST no es lo mismo.

GO TOP
REPLACE NEXT 10 Cidunidad WITH 4 FOR Cidprodu01 = 1

En este caso se reemplazaran solo los SIGUIENTES 10 REGISTROS desde el tope de la tabla

Personalmente y como una forma de programación defensiva, recomiendo utilizar la sentencia completa, en este caso también se debería incluir la tabla donde se hará el REPLACE:

REPLACE ALL Cidunidad WITH 4 FOR Cidprodu01 = 1 IN MiTabla


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Roberto Lemos

unread,
Jul 2, 2012, 3:02:12 PM7/2/12
to publice...@googlegroups.com
Tienes razón Luis Maria, si el alcance fuera de 10 o 100 registros si es necesario el Next o Rest, según el caso, creo que el caso planteado no se específico el alcance, por tanto si se obvia el ALL, se asume que son todos los registros que cumplen la condición.
 
Particularmente lo uso así, pero acepto tu recomendación.

Jairo

unread,
Jul 2, 2012, 3:51:36 PM7/2/12
to publice...@googlegroups.com

Y la clausula UPDATE , se dice que tiene un mejor alcance ya que define en su estructura la tabla a la cual se quiere hace referencia..

 

UPDATE MiTabla;

        SET MiTabla. Cidprodu01 =  4 ;       

                     WHERE MiTabla.Cidprodu01 = 1  

 

 

JM

Manuel

unread,
Jul 2, 2012, 6:17:56 PM7/2/12
to publice...@googlegroups.com

Gracias, me has ahorrado muchas horas de trabajo.

Abusando de tu confianza, existira una sentencia donde pueda incluir mas de un valor incluido en la columna Cidprodu01. Una condicioanante si en la columna Cidprodu01 existen valores 1 , y/o 4, y/o 6, reemplzar en ciudunidad 4.
 
En lugar de ir de una en una como en en el ejemplo inicial, realizarlo en una sola sentencia.
 

Cidprodu01  tiene el valor 1  me anote en la columna Cidunidad 4

Cidprodu01  tiene el valor 4  me anote en la columna Cidunidad 4


Cidprodu01  tiene el valor 6  me anote en la columna Cidunidad 4

REPLACE  Cidunidad WITH 4 FOR Cidprodu01=1 ALL

REPLACE  Cidunidad  WITH 4 FOR Cidprodu01=4 ALL

REPLACE  Cidunidad  WITH 4 FOR Cidprodu01=6 ALL


Posdata: En la discusion del tema que si es mejor utilzar esto, o que el otro no opino por que n verdad no trengo ni la menor idea de lo que comentan. Saludos a todos por su ayuda.

Miguel Canchas

unread,
Jul 2, 2012, 6:23:05 PM7/2/12
to publice...@googlegroups.com

REPLACE  Cidunidad WITH 4 FOR INLIST(Cidprodu01, 1,4,6) ALL

 

 

Pruebalo, RECUERDA SIEMPRE SACAR UNA COPIA POR SI LA CAG@S....

 

 

MK

Manuel

unread,
Jul 3, 2012, 7:08:21 PM7/3/12
to publice...@googlegroups.com

Gracias muchas gracias a todos (as) por su ayuda
Reply all
Reply to author
Forward
0 new messages