Tengo estas dos funciones que deberían hacer lo mismo pero
una funciona(2) y la otra no(1):
Function funcion1()
Dim tdf As TableDef
Dim campo As Field
Set tdf = CurrentDb.TableDefs!Tabla1
For Each campo In tdf.Fields
Debug.Print campo.Name
Next campo
End Function
Function funcion2() ' Si Funciona
Dim db As Database
Dim tdf As TableDef
Dim campo As Field
Set db = CurrentDb
Set tdf = db.TableDefs!Tabla1
For Each campo In tdf.Fields
Debug.Print campo.Name
Next campo
End Function
La única diferencia es la utilización de la variable db
para guardar el CurrentDb. Imagino que estoy confundiendo
dos conceptos muy básicos pero no sé cuáles.
RESPONDE BUHO
=============
Pues bajo mi humilde opinión es por que CurrentDb es un metodo, no un
objeto. Solo cuando asignas con Set Mibase=CurrentDB, el objeto database es
realmente Mibase.
Es mas...esto lo he leido tambien en la ayuda de Access, tratando del mism tema
sobre Currentdb:
En las versiones anteriores de Microsoft Access, puede que haya
utilizado la sintaxis DBEngine.Workspaces(0).Databases(0) o DBEngine(0)(0)
para devolver un puntero a la base de datos activa. En Microsoft Access 2000
debe utilizar, por el contrario, el método CurrentDb. El método CurrentDb
crea otra instancia de la base de datos activa, mientras que la sintaxis
DBEngine(0)(0) hace referencia a la copia abierta de la base de datos
activa. La utilización del método CurrentDb permite crear más de una
variable del tipo Database que haga referencia a la base de datos activa.
Microsoft Access permite todavía la sintaxis DBEngine(0)(0), pero debe
considerar realizar modificaciones en su código en orden a evitar posibles
conflictos en una base de datos multiusuario.
               (
geocities.com/es/ensolva/Descargas)                   (
geocities.com/es/ensolva)                   (
geocities.com/es)