FoxPro/Visual FoxPro - FDG

 
Vista:

FDG

Publicado por Fernando (7 intervenciones) el 23/09/2010 06:24:06
Saludos, requiero de su colaboracion con esto..
Tengo una base de datos con dos tablas y lo que requiero hacer es que en la tabla1 me actualice dos campos que estan en la tabla2....
Tabla1
campo1
campo2 actualizado con campo2 de tabla2
campo3 actualizado con campo4 de tabla2
Tabla2
campo1
campo2
campo3
campo4
La inquietud que tengo tambien es que la tabla1 contiene mas de un millon de registros y la tabla2 tien casi 1millon de registros.. Si es recomendable hacer un Update o es preferible hacer una vista con las dos tablas???
Gracias por la colaboracion

tengo este codigo .. pero no hace lo que necesito

if !used('prueba1')
use "c:\convar\data\prueba1" in 6 alias prueba1
endif
select prueba1
if !used('prueba2')
use "c:\convar\data\prueba2" in 7 alias prueba2
endif
select prueba2
UPDATE prueba2 SET tipoc WHERE prueba1.cuenta=PRUEBA2.cuenta
lo que hace este codigo es llenar todos los campos con un unico valor, y si en el codigo uno los campos llave que son cuenta.. no entiendo por que llena con el mismo valor toda la columna y no con cada datos de cada registros
Ejemplo :
Tabla1( Donde estan los datos)
Columna 1| Columna2 | Columna3
Cuenta Identifica Tipo Aprobacion
1010>52635241 f Credito
1020 39258147 f Debito
1030 80258369 m Credito
1040 79369854 m Credito

Tabla2 ( la que quiero actualizar)
Cuenta Tipo Fecha Aprobacion
1010 XX 01/10/2009 Si
1030 XX 25/03/2009 No
1040 XX 01/02/2009 Si
Donde XX es el valor que deseo actualizar osea que en la cuenta 1010 de la tabla 2 me debe poner "f", en la cuenta 1030 me debe colocar "m" y en la cuenta 1040 debe colobar "m"; pero el codigo me pone "f" en todos los campos
Ante todo mil gracias por su colaboracion para hacer esta tarea de mi proyecto de mi trabajo
Fernando
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

Actualizar una tabla de Fox con otra tabla

Publicado por Fernando (7 intervenciones) el 23/09/2010 06:25:28
Saludos, requiero de su colaboracion con esto..
Tengo una base de datos con dos tablas y lo que requiero hacer es que en la tabla1 me actualice dos campos que estan en la tabla2....
Tabla1
campo1
campo2 actualizado con campo2 de tabla2
campo3 actualizado con campo4 de tabla2
Tabla2
campo1
campo2
campo3
campo4
La inquietud que tengo tambien es que la tabla1 contiene mas de un millon de registros y la tabla2 tien casi 1millon de registros.. Si es recomendable hacer un Update o es preferible hacer una vista con las dos tablas???
Gracias por la colaboracion

tengo este codigo .. pero no hace lo que necesito

if !used('prueba1')
use "c:\convar\data\prueba1" in 6 alias prueba1
endif
select prueba1
if !used('prueba2')
use "c:\convar\data\prueba2" in 7 alias prueba2
endif
select prueba2
UPDATE prueba2 SET tipoc WHERE prueba1.cuenta=PRUEBA2.cuenta
lo que hace este codigo es llenar todos los campos con un unico valor, y si en el codigo uno los campos llave que son cuenta.. no entiendo por que llena con el mismo valor toda la columna y no con cada datos de cada registros
Ejemplo :
Tabla1( Donde estan los datos)
Columna 1| Columna2 | Columna3
Cuenta Identifica Tipo Aprobacion
1010>52635241 f Credito
1020 39258147 f Debito
1030 80258369 m Credito
1040 79369854 m Credito

Tabla2 ( la que quiero actualizar)
Cuenta Tipo Fecha Aprobacion
1010 XX 01/10/2009 Si
1030 XX 25/03/2009 No
1040 XX 01/02/2009 Si
Donde XX es el valor que deseo actualizar osea que en la cuenta 1010 de la tabla 2 me debe poner "f", en la cuenta 1030 me debe colocar "m" y en la cuenta 1040 debe colobar "m"; pero el codigo me pone "f" en todos los campos
Ante todo mil gracias por su colaboracion para hacer esta tarea de mi proyecto de mi trabajo
Fernando
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
sin imagen de perfil

RE:Actualizar una tabla de Fox con otra tabla

Publicado por Juanma Cruz (512 intervenciones) el 23/09/2010 10:39:18
¿Hay alguna razón práctica para que TABLA1 tenga una copia redundante del contenido de dos campos de TABLA2?

Porque si la relación es de uno a uno, no le veo mayor sentido.

Bastaría con enlazar cada vez que necesites, mediante una consulta SQL o una vista parametrizada.
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

RE:FDG

Publicado por Edgar Zambrano (31 intervenciones) el 23/09/2010 20:15:21
prueba esto

local _tipo

if !used('prueba1')
use "c:\convar\data\prueba1" in 6 alias prueba1
endif
if !used('prueba2')
use "c:\convar\data\prueba2" in 7 alias prueba2
endif

select prueba1
scan for !eof()
_tipo=prueba1.tipoc
UPDATE prueba2 SET tipoc=_tipo WHERE prueba2.cuenta=PRUEBA1.cuenta
endscan

Thisform.Refresh()

asi te funcionara y obtendras lo que quieres.

"Lo imposible es el fantasma de los timidos y el refugio de los cobardes."
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

Actualizar una tabla de Fox con otra tabla

Publicado por Fernando (7 intervenciones) el 24/09/2010 00:22:54
Edgar, perfecto , me funciono el proceso de la manera mas optima..
pd.. por favor me puede regalar su direccion de correo electronico.. es para tenerlo de contacto y asi mejorar el proyecto que estoy haciendo en mi trabajo

Mil gracias ..

Esta clase de respuestas son las que garantizan el buen funcionamiento de un foro

Fernando Diaz Gonzalez
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

RE:Actualizar una tabla de Fox con otra tabla

Publicado por fernandodg (7 intervenciones) el 24/09/2010 04:51:19
Referente a esto.... este código funciona para cualquier cantidad de registros??

Por ejemplo si la tabla tiene mas de un millón de registros cuanto se demoraria???

o solo funciona de manera optima con pocos registros, lo digo porque la idea es implementarlo en una base de esa magnitud.

gracias por su colaboración
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
sin imagen de perfil

RE:FDG

Publicado por Jose Maria Merchan (10 intervenciones) el 24/09/2010 12:11:21
Hola

la idea de Edgar es bastante correcta. Pero para manejar esos casi 2 millones de registros seria más práctico indexar las dos tablas por el campo CUENTA, recorrer la primera tabla y hacer SEEK en la segunda, bucleando hasta que cambie el campo cuenta en la segunda tabla sin tener que poner la claúsula WHERE en el UPDATE. Si no me equivoco esto rebajaría los tiempos en un porcentaje bastante apreciable. Por favor contestadme si no es así.

Un saludo a todos.

Jose Maria
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
sin imagen de perfil

RE:FDG

Publicado por Juanma Cruz (512 intervenciones) el 24/09/2010 12:39:12
Si ambas tablas están indexadas por el campo CUENTA, la optimización Rushmore debería sacar provecho de ello, incluso usando la sentencia UPDATE (SQL) en vez de la técnica de seek and Replace en bucle.
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
sin imagen de perfil

RE:FDG

Publicado por Jose Maria Merchan (10 intervenciones) el 25/09/2010 13:38:28
Hola Juanma,
no te digo que Rushmore no haga bien su cometido, lo que explico es que si usas indices, lo mas rapido es usarlos. El seek es inmediato y hacer 4 ó 40 skip tampoco es un proceso lento. Poner a prueba el Rushmore cuando lo tienes tan fácil es jugar con fuego sobre 2 millones de registros. El acotamiento con con el seek lo haces tu mismo y no dependes en nada de la conversion interna del comado Sql, esta es mi opinión, pero para gustos los colores, un saludo.

Jose Maria
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