Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Umanista
    Registrato dal
    Jan 2002
    Messaggi
    1,022

    Utilizzare due db access con tabelle linkate

    Per motivi lunghi da spiegare devo necessariamente usare due db access separati.
    Il db A1 ha bisogno dei dati contenuti in una tabella del db B1

    In locale mi funziona tutto correttamente, poiché non ho fatto altro che linkare la tabella a me necessaria tramite il tool di Access. Da qui la possibilità di fare query con JOIN e compagnia bella, come se la tabella del database B1 facesse realmente parte del db A1.

    Il problema sorge mettendo i db on line. Infatti il db A1 mantiene la path utilizzata in locale, quindi sul server di produzione non funziona più.

    Ho trovato vari codici VBA che permettono di modificare la path, ma devono essere comunque richiamati da una macro. Quindi dovrei scrivere anche codice per avviare la macro, e mi pare eccessivo.

    Ho trovato dei codici per cambiare la path attraverso ADOX, ma per linkare le tabelle occorre una specifica dll, quindi viene fuori questo errore "Impossibile trovare ISAM installabile."

    Insomma, nessuno di voi ha già risolto una situazione simile?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di Umanista
    Registrato dal
    Jan 2002
    Messaggi
    1,022

    L'uovo di colombo

    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

  3. #3
    Utente di HTML.it L'avatar di Umanista
    Registrato dal
    Jan 2002
    Messaggi
    1,022

    Re: L'uovo di colombo

    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.