Collegamento delle applicazioni di Access a SQL Server - database SQL di Azure (AccessToSQL)

Se si vogliono usare le applicazioni di Access esistenti con SQL Server, è possibile collegare le tabelle di Access originali alle tabelle di SQL Server o SQL Azure migrate. Il collegamento modifica il database di Access in modo che le query, i moduli, i report e le pagine di accesso ai dati usino i dati in SQL Server o database SQL di Azure anziché i dati nel database di Access.

Nota

Le tabelle di Access rimangono in Access, ma non vengono aggiornate insieme agli aggiornamenti di SQL Server o SQL Azure. Dopo aver collegato le tabelle e aver verificato la funzionalità, è possibile eliminare le tabelle di Access.

Collegamento di tabelle di Access e SQL Server

Quando si collega una tabella di Access a una tabella di SQL Server o SQL Azure, il motore di database Jet archivia le informazioni di collegamento e i metadati della tabella, ma i dati vengono archiviati in SQL Server o SQL Azure. Questo collegamento consente alle applicazioni di Access di operare sulle tabelle di Access anche se le tabelle e i dati effettivi si trovano in SQL Server o SQL Azure.

Nota

Se si usa l'autenticazione di SQL Server, la password viene archiviata in testo non crittografato nelle tabelle di Access collegate. È consigliabile usare l'autenticazione di Windows.

Per collegare tabelle

  1. In Esplora metadati di Access selezionare le tabelle da collegare.

  2. Fare clic con il pulsante destro del mouse su Tabelle, quindi selezionare Collega.

SQL Server Migration Assistant (SSMA) per Access esegue il backup della tabella di Access originale e crea una tabella collegata.

Dopo aver collegato le tabelle, le tabelle in SSMA vengono visualizzate con una piccola icona di collegamento. In Access le tabelle vengono visualizzate con un'icona "collegata", che è un globo con una freccia rivolta verso di esso.

Quando si apre una tabella in Access, i dati vengono recuperati usando un cursore keyset. Di conseguenza, per tabelle di grandi dimensioni, tutti i dati non vengono recuperati contemporaneamente. Tuttavia, durante l'esplorazione della tabella, Access recupera i dati aggiuntivi in base alle esigenze.

Importante

Per collegare le tabelle di accesso a un database di Azure, è necessario SQL Server Native Client (SNAC) versione 10.5 o successiva.
È possibile ottenere l’ultima versione di SNAC da Microsoft SQL Server 2008 R2 Feature Pack.

Scollegamento delle tabelle di Access

Quando si scollega una tabella di Access da una tabella di SQL Server o SQL Azure, SSMA ripristina la tabella di Access originale e i relativi dati.

Per scollegare le tabelle

  1. In Esplora metadati di Access selezionare le tabelle da scollegare.

  2. Fare clic con il pulsante destro del mouse su Tabelle, quindi selezionare Scollega.

Collegamento di tabelle a un server diverso

Se le tabelle di Access sono state collegate a un'istanza di SQL Server e successivamente si desidera modificare i collegamenti a un'altra istanza, è necessario ricollegare le tabelle.

Per collegare tabelle a un server diverso

  1. In Esplora metadati di Access selezionare le tabelle da scollegare.

  2. Fare clic con il pulsante destro del mouse su Tabelle, quindi selezionare Scollega.

  3. Fare clic sul pulsante Riconnetti a SQL Server.

  4. Collegarsi all'istanza di SQL Server o SQL Azure a cui si desidera collegare le tabelle di Access.

  5. In Esplora metadati di Access selezionare le tabelle da collegare.

  6. Fare clic con il pulsante destro del mouse su Tabelle, quindi selezionare Collega.

Aggiornamento delle tabelle collegate

Se le definizioni di tabella di SQL Server o SQL Azure vengono modificate, è possibile scollegare e ricollegare le tabelle in SSMA usando le procedure illustrate in precedenza in questo argomento. È anche possibile aggiornare le tabelle usando Access.

Per aggiornare le tabelle collegate tramite Access

  1. Aprire il database di Access.

  2. Nell'elenco Oggetti fare clic su Tabelle.

  3. Fare clic con il pulsante destro del mouse su una tabella collegata e quindi scegliere Gestione tabelle collegate.

  4. Selezionare la casella di controllo accanto a ogni tabella collegata che si desidera aggiornare e quindi fare clic su OK.

Possibili problemi di post-migrazione

Le sezioni seguenti elencano i problemi che possono verificarsi nelle applicazioni di Access esistenti dopo la migrazione dei database da Access a SQL Server o SQL Azure e il collegamento delle tabelle, insieme alle cause e alle soluzioni.

Rallentamento delle prestazioni con le tabelle collegate

Causa: alcune query potrebbero essere lente dopo l'upsize per i motivi seguenti:

  • L'applicazione dipende da funzioni che non esistono in SQL Server o SQL Azure, il che fa sì che Jet esegua il pull delle tabelle localmente per eseguire una query di selezione.

  • Le query che aggiornano o eliminano molte righe vengono inviate da Jet come query con parametri per ogni riga.

Soluzione: convertire le query a esecuzione lenta in query pass-through, stored procedure o viste. La conversione in query pass-through presenta i problemi seguenti:

  • Le query pass-through non possono essere modificate. La modifica del risultato della query o l'aggiunta di nuovi record deve essere eseguita in modo alternativo, ad esempio con i pulsanti Modifica o Aggiungi espliciti nel modulo associato alla query.

  • Alcune query richiedono l'input dell'utente, ma le query pass-through non supportano l'input dell'utente. L'input dell'utente può essere ottenuto dal codice di Visual Basic, Applications Edition (VBA) che richiede parametri o da un modulo utilizzato come controllo di input. In entrambi i casi, il codice VBA invia la query con l'input dell'utente al server.

Le colonne con incremento automatico non vengono aggiornate fino a quando il record non viene aggiornato

Causa: dopo aver chiamato RecordSet.AddNew in Jet, la colonna di incremento automatico è disponibile prima dell'aggiornamento del record. Questo non vale in SQL Server o SQL Azure. Il nuovo valore della colonna Identity è disponibile solo dopo il salvataggio del nuovo record.

Soluzione: eseguire il codice di Visual Basic, Applications Edition (VBA) seguente prima di accedere al campo Identity:

Recordset.Update  
Recordset.Move 0,  
Recordset.LastModified  

I nuovi record non sono disponibili

Causa: quando si aggiunge un record a una tabella di SQL Server o SQL Azure usando VBA, se il campo di indice univoco della tabella ha un valore predefinito e non si assegna un valore a tale campo, il nuovo record non viene visualizzato fino a quando non si riapre la tabella in SQL Server o SQL Azure. Se si tenta di ottenere un valore dal nuovo record, viene visualizzato il messaggio di errore seguente:

Run-time error '3167' Record is deleted.

Soluzione: quando si apre la tabella di SQL Server o SQL Azure usando il codice VBA, includere l'opzione dbSeeChanges, come nell'esempio seguente:

Set rs = db.OpenRecordset("TestTable", dbOpenDynaset, dbSeeChanges)

Dopo la migrazione, alcune query non consentiranno all'utente di aggiungere un nuovo record

Causa: se una query non include tutte le colonne incluse in un indice univoco, non è possibile aggiungere nuovi valori usando la query.

Soluzione: assicurarsi che tutte le colonne incluse in almeno un indice univoco facciano parte della query.

Non è possibile modificare lo schema di una tabella collegata con Access

Causa: dopo la migrazione dei dati e del collegamento delle tabelle, l'utente non può modificare lo schema di una tabella in Access.

Soluzione: modificare lo schema della tabella usando SQL Server Management Studio e quindi aggiornare il collegamento in Access.

Causa: dopo la migrazione dei dati, i collegamenti ipertestuali nelle colonne perdono la funzionalità e diventano semplici colonne nvarchar(max).

Soluzione: nessuna.

Alcuni tipi di dati di SQL Server non sono supportati da Access

Causa: se in un secondo momento si aggiornano le tabelle di SQL Server o SQL Azure in modo che contengano tipi di dati non supportati da Access, non è possibile aprire la tabella in Access.

Soluzione: è possibile definire una query di Access che restituisca solo le righe con tipi di dati supportati.

Vedi anche

Migrazione di database di Access a SQL Server