Originariamente inviato da Umanista
Alle fine ho risolto in un modo non molto elegante ma sicuramente efficace
Ho attribuito ad una penna USB la stessa lettera dell'hard disk del server, ed ho riprodotto lo stesso percorso di cartelle. All'interno di queste ultime ho linkato i db e poi li ho messi on line.
Anche se avrei preferito riuscire a modificare manualmente la path
Dunque, la soluzione sopra descritta va bene per risolvere al volo e grossolanamente il problema. A forza di cercare qua e là ecco la soluzione via codice. Decisamente più comoda.
codice:
protected void CreateAttachedAccessTableWithADOX()
{
ADOX.Table ADOXTable = new ADOX.Table();
ADOX.Catalog ADOXCatalog = new ADOX.Catalog();
ADODB.Connection ADOConnection = new ADODB.Connection();
ADOConnection.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\\tua path\\db1.mdb; Jet OLEDB:Engine Type=4;", "", "", 0);
ADOXCatalog.ActiveConnection = ADOConnection;
string tName = "TABELLAESTERNA_linkata";
bool notAdd = false;
// Controlla che la tabella non sia già linkata
foreach(ADOX.Table table in ADOXCatalog.Tables)
{
if (table.Name.Equals(tName))
{
notAdd = true;
break;
}
}
if (notAdd == false)
{
// Aggiungi link a tabella esterna
ADOXTable.Name = tName;
ADOXTable.ParentCatalog = ADOXCatalog;
ADOXTable.Properties["Jet OLEDB:Link Provider String"].Value = "MS Access;DATABASE=C:\\tuapath\\db2.mdb";
ADOXTable.Properties["Jet OLEDB:Remote Table Name"].Value = "TABELLAESTERNA";
ADOXTable.Properties["Jet OLEDB:Create Link"].Value = true;
ADOXCatalog.Tables.Append(ADOXTable);
}
ADOConnection.Close();
}
N.B. Per utilizzare il codice è necessario il riferimento a
1) Microsoft ActiveX Data Object 2.8 Library
2) Microsoft ADO Ext 2.8 DDL and Security
In pratica nella cartella Bin devono esserci le seguenti DLL:
Interop.ADODB.dll e Interop.ADOX.dll
In pratica dopo aver utilizzato questo metodo potete utilizzare due o più db access contemporaneamente, facendo delle query come fosse uno solo.
Ovviamente consiglio di usare questo sistema solo quando sia strettamente necessario, come nel mio caso.