======================= 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