Al momento sei offline in attesa che la connessione Internet venga ristabilita

Associazione di maschere di Microsoft Access a recordset ADO

Il supporto per Office 2003 è terminato

Il supporto Microsoft per Office 2003 è terminato l Ulteriori informazioni su come continuare a essere protetti.

Questo articolo è stato precedentemente pubblicato con il codice di riferimento I281998
Utenti esperti: sono richieste conoscenze avanzate di gestione di codice, interoperabilità e funzioni multiutente.

Le informazioni contenute in questo articolo si applicano ai database di Microsoft Access (mdb) e ai progetti di Microsoft Access (adp).

Sommario
In questo articolo viene descritta la procedura necessaria per creare una maschera aggiornabile associata a un oggetto Recordset ADO (ActiveX Data Objects).
Informazioni
Per associare una maschera di Microsoft Access a un recordset, è necessario impostare la proprietà Recordset della maschera su un oggetto Recordset DAO (Data Access Objects) o ADO valido.

La proprietà Recordset è stata introdotta con Microsoft Access 2000 e consente di associare maschere a oggetti Recordset DAO o ADO. In Access 2000, tuttavia, le maschere sono aggiornabili solo se la connessione ADO viene aperta utilizzando i provider OLEDB di MSDataShape e SQL Server. Per ulteriori informazioni su questo limite di Access 2000, fare clic sul numero dell'articolo della Knowledge Base riportato di seguito (il contenuto potrebbe essere in inglese):
227053 ACC2000: Le maschere basate sui recordset ADO sono di sola lettura
Microsoft Access 2002 e le versioni successive consentono di creare una maschera aggiornabile associata a un recordset ADO che utilizza altri provider OLEDB. È necessario che la maschera soddisfi una serie di requisiti generali affinché sia aggiornabile quando è associata a un recordset ADO. Tali requisiti generali sono i seguenti:
  1. Il recordset ADO sottostante deve essere aggiornabile.
  2. Il recordset deve contenere uno o più campi indicizzati in modo univoco, ad esempio una chiave primaria di una tabella.
Gli altri requisiti di aggiornabilità sono diversi a seconda dei provider. In questo articolo vengono descritti i requisiti dei provider OLEDB Microsoft SQL Server, Jet, ODBC e Oracle.

Requisiti per Microsoft SQL Server

Esistono due requisiti di aggiornabilità principali quando di associa una maschera a un recordset ADO che utilizza dati di Microsoft SQL Server:
  • La connessione del recordset ADO recordset deve utilizzare il provider OLEDB di Microsoft Access 10.0 come provider di servizi.
  • La connessione del recordset ADO deve utilizzare il provider OLEDB di Microsoft SQL Server come provider di dati.
NOTA: il provider OLEDB di Microsoft Access 10.0 è un provider di servizi OLEDB scritto in modo specifico per Microsoft Access. Non è stato sviluppato per l'impiego in applicazioni diverse da Microsoft Access e non è supportato da altre applicazioni.

Quando si creano recordset ADO in Microsoft Access è possibile scegliere la connessione ADO che il recordset utilizzerà. Il codice ADO potrà condividere la connessione ADO utilizzata da Microsoft Access per il database di SQL Server correntemente aperto nel file di progetto di Access (ADP),oppure sarà possibile creare in fase di programmazione una nuova connessione ADO a un database di SQL Server diverso.

Condivisione della connessione ADO utilizzata da Microsoft Access

Se si utilizza un file di progetto di Access (adp) connesso a un database di Microsoft SQL Server, è possibile che il codice ADO condivida la stessa connessione ADO utilizzata da Microsoft Access. La connessione è esposta dalla proprietà CurrentProject.AccessConnection.

Nell'esempio che segue viene spiegato come associare una maschera a un recordset ADO basato su dati di SQL Server che condividono una connessione ADO con Microsoft Access.
  1. Aprire il progetto di esempio NorthwindCS.adp.
  2. Aprire la maschera Clienti in visualizzazione Struttura.
  3. Deselezionare la proprietà RecordSource della maschera per eseguirne la dissociazione.
  4. Impostare la proprietà OnOpen della maschera sulla seguente routine evento:
    Private Sub Form_Open(Cancel As Integer)   Dim cn As ADODB.Connection   Dim rs As ADODB.Recordset            'Use the ADO connection that Access uses   Set cn = CurrentProject.AccessConnection   'Create an instance of the ADO Recordset class, and   'set its properties   Set rs = New ADODB.Recordset   With rs      Set .ActiveConnection = cn      .Source = "SELECT * FROM Customers"      .LockType = adLockOptimistic      .CursorType = adOpenKeyset      .Open    End With      'Set the form's Recordset property to the ADO recordset   Set Me.Recordset = rs   Set rs = Nothing   Set cn = NothingEnd Sub
  5. Salvare e chiudere la maschera.
  6. Aprire la maschera Clienti in visualizzazione Maschera.
  7. Aggiungere, modificare o eliminare un record della maschera.
Si noti che la maschera è associata a un recordset aggiornabile basato su dati SQL Server.

Apertura di una connessione ADO separata

Può essere necessario a un certo punto aprire e aggiornare la connessione ADO a SQL Server, ad esempio nel caso in cui si scriva codice in un database di Access (mdb) o in un file di progetto di Access (adp) connessi a un database SQL Server diverso rispetto all'applicazione utilizzata. Si noti che quando si adotta questa prassi Microsoft consiglia di chiudere la connessione ADO precedentemente aperta quando non è più necessaria. È ad esempio consigliabile chiudere la connessione ADO nell'evento UnLoad della maschera.

Nell'esempio seguente viene spiegato come aprire la connessione ADO a un database di Microsoft SQL Server e come associarvi una maschera:
  1. Aprire il database di esempio Northwind.mdb.
  2. Aprire la maschera Clienti in visualizzazione Struttura.
  3. Deselezionare la proprietà RecordSource della maschera per eseguirne la dissociazione.
  4. Impostare la proprietà OnOpen della maschera sulla seguente routine evento:
    Private Sub Form_Open(Cancel As Integer)   Dim cn As ADODB.Connection   Dim rs As ADODB.Recordset            'Create a new ADO Connection object   Set cn = New ADODB.Connection   'Use the Access 10 and SQL Server OLEDB providers to   'open the Connection   'You will need to replace MySQLServer with the name   'of a valid SQL Server   With cn      .Provider = "Microsoft.Access.OLEDB.10.0"      .Properties("Data Provider").Value = "SQLOLEDB"      .Properties("Data Source").Value = "MySQLServer"      .Properties("User ID").Value = "sa"      .Properties("Password").Value = ""      .Properties("Initial Catalog").Value = "NorthwindCS"      .Open   End With   'Create an instance of the ADO Recordset class, and   'set its properties   Set rs = New ADODB.Recordset   With rs      Set .ActiveConnection = cn      .Source = "SELECT * FROM Customers"      .LockType = adLockOptimistic      .CursorType = adOpenKeyset      .Open    End With      'Set the form's Recordset property to the ADO recordset   Set Me.Recordset = rs   Set rs = Nothing   Set cn = NothingEnd Sub
  5. Aggiungere il codice riportato di seguito all'evento UnLoad della maschera:
    Private Sub Form_Unload(Cancel As Integer)   'Close the ADO connection we opened   Dim cn As ADODB.Connection   Set cn = Me.Recordset.ActiveConnection   cn.Close   Set cn = NothingEnd Sub
  6. Salvare la maschera, quindi chiuderla.
  7. Aprire la maschera Clienti in visualizzazione Maschera.
  8. Aggiungere, modificare o eliminare un record della maschera.
Si noti che la maschera è associata a un recordset aggiornabile basato su dati SQL Server.

Requisiti per Microsoft Jet

Pur essendo possibile associare una maschera a un recordset ADO che utilizza dati di un database Jet, Microsoft consiglia di utilizzare DAO. DAO è particolarmente indicato per Jet e di solito ha prestazioni più veloci di ADO quando lo si utilizza con un database Jet.

Quando si associa una maschera a un recordset ADO che utilizza dati di Microsoft Jet, esistono due alternative:
  • La proprietà ActiveConnection del recordset deve utilizzare il provider di servizi OLEDB di Microsoft Access 10.0 nonché il provider di dati OLEDB di Microsoft Jet 4.0 e il recordset deve essere un cursore sul lato server.

    Oppure
  • La proprietà ActiveConnection del recordset deve utilizzare solo il provider di dati OLEDB Microsoft Jet 4.0 e il recordset deve essere un cursore sul lato client.
Similmente a questo descritto nella sezione su Microsoft SQL Server di questo articolo, è possibile scegliere la connessione ADO che il recordset utilizzerà quando si serve di un database Jet. Il codice ADO potrà condividere la connessione ADO utilizzata da Microsoft Access per il file di database di Jet (mdb) correntemente aperto, oppure sarà possibile creare in fase di programmazione una nuova connessione ADO a un file di database di Jet separato.

Condivisione della connessione ADO utilizzata da Microsoft Access

Se si scrive il codice nello stesso database di Microsoft Access (mdb) che contiene i dati di cui ha bisogno il recordset, è possibile che il codice ADO condivida la stessa connessione ADO utilizzata da Microsoft Access. La connessione è esposta dalla proprietà CurrentProject.AccessConnection. Nell'esempio che segue viene spiegato come associare una maschera a un recordset ADO in un database Jet condividendo la connessione ADO correntemente utilizzata da Microsoft Access:
  1. Aprire il database di esempio Northwind.mdb.
  2. Aprire la maschera Clienti in visualizzazione Struttura.
  3. Deselezionare la proprietà RecordSource della maschera per eseguirne la dissociazione.
  4. Impostare la proprietà OnOpen della maschera sulla seguente routine evento:
    Private Sub Form_Open(Cancel As Integer)   Dim cn As ADODB.Connection   Dim rs As ADODB.Recordset                   Set cn = CurrentProject.AccessConnection   'Create an instance of the ADO Recordset class, and   'set its properties   Set rs = New ADODB.Recordset   With rs      Set .ActiveConnection = cn      .Source = "SELECT * FROM Customers"      .LockType = adLockOptimistic      .CursorType = adOpenKeyset      .CursorLocation = adUseServer      .Open    End With      'Set the form's Recordset property to the ADO recordset   Set Me.Recordset = rs   Set rs = Nothing   Set cn = NothingEnd Sub
  5. Salvare la maschera, quindi chiuderla.
  6. Aprire la maschera Clienti in visualizzazione Maschera.
  7. Aggiungere, modificare o eliminare un record della maschera.
Si noti che la maschera è associata a un recordset aggiornabile che utilizza dati Jet.

Apertura di una connessione ADO separata

Può essere necessario a un certo punto aprire e aggiornare la connessione ADO a un database Jet, ad esempio se si scrive il codice in un database diverso da quello che contiene i dati ai quali è necessario accedere. Si noti che quando si adotta questa prassi Microsoft consiglia di chiudere la connessione ADO precedentemente aperta quando non è più necessaria. È ad esempio consigliabile chiudere la connessione ADO nell'evento UnLoad della maschera.

Nell'esempio seguente viene spiegato come aprire la connessione ADO a un database di Microsoft Jet e come associarvi una maschera:
  1. Creare un nuovo database vuoto.
  2. Importare la maschera Clienti dal database di esempio Northwind.mdb.
  3. Aprire la maschera Clienti in visualizzazione Struttura.
  4. Deselezionare la proprietà RecordSource della maschera per eseguirne la dissociazione.
  5. Impostare la proprietà OnOpen della maschera sulla seguente routine evento:
    Private Sub Form_Open(Cancel As Integer)   Dim cn As ADODB.Connection   Dim rs As ADODB.Recordset            'Create a new ADO Connection object   Set cn = New ADODB.Connection   With cn      .Provider = "Microsoft.Access.OLEDB.10.0"      .Properties("Data Provider").Value = "Microsoft.Jet.OLEDB.4.0"      .Properties("Data Source").Value = _          "C:\Program Files\Microsoft Office\Office10" & _          "\Samples\Northwind.mdb"      .Open   End With   'Create an instance of the ADO Recordset class, and   'set its properties   Set rs = New ADODB.Recordset   With rs      Set .ActiveConnection = cn      .Source = "SELECT * FROM Customers"      .LockType = adLockOptimistic      .CursorType = adOpenKeyset      .Open    End With      'Set the form's Recordset property to the ADO recordset   Set Me.Recordset = rs   Set rs = Nothing   Set cn = NothingEnd Sub
  6. Aggiungere il codice riportato di seguito all'evento UnLoad della maschera:
    Private Sub Form_Unload(Cancel As Integer)   'Close the ADO connection we opened   Dim cn As ADODB.Connection   Set cn = Me.Recordset.ActiveConnection   cn.Close   Set cn = NothingEnd Sub
  7. Salvare la maschera, quindi chiuderla.
  8. Aprire la maschera Clienti in visualizzazione Maschera.
  9. Aggiungere, modificare o eliminare un record della maschera.
Si noti che la maschera è associata a un recordset aggiornabile che utilizza dati Jet.

Requisiti per ODBC

Quando si associa una maschera a un recordset ADO che utilizza dati di un database ODBC, esistono due principali requisiti:
  • La connessione ADO utilizzata dal recordset deve servirsi del provider OLEDB Microsoft per ODBC.
  • Il recordset ADO deve essere un cursore sul lato client.
Nell'esempio seguente viene spiegato come aprire la connessione ADO a un database ODBC e come associarvi una maschera:

NOTA: questa procedura presuppone che il database ODBC contenga una tabella denominata CLIENTI con struttura identica alla tabella Clienti del database di esempio Northwind.mdb. Presuppone inoltre che sia stato creato un DSN ODBC denominato "DSN" che utilizza il driver ODBC necessario per connettersi al database esterno.
  1. Aprire il database di esempio Northwind.mdb.
  2. Aprire la maschera Clienti in visualizzazione Struttura.
  3. Deselezionare la proprietà RecordSource della maschera per eseguirne la dissociazione.
  4. Impostare la proprietà OnOpen della maschera sulla seguente routine evento:
    Private Sub Form_Open(Cancel As Integer)   Dim cn As ADODB.Connection   Dim rs As ADODB.Recordset   Dim strConnection As String   strConnection = "ODBC;DSN=MyDSN;UID=sa;PWD=;DATABASE=Northwind"   'Create a new ADO Connection object   Set cn = New ADODB.Connection   With cn      .Provider = "MSDASQL"      .Properties("Data Source").Value = strConnection      .Open   End With   'Create an instance of the ADO Recordset class, and   'set its properties   Set rs = New ADODB.Recordset   With rs      Set .ActiveConnection = cn      .Source = "SELECT * FROM Customers"      .LockType = adLockOptimistic      .CursorType = adOpenKeyset      .CursorLocation = adUseClient      .Open    End With      'Set the form's Recordset property to the ADO recordset   Set Me.Recordset = rs   Set rs = Nothing   Set cn = NothingEnd Sub
  5. Aggiungere il codice riportato di seguito all'evento UnLoad della maschera:
    Private Sub Form_Unload(Cancel As Integer)   'Close the ADO connection we opened   Dim cn As ADODB.Connection   Set cn = Me.Recordset.ActiveConnection   cn.Close   Set cn = NothingEnd Sub
  6. Salvare la maschera, quindi chiuderla.
  7. Aprire la maschera Clienti in visualizzazione Maschera.
  8. Aggiungere, modificare o eliminare un record della maschera.
Si noti che la maschera è associata a un recordset aggiornabile basato su dati ODBC.

Requisiti per Oracle

Quando si associa una maschera a un recordset ADO che utilizza dati di un database Oracle, esistono due principali requisiti:

  • La connessione ADO utilizzata dal recordset deve servirsi del provider OLEDB Microsoft per Oracle.
  • Il recordset ADO deve essere un cursore sul lato client.
Nell'esempio seguente viene spiegato come aprire la connessione ADO a un database Oracle e come associarvi una maschera:

NOTA: questa procedura presuppone che il database Oracle contenga una tabella denominata CLIENTI con struttura identica alla tabella Clienti del database di esempio Northwind.mdb.
  1. Aprire il database di esempio Northwind.mdb.
  2. Aprire la maschera Clienti in visualizzazione Struttura.
  3. Deselezionare la proprietà RecordSource della maschera per eseguirne la dissociazione.
  4. Impostare la proprietà OnOpen della maschera sulla seguente routine evento:
    Private Sub Form_Open(Cancel As Integer)   Dim cn As ADODB.Connection   Dim rs As ADODB.Recordset            'Create a new ADO Connection object   Set cn = New ADODB.Connection   With cn      .Provider = "MSDAORA"      .Properties("Data Source").Value = "MyOracleServer"      .Properties("User ID").Value = "username"      .Properties("Password").Value = "password"                .Open   End With   'Create an instance of the ADO Recordset class, and   'set its properties   Set rs = New ADODB.Recordset   With rs      Set .ActiveConnection = cn      .Source = "SELECT * FROM Customers"      .LockType = adLockOptimistic      .CursorType = adOpenKeyset      .CursorLocation = adUseClient      .Open    End With     'Set the form's Recordset property to the ADO recordset   Set Me.Recordset = rs   Set rs = Nothing   Set cn = NothingEnd Sub
  5. Aggiungere il codice riportato di seguito all'evento UnLoad della maschera:
    Private Sub Form_Unload(Cancel As Integer)   'Close the ADO connection we opened   Dim cn As ADODB.Connection   Set cn = Me.Recordset.ActiveConnection   cn.Close   Set cn = NothingEnd Sub
  6. Salvare la maschera, quindi chiuderla.
  7. Aprire la maschera Clienti in visualizzazione Maschera.
  8. Aggiungere, modificare o eliminare un record della maschera.
Si noti che la maschera è associata a un recordset aggiornabile basato su dati Oracle.
Riferimenti
Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
281784 ACC2002: Differenze tra le proprietà Connection e AccessConnection
I prodotti di terze parti citati in questo articolo sono forniti da produttori indipendenti. Microsoft non rilascia alcuna garanzia implicita o esplicita relativa alle prestazioni o all'affidabilità di tali prodotti.
OfficeKBHowTo inf ACC2002 reviewdocid
Proprietà

ID articolo: 281998 - Ultima revisione: 11/04/2003 09:25:54 - Revisione: 4.1

  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • kbhowto KB281998
Feedback