Ante esta pregunta:
¿Alguien podría decirme como puedo cargar un recordset con una sentencia sql que uniera
(join) dos tablas pero que están en dos base de datos (mdb) distintas?
O lo que sería lo mismo, como relacionar dos tablas que están en conexiones distintas
(objeto connection de ADO)?.
Responde Enrique Martinez (SoftJaen)
====================================
Salvo que alguien me demuestre lo contrario, no se puede combinar mediante
INNER JOIN dos tablas pertenecientes a dos bases de datos distintas.
La vinculación de la tabla externa sería la solución, y hasta recomendable,
debido a que mejora el rendimiento y la facilidad de uso. Pero si no quieres
vincularla, la única posibilidad que te queda es que crees una simple
consulta de selección (o un procedimiento almacenado) de la tabla externa,
en la base de datos activa, para posteriormente combinarla con la tabla que
desees.
En la base de datos actual, creo una consulta de selección llamada [Consulta
Facturas] de la tabla 'Facturas', la cual se encuentra en una base de datos
distinta:
SELECT * FROM Facturas IN 'C:\BdFacturas.mdb';
Posteriormente ejecuto el siguiente código:
Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sChainSQL As String
With cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=C:\bd1.mdb"
.CursorLocation = adUseClient
.Open
End With
' Creo una combinación entre la tabla 'Clientes' y la consulta
' [Consulta Facturas], de la base de datos actual, la cual hace
' referencia a una tabla de una base de datos externa
sChainSQL = "SELECT Clientes.IdCliente, Clientes.Nombre, " & _
"[Consulta Facturas].IdFactura FROM Clientes INNER JOIN " & _
"[Consulta Facturas] ON Clientes.IdCliente = " & _
"[Consulta Facturas].IdCliente;"
' Abro el recordset
rs.Open sChainSQL, cnn, adOpenDynamic, adLockBatchOptimistic, adCmdText
MsgBox rs.RecordCount ' leo los registros del Recordset
               (
geocities.com/es/ensolva/Descargas)                   (
geocities.com/es/ensolva)                   (
geocities.com/es)