Actualizar una Tabla1 en base a otra Tabla 2

La idea es actualizar la Tabla1 que tiene los siguientes campos:
Articulo, Marca, Grupo, Fecha1, Fecha2 y la Tabla2 con los siguientes campos:
Articulo, Marca, Grupo, Fecha1X, Fecha2X
La idea es:
Hacer un update de la tabla1 solo si :
Tabla1.fecha1>Tabla2.fecha1x and Tabla1.fecha1<Tabla2.Fecha2x ademas que
Tabla1.articulo=Tabla2.articulo and
Tabla1.marca=Tabla2.marca and
Tabla1.grupo=Tabla2.grupo
Probé con un scan para la tabla1 y un select para ubicar en la tabla2 y es muy lento
por favor si me puedes dar una manito
Respuesta
1
bueno lo ideal seria que cada regsitro tenga un codigo unico asi comparas solo el codigo unico y no tenes que estar comparadon el articulo la marca y el grupo, pero pero como ya tenes la tabla asi lo que creo mejor seria buscar en la tabla1 cada regsitro de la tabla2 y modificarlo si comple con las condiciones de fecha. Por ahi podes probar algo asi
sele tabla1
set order to articulo && en realidad ordenas por tu indice unico no se cual sera
sele tabla2
go top
do while !eof()
   Se le tabla1
   Seek tabla2. Articulo && o el campo por el que indexas
if tabla1.articulo=tabla2. Articulo and Tabla1. Fecha1>Tabla2. Fecha1x and Tabla1. Fecha1<Tabla2. Fecha2x
repla talba1... with tabla2... && aca reemplazas los campos que queres actualizar
endif
sele tabla2
skip
enddo
de esta forma actualizas los campos de la tabla1 con los datos de la tabla2 siempre que cumplan con la condicion del if...
Tarda de acuerdo con la cantidad de registros que tenga la tabla2. No se bien cuanto serán o cada cuanto tienes que acutalizar yo uso algo así para actualizar el stock de un tabla con productos, tiene unos 20.000 registros y no tarda nada en hacerlo, no se si sera tu caso. Espero te sirva esto si no es así ya vemos la forma de hacer más rápida la acualizacion. Suerte
¿Una pregunta el Scan que utilizo es más lento que el while?
¿Y otra consulta más hay manera de pasarle como parámetros valores en un update? ¿En visual foxpro 6.0?
Por ejemplo
Update Tabla1
set Tabla1.Fecha1=:Parametro1,Tabla1.fecha2=Parametro2
where Tabla1.fecha1>:Parametro1 and Tabla1.fecha1<Parmetro2 ademas que
Tabla1.articulo=:XArticulo and
Tabla1.marca=:Xmarca and
Tabla1.grupo=:Xgrupo
donde Paramtro son valores de la tabla 2 y los X.... tambien son valores de la tabla 2 este update iria dentro de tu while como podria hacer eso?
El scan recorre la tabla y va preguntando en cada registro si corresponde la condición y efectúa el comando, entonces si vos tienes la tabla1 con 100 registros y la tabla2 con 10, por cada registro de la tabla2 pasa una vez completa la tabla1 preguntando entonces vas a recorrer 10 veces la tabla1 entera, 1 para cada registro de la tabla2, ahora el si utilizas el while contenido en el scan, lo que hace es mientras sea la condición correcta hace el comando, esto es muy buenoen el caso que vos tengas varios registros (ordenados) que tengas que cambiar, por ejemplo si cambias todos lod de un grupo determinado, ahí te srve mucho porque sabes que te paras en el primero que corresponde al grupo y te vas moviendo hasta que no corresponda pero como están todos ordenados están todos juntos. Pero me parece que ninguno de estos es tu caso, el while que te pase es solo para moverte por la tabla2, lo que hace el código es buscar con un seek el registro que sea igual en la tabla1 al de la tabla2. El update, no se si le podes pasar parámetros es más usado cuando tienes que cambiar muchos registros con el mismo valor, es muy bueno ahí, después yo siempre use el código que te pase. Voy a investigar un poco para ver si se puede el update usar como vos lo necesitas,... ¿tarda mucho en actualizar los datos el código que te envíe?
Bueno tarda un poquito, pero ya encontré la manera de hacer un update con parámetros, muchas gracias
A ver como es...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas