FoxPro/Visual FoxPro - replace

   
Vista:

replace

Publicado por Nataly (1 intervención) el 03/10/2011 02:49:20
ayuda .... tengo dos tablas y necesito pasar registros de la tabla A a la tabla B, pero el problema es que ambos tienen diferentes nombres de campos pero los tipos si coinciden me refiero al tipo char, num y fecha, como haria para pasar un grupo de registros me ayudan gracias
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

replace

Publicado por santiago (376 intervenciones) el 03/10/2011 03:51:00
**Hola, hazlo asi:

sele 1
use tabla A
sele 2
use tabla B

sele 1
do while .t.
var1 = campo1A
var2 = campo2A
var3 = campo3A
sele 2
append blank
repl campo1B with var1
repl campo2B with var2
repl campo3B with var3
sele 1
skip
if eof()
exit
endif
enddo

**Santiago
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

replace

Publicado por Juan Manuel Cruz juanmcruz@hotmail.com (508 intervenciones) el 03/10/2011 10:43:45
Use TablaA in 0
Use TablaB in 0

Insert into TablaB (Campo1B, Campo2B, Campo3B) select Campo1A, Campo2A, Campo3A from TablaA



-------------------------------------------------------------
Y eso es todo.


Respecto al método anteriormente sugerido, tres cosas, con la mejor intención del mundo:

* ¿Por qué te preocupas de elegir el área donde se abrirá la DBF? Deja que el USE IN 0 lo resuelva por tí.

* El uso de DO WHILE .T. / SKIP / IF EOF() puede perfectamente ser reemplazado por un bucle SCAN / ENDSCAN con la ventaja que en cada pase, el SCAN recuerda cual era la tabla original a la que se refería y la selecciona de nuevo.

* Si decides seguir con ese esquema de REPLACE, podrías haber dicho

Repl Campo1B with TablaA.Campo1A

y no tener que declarar variables innecesarias en memoria.

Saludos.
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

replace

Publicado por santiago (376 intervenciones) el 04/10/2011 00:55:56
Hola Juan manuel, efectivamente hay ventajas en el codigo que propones, pero no es para todas las versiones de foxpro, como veras, Nataly no ha mencionado la version que esta utlizando, la vieja escuela (mi codigo) funciona desde foxbase hasta vsual fox 9, por otro lado si las tablas son enormes (1 millon de registros a mas), veras que el metodo antiguo demora menos que la segunda propuesta (insert into).

En todo caso se puede optimizar el codigo dependiendo de el caso especifico que se este viendo, gracias por el aporte, no habia pensado en un SCAN, probare a ver que velocidad tiene en tablas grandes.

Santiago.
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

replace

Publicado por Juan Manuel Cruz juanmcruz@hotmail.com (508 intervenciones) el 04/10/2011 14:02:17
Tienes razón en que el código propuesto funciona para cualquier versión.

Yo soy partidario de sacar el mayor provecho posible a las particularidades de cada versión, máxime cuando se trata de sintaxis estándar, como en el caso de SQL.

Discrepo en lo del bucle manual. Una instrucción SQL siempre será más rápida, incluso sin optimizar índices.
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