Domanda

Sto riprogettando un'applicazione per un CMS ASP.NET che non mi piace davvero. Ho apportato alcuni miglioramenti alle prestazioni solo per scoprire che questo CMS non utilizza solo MS SQL, ma alcuni utenti "semplicemente". usa il database MS Access.

Il problema è che ho alcune tabelle che unisco dentro, che con la versione di MS Access sono in due file diversi. Non mi è permesso spostare semplicemente le tabelle nell'altro file mdb.

Ora sto cercando di capire un buon modo per " inner join " attraverso più file db ad accesso?

Sarebbe davvero un peccato se dovessi recuperare tutti i dati e farlo a livello di programmazione!

Grazie

È stato utile?

Soluzione

Se hai accesso agli MDB e sei in grado di modificarli, potresti prendere in considerazione l'utilizzo di tabelle collegate. Access offre la possibilità di collegarsi a dati esterni (in altri MDB, in file Excel, anche in SQL Server o Oracle) e quindi è possibile eseguire i join con i collegamenti.

Incoraggio vivamente questa opzione al test delle prestazioni. Se è possibile migrare gli utenti dei database di Access su un altro sistema (anche SQL Express), sarebbe anche preferibile - per ultimo ho controllato, non ci sono più driver JET a 64 bit per ODBC, quindi se l'app è mai ospitata in un ambiente a 64 bit, questi utenti verranno eliminati.

Altri suggerimenti

Non hai assolutamente bisogno di tabelle collegate. Esistono due approcci all'utilizzo di dati di MDB diversi che possono essere utilizzati senza una tabella collegata. Il primo è usare " IN 'c: \ MyDBs \ Access.mdb' " nella clausola FROM del tuo SQL. Una delle tue query salvate sarebbe come:

SELECT MyTable.*
FROM MyTable IN 'c:\MyDBs\Access.mdb'

e l'altra query salvata sarebbe:

SELECT OtherTable.*
FROM OtherTable IN 'c:\MyDBs\Other.mdb'

È quindi possibile salvare quelle query e quindi utilizzare le query salvate per unire le due tabelle.

In alternativa, puoi gestirlo tutto in una singola istruzione SQL specificando il percorso dell'MDB di origine per ogni tabella nella clausola FROM in questo modo:

SELECT MyTable.ID, OtherTable.OtherField
FROM [c:\MyDBs\Access.mdb].MyTable 
  INNER JOIN [c:\MyDBs\Other.mdb].OtherTable ON MyTable.ID = OtherTable.ID

Tieni a mente una cosa, però:

L'utilità di ottimizzazione delle query Jet non sarà necessariamente in grado di utilizzare gli indici da queste tabelle per il join (se verrà utilizzato per criteri su singoli campi è un'altra domanda), quindi potrebbe essere estremamente lento (nei miei test, non lo è, ma non sto usando grandi set di dati per testare). Ma questo problema di prestazioni si applica anche alle tabelle collegate.

All'interno di un DB di accesso puoi creare " tabelle collegate " quel punto all'altro DB. Dovresti (penso) essere in grado di interrogare le tabelle come se entrambe esistessero nello stesso DB.

Significa che devi cambiare uno dei DB per creare la tabella virtuale, ma almeno non stai effettivamente spostando i dati, ma solo puntandoli

All'interno di Access, puoi aggiungere tabelle remote tramite " Gestione tabelle collegate " ;. È possibile aggiungere i collegamenti a un file di Access o all'altro oppure è possibile creare un nuovo file di Access che faccia riferimento alle tabelle in entrambi i file. Al termine, le query di join interno non sono diverse da quelle eseguite in un singolo database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top