Necesito ayuda para conectar dos tablas independientes usando el programa Visual FoxPro

Hola a todos, mi pregunta es tengo una tabla que se llama alumnos, puedo hacerle back up, que no tengo problema, pero ya teniendo la otra base de datos en la ubicación de back up, como puedo hacer que cuando la importe a su ubicación original no me sustitiya el archivo, sino solo se agreguen los registros no duplicados a la tabla alumnos que ya tengo en mi ubicación, prácticamente seria como para actualizar datos, ya que tengo una cede aquí en la capital y otra en un departamento y la idea es que los del departamento me manden su table y yo aquí la integre con la que tengo instalada aquí en la capital pero que no se sustituya sino se agreguen losregistros no duplicados, jiji estaba viendo por ahí el append from pero no se como usarlo bien ya probé y no me sale, espero me puedan ayudar gracias.

1 Respuesta

Respuesta
1
Una pregunta esos registros solo los quieres agregar o también quieres actualizar los que se hayan modificado y que ya tienes en tu tabla de Bs. As.
De acuerdo a tu respuesta te paso alguna solución a tu problema.
GRacias por contestar rapido, pues seria perfecto que actualizara los datos que se hayan modificado, espero me puedas ayudar,
Te cuento que hice una pequeña rutina que abre 2 bases de datos que se encuentran almacenadas en distintas carpetas, luego abro las tablas alumnos de las 2 bases de datos, a cada tabla le agrego un alias para poder identificarlas en la rutina. Las 2 tablas tienen la misma estructura.
Luego creo un cursor que contendrá los registros nuevos que se encuentran en la base de datos del backup y que no se encuentran en la base de datos de capital, para hacer esto tuve en cuenta que la tabla alumnos tiene como campo clave tanto el documento como el sexo del alumno, en el caso que no tengas estos campos como claves, vas a tener que cambiar la consulta SQL, precisamente donde dice:
SELECT * FROM ALUMNOS_LEER ;
WHERE ALLTRIM(STR(DOCUMENTO))+ALLTRIM(SEXO) NOT IN ;
(SELECT ALLTRIM(STR(DOCUMENTO))+ALLTRIM(SEXO) FROM ALUMNOS_ACTUALIZAR) ;
INTO CURSOR TEMPORAL
vas a tener que cambiar por:
SELECT * FROM ALUMNOS_LEER ;
WHERE campo_clave NOT IN ;
(SELECT campo_clave FROM ALUMNOS_ACTUALIZAR) ;
INTO CURSOR TEMPORAL
Bueno, ahora si te paso la rutina, lo mejor que podes hacer es copiarla tal cual como esta y la pegas en un prg, luego le cambias la ruta que puse por la ruta donde se encuentra cada una de las bases de datos tuyas, también tendrás que cambiar los nombres de las bases de datos por los que vos tienes y también los nombres de las tablas en el caso que no se llamen así. Los alias los podes dejar como están.
La rutina tiene comentarios en cada linea para explicarte que hago:
&& Cierro las bases de datos abiertas
CLOSE DATA ALL
&& Abro la base de datos donde se van a copiar los datos
OPEN DATABASE c:\a\baseorigen.dbc SHARED
&& Abro la base de datos donde voy a leer los datos
OPEN DATABASE c:\a\backup\basebackup.dbc SHARED NOUPDATE
&& Abro la tabla alumnos donde se van a copiar los datos, a la tabla la abro con un alias
USE BASEORIGEN!ALUMNOS ALIAS ALUMNOS_ACTUALIZAR IN 0
&& Abro la tabla donde voy a leer los datos, a la tabla la abro con un alias
USE BASEBACKUP!ALUMNOS ALIAS ALUMNOS_LEER IN 0
&& Creo un cursor llamado TEMPORAL que contedrá los registros que existen en la tabla
&& con alias ALUMNOS_LEER y que no se encuentran en la tabla con alias ALUMNOS_ACTUALIZAR
&& teniendo en cuenta que tanto el DOCUMENTO como el SEXO son campos claves (clave combinada)
SELECT * FROM ALUMNOS_LEER ;
WHERE ALLTRIM(STR(DOCUMENTO))+ALLTRIM(SEXO) NOT IN ;
(SELECT ALLTRIM(STR(DOCUMENTO))+ALLTRIM(SEXO) FROM ALUMNOS_ACTUALIZAR) ;
INTO CURSOR TEMPORAL
&& Cuento la cantidad de registros que se van a anexar
SELE TEMPORAL
A = 0
COUNT TO A
&& Pregunto si se quieren anexar los registros
RESPUESTA = MESSAGEBOX("Se van a anexar " + alltrim(str(A)) + " registros." + CHR(13) + "¿Desea continuar?",(4+32+0),"Atención")
&& Pregunto si la respuesta fue SI, anexo los registros
IF (RESPUESTA = 6)
&& Agrego los registros del cursor llamado TEMPORAL a la tabla ALUMNOS_ACTUALIZAR
SELE ALUMNOS_ACTUALIZAR
&& Uso la función DBF para indicar que los datos se van a anexar desde un cursor
APPEND FROM DBF("TEMPORAL")
MESSAGEBOX("Se anexaron " + alltrim(str(A)) + " registros a la tabla Alumnos.",(64+0+0),"Informe")
ENDIF
&& Cierro el cursor llamado TEMPORAL
Se le temporal
USE
&& Cierro las bases de datos
Close data all

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas