Esto empezó con una serie de pruebas de velocidad.... trataba de ver si era mas rápido trabajar con tablas adjuntas, o con tablas declaradas con cláusula IN.... Las pruebas las hago con dos PC’s en red, ambos en XP-PRO, el fichero sobre el que trabajo tiene 135.000 registros y la prueba que hago es cambiar un el valor de un campo seleccionando por un índice -sin indice es dramático, los tiempos se multiplican por 4, por 5- .... (para ser exactos el precio de las cuatro líneas de un albaran). Hago la prueba con un recordset y con SQL... El proceso lo realizo cien veces para que ‘de tiempo’.... en ambos casos los tiempos son tomados con otro recordset abierto –la tabla tonta- Este es el código que utilizo..... 1.- TABLA ADJUNTA For i = 1 To 1000 Set Mitabla = CurrentDb.OpenRecordset("SELECT * FROM [Historico albaranes lineas] WHERE Numero_hlalb = 15") Do Until Mitabla.EOF Mitabla.Edit Mitabla!Importe_hlalb = 33 Mitabla.Update Mitabla.MoveNext Loop Mitabla.Close Next I For i = 1 To 100 CurrentDb.Execute "UPDATE [Historico albaranes lineas] SET Importe_hlalb = 33 WHERE Numero_hlalb = 15" Next I 2.- CLAUSULA IN (sin tablas adjuntas) For i = 1 To 100 Set Mitabla = CurrentDb.OpenRecordset("SELECT * FROM [Historico albaranes lineas] IN '\\Pcuno\Tecsys\Somat-bd.mdb' WHERE Numero_hlalb = 15") Do Until Mitabla.EOF Mitabla.Edit Mitabla!Importe_hlalb = 33 Mitabla.Update Mitabla.MoveNext Loop Mitabla.Close Next I For i = 1 To 100 CurrentDb.Execute "UPDATE [Historico albaranes lineas] IN '\\Pcuno\Tecsys\Somat-bd.mdb' SET Importe_hlalb = 33 WHERE Numero_hlalb = 15" Next I Los tiempos fueron de 3 segundos tanto con recordset como con SQL en ambas modalidades...... es decir ambos sistemas son equivalentes,.... La ‘sorpresa’ vino después, cuando probé con una database externa declarada de la siguiente forma.... Set ExDatabase = DBEngine.Workspaces(0).OpenDatabase("\\Pcuno\Tecsys\Somat-bd .mdb") For i = 1 To 1000 Set Mitabla = ExDatabase.OpenRecordset("SELECT * FROM [Historico albaranes lineas] WHERE Numero_hlalb = 15") Do Until Mitabla.EOF Mitabla.Edit Mitabla!Importe_hlalb = 33 Mitabla.Update Mitabla.MoveNext Loop Mitabla.Close Next I For i = 1 To 1000 ExDatabase.Execute "UPDATE [Historico albaranes lineas] SET Importe_hlalb = 33 WHERE Numero_hlalb = 15" Next I Remarco las diferencias en azul, con el procedimiento seguido con tabla adjunta... Tuvo que subir el número de bucles a 1.000, porque si no, no podía tomar tiempos.... En base adjunta 1000 bucles tardaban 27 segundos..... y con Database externa 1.88, es decir una relación de más de 14:1. Después de unas cuantas pruebas me decidí por ir implantando en mis clientes este sistema, ya tengo un par de aplicaciones completamente ‘desconectadas’, la ganancia en tiempo es más que notoria y no me ha generado problemas de casques o cuelgues... Lo que hago es en el inicio de la aplicación, donde identifico al usuario, quito barras de menús, borro tablas auxiliares de otras ejecuciones, lanzo un menú oculto, que antes tenia la tabla tonta,... ahora tiene la base externa,... la ruta la guardo en una propiedad de la base de datos... como veréis en el propio código esta la función para meter la password en el caso de que la tenga... esta va en una variable del front-end.... como es compilada el usuario no llega fácilmente a ella, (tened en cuenta que mis requerimientos de seguridad no son muy altos). En la aplicación adjunta va un formulario, listas / combos, como realizar cambios con SQL y con ADO, como simular un Dlookup (las funciones de dominio hay que creárselas a pelo), el subformulario de clientes es una aportación de mister MiDio... asias.. los informes esta claro que funcionan igual.... espero que os sea útil.... y espero vuestras sugerencias.... Bajarse Ejemplo de: http://www.mvp-access.com/mihura/fich/MdbDesconectada.zip