Emilio, vete viendo el codigo con calma....
si ves que se te produce algun tipo de error,dimelo
para corregirlo.


Aqui empezamos con posibles funciones y Sub que deberías añadir a la MDB
que mandes para actualizar (Tipo de la que te he enviado por correo personal)

Sub CopiarReportesAccess(RutaDestinoReportes As String, NombreReporte As String)
 DoCmd.CopyObject RutaDestinoReportes, NombreReporte, acReport, NombreReporte
 Exit Sub
End Sub
Sub CopiarModulos(RutaDestinoModulos As String, NombreModulo As String)
 DoCmd.CopyObject RutaDestinoModulos, NombreModulo, acModule, NombreModulo
 Exit Sub
End Sub
Sub CopiarTablas(RutaDestinoTablas As String, NombreTabla As String)
 DoCmd.CopyObject RutaDestinoTablas, NombreTabla, acTable, NombreTabla
 Exit Sub
End Sub

Si te das cuenta el CopyObject puede desarrollar este tipo de copias
Sería conveniente que te leyeras la ayuda de Access para que vieras alguna limitacion
que tiene en el caso de las tablas.

Logicamente todos los objetos, en este caso que te interesa, las tablas, que desees
copiar al modulo de Datos, debes incluirlas en esta MDB de actualizacion que corre el codigo.

Tienes la posibilidad de copiar las tablas tambien mediante una clausula Sql:

Dim BaseOri As Database
Dim NomBaseDes As String
NomBaseDes = "c:\CarpetaDatos\Datos.mdb"
Set BaseOri = CurrentDb
'Copia la tabla Clientes a la base destino de Datos
BaseOri.Execute "SELECT Clientes.* INTO Clientes IN '" & NomBaseDes & "' FROM Clientes;"
BaseOri.Close

Cualquiera de los dos metodos puede ser valido.
No obstante, Emilio, te recuerdo que en concreto con la Clausula SQL menconada anteriormente
no se copian todas las propiedades de la Tabla, o eso por lo menos tengo entendido.

El metodo bueno, para mí, sería el siguiente:
OJO que es muy largo....pero en realidad es el completo
y es bastante intructivo:

===============INICIO DEL CODIGO========================

'Proposito.
'Yo tengo una MDb situada en C:\TwPAc\Datos.mdb
'y deseo incorporar nuevas tablas a dicha MDB. ¿Como  lo hago?
'Creo una MDB (Esta donde corre este codigo) e incorporo en esta
'Mdb todas las tablas, datos, relaciones, indices etc que deseo
'Volcar en C:\TwPAc\Datos.mdb
'Esto viene muy bien como modelo de 'actualizacion' de programas.
'Yo tengo un programa que utiliza X tablas y deseo incorporar tablas
'nuevas necesarias para que corra la nueva version del programa.
'Este codigo esta probado y funcionando de forma real en mis
'aplicaciones de ACTUALIZACION de determinados programas.
'BHUO AGOSTO DE 2002




'La llamada a estas funciones se realizan desde un boton de
'comando de un formulario residente en esta base de datos, o sea, la
'misma donde se jecuta este codigo:
'Desde un formulario:
 Dim Origen As String
 Dim Destino As String
 Dim DondeEstamos As CurrentProject
 NumerodeTablas = 0
 MsgBox "Este puede ser un proceso largo.", vbExclamation + vbOKOnly, "COMENZAR"
  Set DondeEstamos = Application.CurrentProject
  Origen = DondeEstamos.FullName
  ' Esto que hemos hecho en las tres líneas anteriores es para
  ' averiguar donde está la ruta de esta MDB/MDE de actualización
  ' pues el usuario la ha podido depositar donde quiera
  Destino = "C:\TWPAC\DATOS.MDB"
  'La anterior linea es la mDB donde queremos copiar las tablas
  'incoporadas a esta MDB
  DoCmd.Hourglass True
  CopiaTablas Origen, Destino
  DoCmd.Hourglass False
  MsgBox "Proceso de incorporación de nuevas Tablas Concluido." & Chr(13) & _
  "Se han incorporado " & NumerodeTablas & " Tablas nuevas a su base de datos", vbInformation + vbOKOnly, "Fin del Proceso."
 
Option Compare Database
Option Explicit
'***************************************************************
'        (C) Francisco García Aguado, Junio de 2002            *
'                        Utiliza DAO                           *
'Este módulo es exclusivo para COPIAR TABLAS NUEVAS CON DATOS  *
'en el módulo de Servicio.                                     *
'Las nuevas tablas deberán  estar  grabadas  en esta MDB / MDE *
'de actualización                                              *
'***************************************************************


Sub CopiaTablas(strSourceFile As String, strDestFile As String)
     
     Dim dbsSRC As Database, dbsDest As Database
        
     On Error GoTo errExists
    
     Set dbsSRC = DBEngine.Workspaces(0).OpenDatabase(strSourceFile)
     Set dbsDest = DBEngine.Workspaces(0).OpenDatabase(strDestFile)
     On Error GoTo 0

     CopyTables dbsSRC, dbsDest 'Copio tablas y estructura, excepto las del Sistema
     CopyQueries dbsSRC, dbsDest 'Copio posibles consultas de Seleccion
     CopyData dbsSRC, dbsDest    'Copio Datos, si les hubiera
     CopyRelationships dbsSRC, dbsDest 'Copio las relaciones entre estas tablas, si las hubiera
     dbsDest.Close
     dbsSRC.Close
     Exit Sub
errExists:
     If Err = 3204 Then
          MsgBox "No se ha podido concluir el proceso."
     Else
          MsgBox "Error: " & Error$, vbCritical + vbOKOnly, "AVISO DE ERROR"
     End If
     Exit Sub
End Sub


Sub CopyData(dbsSRC As Database, dbsDest As Database)
    Dim tbfSrc As TableDef, rstDest As Recordset, rstSrc As Recordset
    Dim wspTransact As Workspace
    Dim fldSrc As Field
   
    Set wspTransact = DBEngine.Workspaces(0)
    wspTransact.BeginTrans
    On Error GoTo errRollback
    For Each tbfSrc In dbsSRC.TableDefs
      If (tbfSrc.Attributes And dbSystemObject) Or _
        (tbfSrc.Connect <> "") Then
               ' Evito copiar Tablas del Sistema
        Else
            Set rstSrc = dbsSRC.OpenRecordset(tbfSrc.Name, dbOpenTable, _
                dbForwardOnly)
            If Not rstSrc.EOF Then
                Set rstDest = dbsDest.OpenRecordset(tbfSrc.Name, _
                    dbOpenDynaset, dbAppendOnly)
                Do While Not rstSrc.EOF
                     rstDest.AddNew
                     For Each fldSrc In rstSrc.Fields
                          rstDest(fldSrc.Name) = fldSrc.Value
                     Next
                         rstDest.Update
                         rstSrc.MoveNext
                    Loop
                    rstDest.Close
               End If
               rstSrc.Close
          End If
     Next
     wspTransact.CommitTrans
     Exit Sub
errRollback:
     MsgBox "Error:" & Error$
     wspTransact.Rollback
     Exit Sub

End Sub

Sub CopyFields(objSrc As Object, objDest As Object)
    Dim fldSrc As Field, fldDest As Field
    
    For Each fldSrc In objSrc.Fields
         If TypeName(objDest) = "TableDef" Then
              Set fldDest = objDest.CreateField(fldSrc.Name, fldSrc.Type, _
               fldSrc.Size)
         Else
              Set fldDest = objDest.CreateField(fldSrc.Name)
         End If
         CopyProperties fldSrc, fldDest
         objDest.Fields.Append fldDest
    Next
    Exit Sub

End Sub

Sub CopyQueries(dbSrc As Database, dbDest As Database)
    
     Dim qrySrc As QueryDef, qryDest As QueryDef
     For Each qrySrc In dbSrc.QueryDefs
          Set qryDest = dbDest.CreateQueryDef(qrySrc.Name, qrySrc.Sql)
          CopyProperties qrySrc, qryDest
     Next

End Sub


Sub CopyRelationships(dbsSRC As Database, dbsDest As Database)
     
     Dim relSrc As Relation, relDest As Relation
     For Each relSrc In dbsSRC.Relations
     Set relDest = dbsDest.CreateRelation("C" & relSrc.Name, _
        relSrc.Table, relSrc.ForeignTable, relSrc.Attributes)
          CopyFields relSrc, relDest
          dbsDest.Relations.Append relDest
     Next

End Sub
Sub CopyTables(dbsSRC As Database, dbsDest As Database)
    ' Esta rutina ya hace efectiva la incorporacion de las nuevas
    ' Tablas que acompañan a esta actualizacion, hacia el módulo
    ' de servicio.
    Dim tbfSrc As TableDef, tbfDest As TableDef
    Dim IntBuscar As String
    On Error GoTo ControlERROR
    For Each tbfSrc In dbsSRC.TableDefs
         If (tbfSrc.Attributes And dbSystemObject) Then
         Else
            Set tbfDest = dbsDest.CreateTableDef(tbfSrc.Name, _
                tbfSrc.Attributes, tbfSrc.SourceTableName, tbfSrc.Connect)
            If tbfSrc.Connect = "" Then
                CopyFields tbfSrc, tbfDest
                CopyIndexes tbfSrc.Indexes, tbfDest
            End If
            CopyProperties tbfSrc, tbfDest
            NumerodeTablas = NumerodeTablas + 1
            dbsDest.TableDefs.Append tbfDest
         End If
        
    Next
    On Error GoTo 0
    Exit Sub
ControlERROR:
    MsgBox "La Tabla: " & UCase(tbfSrc.Name) & " ya existe en su Base de Datos." & Chr(13) & _
    "Se cancela su copia y se continua con el proceso...", vbInformation + vbOKOnly, "PULSE ACEPTAR PARA CONTINUAR TRABAJANDO"
    NumerodeTablas = NumerodeTablas - 1
    Resume Next
    
End Sub

Sub CopyIndexes(idxsSrc As Indexes, objDest As Object)
 
     Dim idxSrc As Index, idxDest As Index, propSrc As Property
     For Each idxSrc In idxsSrc
          Set idxDest = objDest.CreateIndex(idxSrc.Name)
          CopyProperties idxSrc, idxDest
          CopyFields idxSrc, idxDest
          objDest.Indexes.Append idxDest
     Next

End Sub

Sub CopyProperties(objSrc As Object, objDest As Object)
     Dim prpProp As Property, temp As Variant
     On Error GoTo errCopyProperties
     For Each prpProp In objSrc.Properties
          objDest.Properties(prpProp.Name) = prpProp.Value
     Next
     On Error GoTo 0
     Exit Sub
errCopyProperties:
     Resume Next

End Sub

'************************************************************************************
'************************************************************************************
'En este proceso lo que hemos hecho ha sido copiar las TABLAS
'que acompañan a esta base de Actualización, en el módulo de servicio
'que en el caso del ejemplo es C:\TWPAC\DATOS.MDB
'
'************************************************************************************
'************************************************************************************
Function Errores(NumeroError As Double, Formulario As String)
  ' ..............
 If NumeroError = 2105 Then
  MsgBox "Aviso desde el formulario:" & Formulario & Chr(13) _
       & "Nº: " & NumeroError & " ->" & "Se ha llegado al Principio / Fin del fichero de Datos", vbInformation + vbOKOnly, "PROGRAMA TALLER MECÁNICO 2000"
 Else
  MsgBox "Aviso desde el formulario:" & Formulario & Chr(13) _
       & "Nº: " & NumeroError & " ->" & Err.Description, vbInformation + vbOKOnly, "PROGRAMA TALLER MECÁNICO 2000"
    
 End If
 
End Function
   

=================FIN DE CODIGO========================

En este sentido, Emilio Martinez posteo tambien un codigo similar:
COPIA DEL COIDIGO DE ENRIQUE MARTINEZ
=====================================
=======================
IMPORTAR TABLAS DE ACCESS
=======================

La ayuda muestra cómo crear una nueva tabla en una base de datos «activa» importando los datos desde otra base de datos «externa», mediante el uso de una variación de la instrucción «SELECT». Para ello, sólo nos bastará con añadirle a la consulta de creación de tabla la cláusula «INTO» de SQL. Hay que tener en cuenta que, al crear la tabla, los campos de la nueva tabla sólo heredarán el tipo de datos y el tamaño de los campos de las tablas externas de la consulta, pero no se transferirán ni los índices de la tabla ni cualquier otra propiedad de la misma.

Los ejemplos aquí explicados, van a abrir o establecer conexión con dos bases de datos: BD2.MDB que será la base de datos dónde se importará la tabla (llamada «Base de datos Actual») y BD1.MDB que será la base de datos que contenga la tabla que deseamos importar (llamada «Base de datos Externa»).

Si queréis utilizar los ejemplos, es recomendable que previamente tengáis creadas las bases de datos con estos nombres. Asimismo, en la base de datos externa (bd1.mdb), crear una tabla denominada "Socios" que es la tabla que se va a importar a la otra base de datos. Crear también en dicha tabla, una clave principal y varios índices para que, también éstos, se puedan importar, pero sólo con DAO.

Quiero advertir que para probar los ejemplos he utilizado bases de datos Access 2000 y referencias a Microsoft DAO 3.6 y Microsoft ActiveX Data Object 2.6, aunque también funcionarán con versiones inferiores de dichas bibliotecas de acceso a datos.

Para usuarios de DAO
--------------------

La ventaja que vamos a tener en este ejemplo es que también vamos a importar los índices de la tabla, haciendo un recorrido por la colección «Indexes» de la tabla externa.

    Dim dbActual As Database, dbExterna As Database
    Dim idxFrom AsIndex, idxTo As Index
    Dim sTablaNameExterna As String, sTablaNameActual As String
    Dim sConnect As String, sSQL As String

    ' Abro la base actual
    Set dbActual = DBEngine.OpenDatabase(App.Path & "\Bd2.mdb")

    ' Abro la base externa
    Set dbExterna = DBEngine.OpenDatabase(App.Path & "\Bd1.mdb")
    
    sTablaNameActual = "Tabla Importada de Socios"
    sTablaNameExterna = "Socios"

    ' Importamos la tabla
    sConnect = "[;DATABASE=" & dbActual.Name & "]."
    sSQL = "SELECT * INTO " & sConnect & "[" & sTablaNameActual & "] FROM [" & sTablaNameExterna & "]"
    dbExterna.Execute sSQL
    dbActual.TableDefs.Refresh

    ' Importamos los índices
    For Each idxFrom In dbExterna.TableDefs(sTablaNameExterna).Indexes
        Set idxTo = dbActual.TableDefs(sTablaNameActual).CreateIndex(idxFrom.Name)
        With idxTo
            ' El índice no representa una clave externa
            If Not idxFrom.Foreign Then
                .Fields = idxFrom.Fields
                .Unique = idxFrom.Unique
                .Primary = idxFrom.Primary
                dbActual.TableDefs(sTablaNameActual).Indexes.Append idxTo
            End If
        End With
    Next

    ' Cerramos las bases de datos
    dbActual.Close
    dbExterna.Close

Para usuarios de ADO
--------------------

A diferencia del anterior, en este ejemplo sólo vamos a importar los datos de la tabla externa.

    Dim cnnActual As New ADODB.Connection
    Dim cnnExterna As New ADODB.Connection
    Dim sTablaNameExterna As String, sTablaNameActual As String
    Dim sConnect As String, sSQL As String

    ' Establezco la conexión con la base de datos actual
    With cnnActual
        .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                            "Data Source=" & App.Path & "\bd2.mdb;"
        .Open
    End With
    
    ' Establezco la conexión con la base de datos externa
    With cnnExterna
        .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                            "Data Source=" & App.Path & "\bd1.mdb;"
        .Open
    End With
    
    sTablaNameActual = "Tabla Importada de Socios"
    sTablaNameExterna = "Socios"
    
    ' Importamos la tabla
    sConnect = "[;DATABASE=" & cnnActual.Properties("Data Source") & "]."
    sSQL = "SELECT * INTO " & sConnect & "[" & sTablaNameActual & "] FROM [" & sTablaNameExterna & "]"
    cnnExterna.Execute sSQL

    ' Cerramos las conexiones    
    cnnActual.Close
    cnnExterna.Close

--
Enrique Martínez («Sofjaen»)

Enero, 2002



FIN DE CODIGO DE ENRIQUE MARTINEZ

*************************************************
*************************************************




Ahora, Emilio, como incorporar campos a alguna tabla ya existente del modulo de datos:
--------------------------------------------------------------------------------------
**************************************************************************************

Option Compare Database
Option Explicit
'***************************************************************
'        (C) Francisco García Aguado, Junio de 2000            *
'                        Utiliza DAO                           *
'Este módulo es exclusivo para Modificar Tablas del módulo de  *
'Servicio con la incorporaciónde nuevos campos.                *
'***************************************************************

Function CrearNuevoCampo(Ruta As String, NombreTabla As String, NombreCampo As String, TipoCampo As Integer, NombreIndice As String, TipoIndice As Boolean)
 On Error GoTo Err_Comando0_Click
'Esta función añade campos a las tablas ya existentes de base de datos de Servicio

'Recibe como parametros:
'Ruta: Ruta y nombre completo de la MDB de servicio a tratar
'NombreTabla: Tabla a modificar
'NombreCampo: Nombre del campo a añadir
'NombreIndice: Nombre del indice, si el campo está indexado
'TipoIndice: Si está con o sin duplicados.
'TipoCampo: Tipo del campo, según las constantes de Access.
' A Y U D A  D E  C O N S T A N T E S  T I P O / C A M P O === I N T E G E R
'dbBinary=9
'dbBoolean=1
'dbByte =2
'dbChar =18
'dbCurrency=5
'dbDate Date / Time=8
'dbDecimal Decimal=20
'dbDouble Double=7
'dbFloat Float=21
'dbInteger Integer=3
'dbLong Long=4
'dbLongBinary Long Binary (Objeto OLE)=11
'dbMemo Memo=12
'dbNumeric Numeric19
'dbSingle Single=6
'dbText Text=10
'dbTime Time=22

 Dim Base As Database
 Dim tdfTabla As TableDef
 Dim fldCampo As Field
 Dim NewIdx As Index
 
 ' abro la base de servicio donde tenga los datos
 Set Base = OpenDatabase(Ruta)
 
 
 ' abro el objeto Tabla al cual voy  añadir campos
 Set tdfTabla = Base(NombreTabla)
 ' evito una doble actualización:
 For Each fldCampo In Base.TableDefs(NombreTabla).Fields
  If UCase(fldCampo.Name) = UCase(NombreCampo) Then
   MsgBox "La tabla de datos " & tdfTabla.Name & " ya está actualizada en el campo: " & UCase(fldCampo.Name), vbInformation + vbOKOnly, "Tabla ya actualizada en Programa."
   Exit Function
  End If
 Next
 
 ' Creo y agrego el objeto Campo nuevo
 
 With tdfTabla
      .Fields.Append .CreateField(NombreCampo, TipoCampo)
      
 End With
 
 ' Creo y agrego los indices, si es que se pasan como parametros NO NULOS
 ' para lo cual, lo compruebo viendo si se ha recibido el parametro como ""
 If Len(NombreIndice) <> 0 Then
  Set NewIdx = tdfTabla.CreateIndex(NombreIndice)
  NewIdx.Unique = TipoIndice
  Set fldCampo = NewIdx.CreateField(NombreCampo)
  NewIdx.Fields.Append fldCampo
  tdfTabla.Indexes.Append NewIdx
 End If
 Base.Close
 Set Base = Nothing ' libero

Exit_Comando0_Click:
    Exit Function

Err_Comando0_Click:
    ' Ojo  si hay algún usuario
    ' conectado a la base de servicio,el propio sistema de detección de errores
    ' avisa de esta contigencia en esta actualización, con mensaje personalizado.
    If Err.Number = 3262 Then
     MsgBox "No se puede actualizar la tabla pues está en uso en algún " & Chr(13) & _
            "puesto de trabajo. Cierre todas las aplicaciones del programa." _
            , vbCritical + vbOKOnly, "A V I S O  A C T U A L I Z A C I O N"
     
    
     Resume Exit_Comando0_Click
     Exit Function
    End If
      
    MsgBox Err.Description
    Resume Exit_Comando0_Click
End Function




Y si juntas todo esto, lo metes en una MDB, etc etc, te pude quedar un buen
modulo de actualizacion de datos.


Mas o menos esta la idea.
Un Abrazo
Paco

    Source: geocities.com/es/ensolva/Descargas/Documentos

               ( geocities.com/es/ensolva/Descargas)                   ( geocities.com/es/ensolva)                   ( geocities.com/es)