1) Para que podamos utilizar el metodo Seek en un objeto Recordset, éste debe ser del tipo Table. 2) Para poder utilizar el método FindFirst, el recordset debe ser del tipo dbopendynaset o dbopensnapshot (Ver en la ayuda DAO de VBA de Access la diferencia entre ambos) 3) Si MItabla, es una tabla vinculada a la base actual que corre el codigo, la siguiente apertura: Dim Rst As Dao.Recordset Set Rst=Currentdb.OpenRecordset("Mitabla") (Ojo ver punto 5) establece explicitamente Rst como recordset tipo Dynaset Con lo cual, si hago este tipo de aperturas, no podré aplicar Seek a este recordset (ver punto 1) pero si podré utilizar FindFirst Sin embargo, aunque Mitabla sea vinculada, si abro el recordset de esta otra forma: Dim Rst As Dao.Recordset Set Rst=Currentdb.OpenRecordset("Select * From Mitabla") el recordset se abre del tipo dynaset con lo cual SI podría trabajar con el método FindFirts La solucion a la utilizacion del metodo Seek en tablas vinculadas, sería abrir el recordset de Mitabla, no desde la propia MDB que corre el codigo, si no a través del metodo OpenDatabase: Public Function OpenForSeek(TableName As String) As Recordset ' Assume MS-ACCESS table Set OpenForSeek = DBEngine.Workspaces(0).OpenDatabase _ (Mid(CurrentDb().TableDefs(TableName).Connect, _ 11), False, False, "").OpenRecordset(TableName, _ dbOpenTable) End Function Extraido de: http://www.mvps.org/access/tables/tbl0006.htm En este caso, para usar esta funcion: Dim rst as Recordset set rst=OpenForSeek("TableName") y ya podriamos usar expresiones del tipo rst.Seek y rst.Index en la tabla linkada 4) Para utilizar los metodos Find, en concreto el FindFirst ya hemos dicho que el objeto recordset debe ser del tipo dbopendynaset o dbopensnapshot 5) Ojo a esto. Si Mitabla es una tabla local de la Mdb y abro el recordset de esta forma: Dim Rst As Dao.Recordset Set Rst=Currentdb.OpenRecordset("Mitabla") el recordset se abre del tipo Table Resumen de esto, que es importante Dim Rst As Dao.Recordset Set Rst=Currentdb.OpenRecordset("Mitabla") ¿De qué tipo es este Recordset? Depende: Si MiTabla es local, será del tipo Table (Tipo 1) ->Si puedo Seek, no puedo FindFirts Si Mitabla es Vinculada, será del tipo Dynaset (Tipo 2) ->Si puedo FindFirts, no puedo Seek 6) Sea Mitabla una tabla local Dim Rst As Dao.Recordset Set Rst=Currentdb.OpenRecordset("Mitabla") abre el recordset del tipo Table -> Puedo utilizar Seek, pero no FindFirts Dim Rst As Dao.Recordset Set Rst=Currentdb.OpenRecordset("Select * FROM Mitabla") abre el recordset tipo dynaset, es decir puedo utilizar FindFirts y no puedo utilizar Seek 7) Mas sobre tablas vinculadas: Si MItabla es vinculada y yo deseo modificar su estructura, por ejemplo con DDL (ALTER TABLE) o bien mediante métodos Dao/Ado no puedo hacerlo directamente tratando a Mitabla, como si fuera una tabla local. Copio lo que puse en las News recientemente: Imaginate que UnaTablabis está en B y Vinculada en A Este codigo corre en A Dim StrSql As String StrSql = "ALTER TABLE Unatablabis " _ & "ALTER COLUMN Id COUNTER(35,1)" DoCmd.RunSQL StrSql ! Este codigo anterior produce ERROR ! ... Sin embargo Dim BaseLejana As DAO.Database Set BaseLejana = OpenDatabase(CurrentProject.Path & "\B.mdb") BaseLejana.Execute StrSql !Perfecto!..se modifica la tabla 8) Anadir mas cosas que puedan ser interesantes y que nos eviten caer en errores... 9) Me sigue quedando la duda, al margen de todo lo hablado aquí sobre el tipo del Recordset devuelto, de qué forma es mas efectiva a efectos de rapidez a la hora de abrir y sobre todo recorrer un recordset DAO de una tabla Dim Rst As Dao.Recordset Set Rst=Currentdb.OpenRecordset("Mitabla") ó Dim Rst As Dao.Recordset Set Rst=Currentdb.OpenRecordset("Select * FROM Mitabla")