Cómo vincular a una base de Access datos procedentes de otros orígenes de datos |
Por Enrique Martínez Montejo |
Última revisión: 13/01/2005 |
Mediante los correspondietes controladores ISAM instalables, podemos vincular en nuestra base de datos de Access, datos procedentes de otros orígenes de datos, como bien podría ser archivos de dBASE, Excel, Paradox, Lotus 123, así como archivos de texto delimitado y tablas de documentos HTML.
Dim cat
As ADOX.Catalog
Dim tbl As ADOX.Table
' Abro el catálogo
Set cat = New ADOX.Catalog
cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis documentos\Bd1.mdb"
' Creo la nueva tabla
Set tbl = New ADOX.Table
With tbl
.Name = "Tabla Vinculada de dBASE"
Set .ParentCatalog = cat
End With
' Establezco las propiedades para crear el vínculo con el archivo de dBASE
With tbl
.Properties("Jet OLEDB:Link Datasource") = "C:\Mis
documentos\" ' Indicamos solamente la carpeta
.Properties("Jet OLEDB:Remote Table Name") = "Archivo#dbf"
.Properties("Jet OLEDB:Create Link") = True
.Properties("Jet OLEDB:Link Provider String") = "dBASE 5.0;"
End With
' Añado la tabla a la colección Tables
cat.Tables.Append tbl
Set cat = Nothing
MsgBox "Se ha vinculado correctamente el archivo."
En la propiedad Jet OLEDB:Link Provider String se indica el tipo de ISAM de dBASE que se utilizará, y que se corresponderá con la versión del archivo DBF, por lo que también se permite especificar los valores dBASE III; y dBASE IV;.
Dim cat
As ADOX.Catalog
Dim tbl As ADOX.Table
' Abro el catálogo
Set cat = New ADOX.Catalog
cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis documentos\Bd1.mdb"
' Creo la nueva tabla
Set tbl = New ADOX.Table
With tbl
.Name = "Tabla Vinculada de Excel"
Set .ParentCatalog = cat
End With
' Establezco las propiedades para crear el vínculo con el archivo de Excel
'
With tbl
.Properties("Jet OLEDB:Link Datasource") = "C:\Mis
documentos\Libro1.xls"
.Properties("Jet OLEDB:Remote Table Name") = "Hoja1$"
.Properties("Jet OLEDB:Create Link") = True
.Properties("Jet OLEDB:Link Provider String") = "Excel
8.0;HDR=Yes"
End With
' Añado la tabla a la colección Tables
cat.Tables.Append tbl
Set cat = Nothing
MsgBox "Se ha vinculado correctamente la hoja de cálculo."
Advierta que al nombre de la hoja hay que añadir el signo $ en el valor de la propiedad Jet OLEDB:Remote Table Name. En el supuesto de querer vincular un rango de celdas con nombre, deberá entonces especificar solamente el nombre del rango, sin el signo $.
Si desea conocer más a fondo el ISAM de Excel, consulte el siguiente artículo: Trabajar con ADO, DAO y Excel.
Dim cat
As ADOX.Catalog
Dim tbl As ADOX.Table
' Abro el catálogo
Set cat = New ADOX.Catalog
cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis documentos\Bd1.mdb"
' Creo la nueva tabla
Set tbl = New ADOX.Table
With tbl
.Name = "Tabla Vinculada de Texto"
Set .ParentCatalog = cat
End With
' Establezco las propiedades para crear el vínculo con el archivo de texto
'
With tbl
.Properties("Jet OLEDB:Link Datasource") = "C:\Mis
documentos\" ' Indicamos solamente la carpeta
.Properties("Jet OLEDB:Remote Table Name") = "Archivo#txt"
.Properties("Jet OLEDB:Create Link") = True
.Properties("Jet OLEDB:Link Provider String") =
"TEXT;HDR=Yes"
End With
' Añado la tabla a la colección Tables
cat.Tables.Append tbl
Set cat = Nothing
MsgBox "Se ha vinculado correctamente el archivo de texto."
Dependiendo de los tipos de datos que tenga los campos del archivo de texto, y el formato del delimitador utilizado, puede que necesite crear un archivo de configuración de esquema, que necesariamente se tendrá que llamar Schema.ini, y deberá residir en la misma carpeta donde se encuentra el archivo de texto. Para saber los parámetros y valores que deberá de especificar en dicho archivo de configuración, consulte el siguiente artículo: Trabajar con los datos de un archivo de texto.
Dim cat
As ADOX.Catalog
Dim tbl As ADOX.Table
' Abro el catálogo
Set cat = New ADOX.Catalog
cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis documentos\Bd1.mdb"
' Creo la nueva tabla
Set tbl = New ADOX.Table
With tbl
.Name = "Tabla Vinculada de Paradox"
Set .ParentCatalog = cat
End With
' Establezco las propiedades para crear el vínculo con
la el archivo de Paradox
'
With tbl
.Properties("Jet OLEDB:Link Datasource") = "C:\Mis
documentos\" ' Indicamos solamente la carpeta
.Properties("Jet OLEDB:Remote Table Name") = "Archivo#db"
.Properties("Jet OLEDB:Create Link") = True
.Properties("Jet OLEDB:Link Provider String") = "Paradox
5.x;"
End With
' Añado la tabla a la colección Tables
cat.Tables.Append tbl
Set cat = Nothing
MsgBox "Se ha vinculado correctamente el archivo de Paradox."
En la propiedad Jet OLEDB:Link Provider String se indica el tipo de ISAM de Paradox que se utilizará, y que se corresponderá con la versión del archivo de Paradox, por lo que también se permite especificar los valores Paradox 3.x; y Paradox 4.x;.
Dim cat
As ADOX.Catalog
Dim tbl As ADOX.Table
' Abro el catálogo
Set cat = New ADOX.Catalog
cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis documentos\Bd1.mdb"
' Creo la nueva tabla
Set tbl = New ADOX.Table
With tbl
.Name = "Tabla Vinculada de Lotus"
Set .ParentCatalog = cat
End With
' Establezco las propiedades para crear el vínculo con
el archivo de Lotus
'
With tbl
.Properties("Jet OLEDB:Link Datasource") = "C:\Mis
documentos\Libro1.wk4"
.Properties("Jet OLEDB:Remote Table Name") = "Hoja1:"
.Properties("Jet OLEDB:Create Link") = True
.Properties("Jet OLEDB:Link Provider String") = "Lotus
wk4;HDR=Yes"
End With
' Añado la tabla a la colección Tables
cat.Tables.Append tbl
Set cat = Nothing
MsgBox "Se ha vinculado correctamente la hoja de cálculo."
El controlador ISAM Lotus de Microsoft Jet, solamente es compatible con las siguientes versiones de hojas de cálculo de Lotus 1-2-3: Lotus WKS, Lotus WK1, Lotus WK3 y Lotus WK4.
Cuando se vincula una hoja de cálculo de Lotus a través de su ISAM correspondiente, tendremos distintos grados de acceso a los datos dependiendo de la versión que tenga el archivo de Lotus:
Asimismo, y dependiendo también de la versión del archivo de Lotus, deberemos utilizar una sintaxis diferente en el valor de la propiedad Jet OLEDB:Remote Table Name:
Objeto | Versión de Lotus | Sintaxis | Ejemplo |
Hoja completa de archivo de hoja única | WKS y WK1 | nombre-archivo#wks nombre-archivo#wk1 |
clientes#wks clientes#wk1 |
Hoja completa de archivo de hojas múltiples | WK3 y WK4 | nombre-hoja: | provincias: |
Rango de celdas con nombre | WKS, WK1, WK3 y WK4 | nombre-rango | provincias |
Rango de celdas sin nombre | WKS y WK1 | A1..Z25 | B3..D128 |
Rango de celdas sin nombre | WK3 y WK4 | nombre-hoja:A1..Z25 | hoja1:B3.D128 |
Por último, indicar que deberá de especificar el tipo de ISAM de Lotus que corresponda con el archivo de Lotus 1-2-3 cuyos datos desee vincular a la base de datos de Access:
Antes de intentar abrir una tabla HTML, deberá conocer las convenciones de nombres de tablas que puede utilizar para referenciar a una tabla dentro de un documento HTML:
Si la tabla no tiene título y es la única tabla del archivo, entonces deberá utilizar el título del documento HTML para referenciar a la tabla. Se entiende por título del documento, el valor encerrado entre las etiquetas
Si el archivo HTML contiene más de una tabla, y ninguna tiene título, puede referenciar las tablas en el código de Visual Basic secuencialmente como Table, Table1, Table2, etc., los cuales serán interpretados por el ISAM como primera tabla sin nombre del archivo, segunda tabla sin nombre del archivo, tercera tabla sin nombre del archivo, etc. En cambio, si el archivo HTML dispone de su correspondiente título entre las etiquetas
El siguiente ejemplo vinculará a nuestra base de datos, una tabla existente en un documento HTML con el título de Clientes:
Dim cat
As ADOX.Catalog
Dim tbl As ADOX.Table
' Abro el catálogo
Set cat = New ADOX.Catalog
cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis documentos\Bd1.mdb"
' Creo la nueva tabla
Set tbl = New ADOX.Table
With tbl
.Name = "Tabla Vinculada de HTML"
Set .ParentCatalog = cat
End With
' Establezco las propiedades para crear el vínculo con el documento HTML
'
With tbl
.Properties("Jet OLEDB:Link Datasource") = "C:\Mis
documentos\Archivo.htm"
.Properties("Jet OLEDB:Remote Table Name") = "Clientes"
.Properties("Jet OLEDB:Create Link") = True
.Properties("Jet OLEDB:Link Provider String") = "HTML
Import;HDR=Yes"
End With
' Añado la tabla a la colección Tables
cat.Tables.Append tbl
Set cat = Nothing
MsgBox "Se ha vinculado correctamente la tabla HTML."
Conviene indicar que el ISAM de HTML funciona de forma similar al ISAM de texto del motor Jet, por lo que deberá de tener instalado el archivo MSTEXT40.DLL (si utiliza la versión 4.0 del motor Jet).
Para conocer la forma de trabajar del ISAM de texto del motor Microsoft Jet, conviene que consulte el siguiente artículo técnico: Trabajar con los datos de un archivo de texto. Recomiendo su lectura, sobretodo el apartado que describe el archivo de configuración de esquema Schema.ini, porque puede ser que necesite crear uno cuando desee trabajar con el ISAM de HTML, sobretodo si queremos tener un control absoluto sobre el tipo de dato que contienen los campos de la tabla.
Otros enlaces de interés:
Cómo vincular una tabla de una base de datos Access
Cómo vincular a una base de Access una tabla de una base de datos SQL Server
Cómo vincular una tabla de Access a una base de datos de SQL Server
Enrique Martínez Montejo - 2005
NOTA: La información contenida en este artículo, así como el código fuente incluido en el mismo, se proporciona COMO ESTÁ, sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo explicado, recomendado o sugerido en el presente artículo.
NOTE: The information contained in this article and source code included therein, is provided AS IS without warranty of any kind, and confers no rights. You assume any risk to implement, use or run it explained, recommended or suggested in this article.