Ver Mensaje Individual
  #14 (permalink)  
Antiguo 10/10/2005, 02:55
Avatar de 3pies
3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 21 años, 1 mes
Puntos: 144
Una pequeña duda, Myakire, al hilo de este tema, y para no abrir otro...

He conseguido lo que pretendía, efectuando inserts, tal y como me sugeriste. En principio quería hacerlo a través de un recordset añadiendo un nuevo registro (addnew), pero me he encontrado con algo que nunca antes me había sucedido (supongo que porque nunca antes he realizado una operación de este tipo)...

He hecho una comparación de una tabla_1 contra la tabla_destino. Si los registros de la tabla_1 no están en la tabla_destino, los añado. Cierro la tabla_1, pero mantengo abierta la tabla_destino. Abro la tabla_2 y hago lo mismo, comparo si están los registros en la tabla_destino (que permanece abierta), y si no están, los añado.

Hasta aquí, todo correcto, pero el problema que tengo, añadiéndolo vía recordset es este: la tabla_1 y la tabla_2 pueden tener o no registros idénticos. Si añado algún registro desde la tabla_1 a la tabla_destino, cuando hago lo mismo con la tabla_2 hacia esa misma tabla_destino, me encuentro, con que los nuevos registros traspasados desde la tabla_1 no los reconoce como "existentes" en la tabla_destino, de tal forma que los de la tabla_2 me los vuelve a pasar a la tabla_destino. Vamos, es como si solo reconociera los datos existentes inicialmente en la tabla_destino (sobre los que efectúa la comparación la tabla_1). Esto no me ocurre (es decir, funciona correctamente, como debería funcionar), si cierro la tabla_destino una vez añadidos los registros de la tabla_1, y la vuelvo a abrir, cuando añado los registros de la tabla_2. He intentado cambiar el cerrojo (y hasta el cursor), para no tener que cerrar la tabla_destino en cada comparación/traspaso de registros, pero nada, sigue haciendo lo mismo, le ponga lo que le ponga.

Con los inserts no tengo problema, pues todo funciona perfectamente. Solo he intentado hacer una comparación de velocidad entre insert y addnew, para esta operación en concreto (ya sé que normalmente, un insert será más rápido). La verdad es que no lo he comparado, cerrando la tabla_destino y volviéndola a abrir, cada vez que comparo una tabla contra esa donde voy a grabar los datos únicos (no repetidos), es decir, contra esa tabla_destino.

En definitiva, mi duda se centra en el comportamiento de los addnew, cuando no cierro la tabla_destino. ¿Sabes por qué ocurre esto?. Al permanecer abierta la tabla_destino, es como si en cada comparación, solo tomara los datos iniciales (aunque se hayan añadido registros de la tabla_1, la tabla_2 es como si "no los viera" o no existiesen en la tabla_destino, por lo que me los añade también, y entonces me encuentro con que los tengo repetidos).

La verdad es que nunca había tenido la necesidad de hacer varias operaciones de este tipo (comparación-añadir) sobre una misma tabla, por eso nunca había visto este problema. Todo se soluciona cerrando el recordset y volviéndolo a abrir en cada comparación de tabla_X y tabla_destino, pero... ¿por qué no funciona como debería (ni cambiando cerrojos, ni ná de ná), si mantengo la tabla_destino abierta hasta el final de todo el proceso?.

Un millón de gracias.

PD: Perdón por el tocho, y perdón si he sido poco claro en mi explicación.

Última edición por 3pies; 10/10/2005 a las 03:19