REPLACE no REEMPLAZA.

771 views
Skip to first unread message

Jorge Rubinich

unread,
Apr 6, 2017, 8:45:42 AM4/6/17
to Comunidad de Visual Foxpro en Español
Buenos días, estimados..

Les comento un problema que me ha estado complicado la vida últimamente.-
Estoy usando VFP 9  SP 2.- y mis clientes tienen instalado o bien el VFP completo o bien el RUNTIME de VFP SP2.-

Y me pasa que de repente algo que funcionaba correctamente deja de funcionar.
Concretamente los REPLACE dejan de REEMPLAZAR
Ejemplo..
  REPLACE clientes.nombre   WITH "Juan"
y haciendo debug resulta que inmediatamente después de ejecutar esta línea, clientes.nombre sigue con su antiguo valor.
Hasta ahora cada vez que salta un error de este tipo, después de días y días de darle vuelta lo he terminado solucionando cambiando a

 SELECT Clientes
 REPLACE clientes.nombre   WITH "Juan"
Asi, haciendo un SELECT de la tabla antes del REPLACE funciona bien.. pero supuestamente haciendo referencia a la tabla en el REPLACE ya era suficiente..


El problema creo que comienza siempre luego de una re compilación, así que no descarto que algún cambio que hago lo provoque. Además de que la falla se produce tanto en modo interpretado como en el exe.

A alguien le ha pasado algo similar?
 

Soporte

unread,
Apr 6, 2017, 8:53:39 AM4/6/17
to Comunidad de Visual Foxpro en Español
Hola,
si, asi es, la manera mas segura es hacer un select al area de trabajo antes de hacer el replace

Saludos

Patricio Muñoz

unread,
Apr 6, 2017, 8:59:27 AM4/6/17
to publice...@googlegroups.com
no, no me ha pasado, pero si me ha pasado que en algunos cursores, cuando hago el replace y luego tengo que volver a crear dicho cursor me sale un error que dice que el cursor tiene registros no confirmado, y lo solucione agregando despues del replace el comando tableupdate(.T.)

Bendiciones
--
Patricio Muñoz
Pro&Tech
Analista en Sistemas

Jorge Bernardo Morales Hernandez

unread,
Apr 6, 2017, 10:31:40 AM4/6/17
to Comunidad de Visual Foxpro en Español
Precisamente me pasó hace algunos días algo similar, ejecutaba un Replace, y luego ejecutaba un Select (SQL) de esa tabla, pero no me mostraba el cambio realizado con el Replace, luego de quebrarme la cabeza por un par de días, probé colocar un Unlock justo una línea después del Replace y asunto arreglado.  No se si aplica a tu caso, pero te comento como yo pude resolver el mio.

Mauricio Gonzalez

unread,
Apr 6, 2017, 12:08:19 PM4/6/17
to Comunidad de Visual Foxpro en Español
me parece que el error proviene del hecho que no siempre estas en cliente, prueba de esta manera
 REPLACE clientes.nombre   WITH "Juan" IN cliente

Luis Maria Guayan

unread,
Apr 6, 2017, 1:15:51 PM4/6/17
to publice...@googlegroups.com

Como consejo te diría que leeas sobre el tema "programación defensiva"

En este caso debes escribir tu sentencia

REPLACE Nombre   WITH "Juan" IN Clientes


Luis María Guayán
Tucumán, Argentina
_______________________________
Comunidad Visual FoxPro en Español
http://comunidadvfp.blogspot.com

Edwin Duran

unread,
Apr 6, 2017, 2:13:11 PM4/6/17
to Comunidad de Visual Foxpro en Español
Recuerdo que aun amigo le pasaba esto con las redes inalámbricas, hace un tiempo me paso algo parecido y era el antivirus Avast.

Armando Rodríguez B.

unread,
Apr 6, 2017, 6:07:52 PM4/6/17
to publice...@googlegroups.com

Y si cambias a "update tabla set campo = valor where condición"

Saludos.

Luis Salazar

unread,
Apr 6, 2017, 8:41:14 PM4/6/17
to publice...@googlegroups.com
Estoy utilizando el Update con excelentes resultados ya que  a veces me pasaba algo similar 

Arnaldo Toledano

unread,
Apr 7, 2017, 10:01:42 AM4/7/17
to publice...@googlegroups.com

Patricio.
Me ha pasado lo mismo.
Pero no tiene lógica el TABLEUPDATE(),
No es para las tablas esto ???

Arnaldo Toledano

Jorge Rubinich

unread,
Apr 7, 2017, 6:23:39 PM4/7/17
to Comunidad de Visual Foxpro en Español
Para mi   REPLACE clientes.Nombre   era completamente equivalente a   REPLACE nombre .. IN Cliente..
Y lo hubiera discutido a muerte..jaja..

Pero Mauricio Gonzales y Luis Maria Guyan tienen toda la razón..



NoteNote

If the IN clause is omitted, no replacement occurs if the record pointer is at the end of the file in the current work area and you specify a field in another work área.


(Traducido:
NOTA:  Si  omite la clausula IN, no habrá reemplazo si el puntero esta en el fin de la tabla en el área corriente y usted especifica un campo en OTRA área.-)

Asi que, amigos, a usar el IN...   todos los días se aprende algo nuevo... y mas con el zorro!!

Gracias a todos
Jorge Rubinich.-

 
Reply all
Reply to author
Forward
0 new messages