Copiar registros de una tabla auxiliar a otra

Como estas.
Tengo lo siguiente tengo un cursor que exactamente igual a una tabla maestra lo que hago con el cursor es traer los datos de esa tabla maestra para no trabajar directamente sobre la misma.
Resulta que al cursor yo le voy agregando nuevos regisrtos que luego hay que grabar en la tabla maestra. Pero quiero guardar unicamente los registros que agregue en el cursor o sea que no me guarde en la tabla principal los registros que traje de la tabla principal solo los nuevos para evitar la duplicación de los datos en la tabla maestra.
ejemplo: tabla maesrta: nombre, apellido, dni-- cursor: c_nombre, c_apellido, c_dni

1 respuesta

Respuesta
1
Esto es relativamente fácil y depende de que tengas identificada una clave (formada por uno o varios campos) en tu tabla principal.
La teoría es la siguiente:
Digamos que tu clave principal es el campo c_dni, el cual no se repite (es decir no hay dos registros con el mismo c_dni) en toda la tabla. Supongamos que la tabla principal tiene 2 millones de registros y tu cursor sólo traiga 20 registros. Este cursor lo muestras digamos en un grid, donde el usuario modifica/agrega registros.
Cuando el usuario da clic en guardar para actualizar los datos en la tabla principal, debes controlar dos cosas: la modificación, el agregar nuevos registros.
1. Debes recorrer el cursor con un ciclo y por cada registro que encuentres (20 para este ejemplo) debes agarrar la clave principal y buscar esta clave en la tabla principal.
2. Si la clave principal existe, es probable que debas actualizar cada campo (replace), porque quizás el usuario ha hecho modificaciones sobre los campos de ese registro. Por lo que sólo debes buscar la clave y hacer un replace de los demás campos de la tabla principal.
3. Si la clave no existe (no vino con el cursor) se debe agregar este registro (append blank) a la tabla principal.
Esos escenarios los completarás a través a través de la clave principal.
En la práctica y a manera de ejemplo:
1.
select * from tablamaestra into cursor MyTablaMaestra
thisform.grid1.recordsource='MyTablaMaestra"
Con esto genero el cursor y lo guardo en un grid.
2.
Para el botón guardar:
local lnClave as string
select MyTablaMaestra
do while not eof()
   lnClave=MyTablaMaestra.c_dni
   select TablaMaestra
   seek (lnClave)
   if found()
     *.*Si existe la clave, modifico los campos
     replace nombre with MyTablaMaestra.nombre
     replace apellido with MyTablaMaestra.apellido
   else
     *.*Si no existe la clave, agrego el registro
     append blank
     replace nombre with MyTablaMaestra.nombre
     replace apellido with MyTablaMaestra.apellido
   endif
   select
   MyTablaMaestra
   Skip
Enddo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas