
Per la creazione di programmi che consentono di accedere a database, sono disponibili i seguenti strumenti di sviluppo:
Il modulo di gestione di database Microsoft Jet con il controllo Data di Visual Basic.
Il modulo Jet con gli oggetti di accesso ai dati (DAO) di Visual Basic.
L'API ODBC per l'accesso a database esterni con un driver ODBC.
La DB-Library API con il controllo aggiuntivo VBSQL per l'accesso a Microsoft SQL Server.
Controlli aggiuntivi e driver di altri produttori per l'accesso a database.

È possibile utilizzare gli oggetti di accesso ai dati o il controllo Data di Visual Basic per gestire database sia nel formato MDB del modulo Jet che in altri formati di database ISAM installabili tra cui Fox, dBASE, Excel, Btrieve, Paradox e testo delimitato. Il modulo Jet può inoltre essere utilizzato per l'accesso a Microsoft SQL Server e ai database a cui è possibile accedere con un driver ODBC utilizzando lo stesso codice DAO o il controllo Data. La versione 2.5 del modulo Jet viene fornita con Visual Basic e non è pertanto necessario installare altri driver o DLL.

Interfacce di database basate sull'API
Il controllo aggiuntivo VBSQL richiede file di dichiarazioni, driver e DLL non inclusi in Visual Basic, ma ottenibili presso i rivenditori Microsoft. È inoltre possibile utilizzare l'API ODBC includendo le relative istruzioni di dichiarazione API ODBC in un modulo globale. Con entrambi i metodi API è possibile ottenere un maggior controllo sul server di database esterni e quindi migliori prestazioni, anche se il codice risulta più complesso. Non è possibile utilizzare il controllo Data o oggetti di accesso ai dati, ma utilizzando queste tecniche API dovrebbe essere possibile gestire i controlli associati a dati nel codice.

L'utilizzo del controllo Data rappresenta il metodo più semplice per la creazione di applicazioni che consentono di accedere ai dati di un database. Con questo controllo è infatti possibile eseguire la maggior parte delle operazioni di accesso ai dati senza scrivere alcuna riga di codice. I controlli associati al controllo Data visualizzano automaticamente i dati contenuti in un campo specifico del record corrente o più record contemporaneamente. Quando il controllo Data visualizza un diverso record, nei controlli associati a dati verranno automaticamente visualizzati i nuovi dati correnti. Se un utente modifica i dati o immette nuove informazioni, quando il controllo Data visualizza un nuovo record le modifiche verranno automaticamente salvate nel database.
Tutte le operazioni del controllo Data vengono eseguite dal modulo Jet in modo che il controllo possa aprire e gestire i database supportati dal modulo Jet, compresi i tipi di database ODBC e ISAM installabili.
Importante Per accedere agli oggetti di accesso ai dati, al controllo Data o ad uno dei controlli associati a dati definiti nel codice, è necessario che sia stata attivata la casella di controllo corrispondente alla libreria degli oggetti Microsoft DAO 2.5 nella finestra di dialogo Riferimenti. Per impostazione predefinita, la libreria è inclusa nel file AUTOLOAD.MAK. Se non si specifica questo riferimento, la compilazione del codice potrebbe avere esito negativo. L'errore visualizzato indica in genere la presenza di un tipo definito dall'utente non definito.

Oggetti di accesso ai dati
Le due versioni di Visual Basic, ovvero l'Edizione Standard e l'Edizione Professional supportano entrambe gli oggetti di accesso ai dati (DAO) quali DBEngine, Workspace, Database, TableDef, Field, Index e Recordset
. Nell'Edizione Standard non è possibile dichiarare nuovi oggetti di accesso ai dati utilizzando la parola chiave Dim, ma è possibile gestire quelli creati dal controllo Data.
Un oggetto Database include un certo numero di oggetti di accesso ai dati, quali gli oggetti TableDef che definiscono tabelle, gli oggetti Field che definiscono campi e così via. Per ciascun oggetto è disponibile una serie specifica di proprietà e metodi. Le proprietà di alcuni oggetti sono insiemi di altri oggetti. Per un oggetto Database è disponibile un insieme TableDefs di oggetti TableDef, mentre per un oggetto TableDef è disponibile un insieme Fields di oggetti Field, esattamente come per un oggetto Form è disponibile un insieme Controls. Quando si scrive il codice o si utilizza il controllo Data per recuperare dati dal database, ciascun oggetto Recordset creato viene aggiunto all'insieme Recordsets. Per gestire i dati e la struttura del database, è necessario scrivere del codice che acceda a questi oggetti strutturati.
Per impostare la proprietà Recordset del controllo Data sul valore del campo PubID del record corrente, ad esempio, è possibile utilizzare il seguente codice:
Data1.Recordset.Fields("PubID").Value = 99
In modo analogo agli altri controlli, gli oggetti di accesso ai dati hanno un insieme o proprietà predefiniti. L'insieme predefinito di un oggetto Recordset, ad esempio, è l'insieme Fields mentre la proprietà predefinita di un oggetto Field è la proprietà Value. L'utilizzo di queste impostazioni predefinite consente di semplificare il codice. Il codice riportato di seguito, ad esempio, è equivalente al codice riportato sopra:
Data1.RecordSource = "Publishers"
Data1.Refresh
Data1.Recordset("PubID") = 99
Nota Visual Basic versione 4.0 supporta solo le proprietà predefinite degli oggetti Field, Property e Parameter. L'oggetto TableDef, ad esempio, non supporta più la proprietà Name come impostazione predefinita. Per poterla utilizzare è necessario modificare il codice.

Nell'Edizione Professional è possibile dichiarare nuove variabili per oggetti di accesso ai dati con tutti i tipi di oggetto che utilizzano le istruzioni Dim e Set. Il codice che segue, ad esempio, consente di creare variabili oggetto per un oggetto Database, un oggetto Recordset di tipo dynaset e un oggetto Field:
Dim MyDb As Database, MyRs As Recordset, MyFd As Field
Set MyDb = OpenDatabase("BIBLIO.MDB")
Set MyRs = MyDb.OpenRecordset("Authors", dbOpenDynaset)
Set MyFd = MyRs.Fields("Au_ID")
È possibile utilizzare variabili oggetto e altre caratteristiche DDL per modificare la struttura del database. Il codice che segue, ad esempio, consente di aggiungere un nuovo oggetto Field ad una tabella esistente:
Dim MyDb As Database, MyTd as TableDef, MyFd As Field
Set MyDb = OpenDatabase("BIBLIO.MDB") ' Apre il database.
Set MyTd = MyDb.TableDefs("Authors")
Set MyFd = MyTd.CreateField("Address", dbText, 20)
MyTd.Fields.Append MyFd ' Aggiunge i campi TableDef.
Il codice crea una variabile oggetto New per un oggetto Field e la aggiunge a TableDef utilizzando il metodo Append. Dato che TableDef contiene la definizione di una tabella, nella tabella sarà ora disponibile un campo per l'immissione di dati denominato Address. Con una procedura simile è possibile creare nuove tabelle e nuovi indici.

Oggetti DBEngine e Workspace
Tutti gli oggetti di accesso ai dati derivano dall'oggetto DBEngine, che rappresenta il modulo Jet. Quando l'applicazione viene avviata, il modulo Jet crea un oggetto DBEngine.Workspace predefinito a cui è possibile fare riferimento mediante l'insieme Workspaces (Workspaces(0)). Gli oggetti Workspace aggiuntivi possono essere aperti in qualsiasi momento. A ciascuno di questi oggetti sono associati un codice identificativo, o ID, e una password.
Nota Se non si devono gestire database protetti o creare un'area di validità per transazioni distinte, non è necessario fare riferimento agli oggetti DBEngine o Workspace. Per impostazione predefinita viene utilizzato l'oggetto DBEngine.
Workspaces(0). Per aprire un database utilizzando l'accesso ai dati, ad esempio, e creare un Recordset di tipo tabella, è possibile scrivere il seguente codice:
Dim Db as Database, Rs as Recordset
Set Db = OpenDatabase("BIBLIO.MDB")
Set Rs = Db.OpenRecordset("Titles")
Tutti gli oggetti Database aperti sulla base di un oggetto Workspace hanno la stessa area di validità per le transazioni. Ciò significa che i metodi BeginTrans e CommitTrans utilizzati in un determinato database verranno applicati a tutti i database aperti nell'oggetto Workspace.
Tutti gli oggetti Database creati dal controllo Data sono inclusi in Workspaces(0). Se, tuttavia, si crea un oggetto Recordset in un altro oggetto Workspace utilizzando l'accesso ai dati, sarà possibile gestirlo con un controllo
Data.

Protezione
È possibile limitare l'accesso a uno o più database MDB o alle relative tabelle utilizzando le impostazioni di protezione definite dal modulo Jet. Nel codice è possibile specificare oggetti Group e User per la definizione dell'area di validità e del livello di permessi disponibili ai singoli utenti per ogni singolo oggetto. È possibile, ad esempio, definire i permessi in modo che un determinato utente possa avere accesso di sola lettura ad una tabella e pieno accesso ad un'altra.
Importante Per poter specificare o modificare le impostazioni di protezione, è necessario avere accesso al file SYSTEM.MDW associato al database MDB e che può essere creato solo con una speciale utilità inclusa in Microsoft Access. Se questo file non è disponibile, nell'applicazione non sarà possibile attivare la protezione per un database MDB.

Oggetti e insiemi di accesso ai dati
Gli oggetti e gli insiemi di accesso ai dati (DAO) forniscono uno schema di supporto per l'utilizzo del codice che consente di creare e gestire i componenti di un modulo di gestione di database. Tali oggetti ed insiemi includono inoltre proprietà che descrivono le caratteristiche dei componenti del database ed i metodi per la loro gestione. Lo schema di contenimento consente di creare relazioni tra oggetti e insiemi. Tali relazioni rappresentano a loro volta la struttura logica del modulo di gestione di database in uso.
Oggetti ed insiemi utilizzano diversi tipi di relazioni di contenimento. Gli oggetti possono contenere un numero qualsiasi di insiemi, tutti di tipo diverso, oppure nessun insieme. Gli insiemi possono contenere un numero qualsiasi di oggetti, tutti dello stesso tipo, oppure nessun oggetto. Oggetti ed insiemi sono elementi simili, ma si differenziano nei due tipi di relazioni.
Nota
Se il progetto non fa riferimento alla libreria degli oggetti Data Access (DA) nel Visualizzatore oggetti, non sarà disponibile nessuno degli oggetti di accesso ai dati. Per rendere disponibili gli oggetti, scegliere Riferimenti dal menu Strumenti e selezionare la libreria degli oggetti DAO appropriata nella finestra di dialogo Riferimenti. Per ulteriori informazioni, vedere Attivazione di oggetti di accesso ai dati.
Se per il modulo di gestione di database Microsoft Jet non è disponibile alcun file SYSTEM.MDW, l'applicazione non sarà in grado di utilizzare nessuna delle funzioni di protezione. Per ulteriori informazioni, vedere Attivazione della protezione.
Nella tabella seguente, il tipo di insieme nella prima colonna contiene il tipo di oggetto nella seconda colonna, mentre nella terza colonna è riportata una descrizione di ciò che ciascun tipo di oggetto rappresenta.
| Insieme | Oggetto | Descrizione |
| Columns | Column | Utilizzato per la memorizzazione di informazioni di colonna per il controllo DBGrid. |
| Containers | Container | Area di memorizzazione di informazioni relative ad un tipo di oggetto predefinito. |
| Databases | Database | Un database aperto. |
| Nessuno | DBEngine | Il modulo di gestione di database Microsoft Jet. |
| Documents | Document | Informazioni su un oggetto predefinito salvato. |
| Errors | Error | Informazioni su qualsiasi errore associato all'oggetto specificato. |
| Fields | Field | Una colonna parte di una abella, di una query, di un indice, di una relazione o di un set di record. |
| Groups | Group | Un gruppo di account utente |
| Indexes | Index | Ordinamento predefinito e univocità dei valori in una tabella. |
| Parameters | Parameter | Un parametro per una query con parametri. |
| Properties | Property | Una proprietà incorporata o definita dall'utente. |
| QueryDefs | QueryDef | Una definizione della query salvata. |
| Recordsets | Recordset | I record in una tabella di base o in una query. |
| Relations | Relation | Relazione tra due campi nelle tabelle e nelle query. |
| SelBookmarks | Segnalibro | Insieme di righe selezionate nell'oggetto DBGrid. |
| TableDefs | TableDef | Una definizione della tabella salvata. |
| Users | User | Un account utente. |
| Workspaces | Workspace | Una sessione del modulo di gestione di database Jet. |

L'applicazione è in grado di accedere ai dati da database esterni, tra i quali database Microsoft Jet (MDB), database ODBC o database ISAM installabili.
Il metodo più efficace per accedere a dati esterni consiste nell'allegare una tabella esterna ad un database Microsoft Jet esistente. Questa operazione crea un riferimento alla tabella esterna e la salva nel database Jet. Questo collegamento memorizzato gestisce un record della struttura della tabella del database. Nessun dato del database esterno viene memorizzato nel file MDB.
Con le tabelle allegate è possibile creare oggetti Recordset di tipo dynaset e snapshot.

Come allegare una tabella ad un database Jet esistente
Creare le variabili per gli oggetti Database e TableDef che si desidera modificare:
Dim tdf As TableDef, dbs As Database
Utilizzare il metodo OpenDatabase per aprire il database esistente:
Set dbs = OpenDatabase("C:\DATABASE\MIODB.MDB")
Creare un oggetto TableDef per la tabella esterna:
Set tdf = dbs.CreateTableDef("Dettaglio clienti")
Impostare le proprietà dell'oggetto TableDef per fare riferimento alla tabella allegata:
tdf.Connect = "ODBC;DSN=SSRVR1;UID=Marco;PWD=RHS;DATABASE=SQLDB;"
tdf.SourceTableName = "DettClienti"
Allegare l'oggetto TableDef all'insieme TableDefs tramite il metodo Append. In questo passaggio l'oggetto viene effettivamente creato nel file di database.
Nota Sebbene questo metodo rappresenti il modo più efficace di accedere ai dati memorizzati in altri database Microsoft Jet, ODBC e ISAM, non supporta le query SQL pass-through. Se per l'applicazione è necessario il supporto delle query SQL pass-through, vedere Utilizzo di query SQL pass-through.
Le fonti dati disponibili negli oggetti DAO presentano a volte particolari considerazioni per l'utilizzo dei dati. I seguenti argomenti forniscono ulteriori informazioni dettagliate sull'utilizzo di queste fonti dati.
Se l'applicazione richiede al driver di database esterno un particolare funzionamento, è possibile che si desideri modificare le impostazioni del registro o del file INI relative al driver per assicurarsi che corrispondano alle richieste dell'applicazione. I seguenti argomenti forniscono ulteriori informazioni sull'inizializzazione di ciascun driver.

Fornisce l'accesso ai dati memorizzati nei database utilizzando uno dei tre tipi di oggetto Recordset. Il controllo Data consente di spostarsi da un record all'altro e di visualizzare e gestire i dati dei record nei controlli associati. Senza un controllo Data, i controlli di un form predisposti al collegamento con database (controlli associati) non potranno accedere automaticamente ai dati.
È possibile eseguire la maggior parte delle operazioni di accesso ai dati utilizzando il controllo Data senza che sia necessario scrivere alcun codice. I controlli predisposti al collegamento con database associati ad un controllo Data visualizzano automaticamente i dati di uno o più campi per il record corrente oppure in alcuni casi per un set di record su un lato qualsiasi del record corrente. Il controllo Data esegue tutte le operazioni sul record corrente.
Se il controllo Data è stato impostato in modo che si sposti su un record diverso, tutti i controlli associati passeranno automaticamente qualsiasi modifica al controllo Data da salvare nel database. Il controllo Data si sposterà quindi sul record richiesto e passerà di nuovo i dati dal record corrente ai controlli associati nei quali è visualizzato.
Il controllo Data gestisce automaticamente un certo numero di condizioni tra le quali la presenza di set di record vuoti, l'aggiunta di nuovi record, la modifica e l'aggiornamento di record esistenti e la gestione di alcuni tipi di errore. In applicazioni più sofisticate è tuttavia necessario prevedere l'intercettazione di alcune condizioni di errore che il controllo Data non è in grado di gestire. Se il modulo di gestione di database Microsoft Jet, ad esempio, non è in grado di accedere al file del database, non dispone dell'autorizzazione necessaria oppure non è in grado di eseguire la query come appare nel codice, verrà generato un errore intercettabile. Se l'errore è causato da errori interni oppure viene generato prima che vengano avviate le routine dell'applicazione, verrà generato l'evento Error.

I controlli DBList, DBCombo e DBGrid sono tutti in grado di gestire dei set di record quando sono associati ad un controllo Data. Tutti questi controlli consentono la visualizzazione o la gestione di più record alla volta.
Anche i controlli CheckBox, TextBox, Label, Picture, Image, ListBox e ComboBox sono predispoti al collegamento con database e possono essere associati ad un singolo campo di un oggetto Recordset gestito dal controllo Data. Altri controlli predisposti al collegamento con database, come i controlli MaskedEdit e 3DCheckBox, sono disponibili nell'Edizione Professional e presso altri produttori.
Una volta avviata l'applicazione, le proprietà del controllo Data verranno utilizzate in Visual Basic per aprire il database selezionato, creare un oggetto Database e un oggetto Recordset. Le proprietà Database e Recordset del controllo Data fanno riferimento agli ultimi oggetti Database e Recordset creati che possono essere gestiti indipendentemente dal controllo Data, ovvero con o senza controlli associati.
Quando in Visual Basic viene utilizzato il modulo di gestione di database Jet per creare un oggetto Recordset, non potranno verificarsi altre operazioni o eventi Visual Basic fino a quando l'operazione non sarà terminata. Durante la creazione dell'oggetto Recordset è tuttavia consentita l'esecuzione di altre applicazioni per Windows. Se si preme CTRL+INTERR mentre il modulo di gestione di database Jet sta creando un oggetto Recordset, l'operazione verrà interrotta, verrà generato un errore intercettabile e la proprietà Recordset del controllo Data verrà impostata su Nothing. In fase di progettazione, premendo CTRL+INTERR una seconda volta verrà visualizzata la finestra Debug.
Quando si utilizza un controllo Data per creare un oggetto Recordset oppure si crea un oggetto Recordset nel codice e lo si assegna al controllo Data, il modulo di gestione di database Microsoft Jet compila automaticamente l'oggetto Recordset. I segnalibri e i dati del set di record per gli oggetti Recordset di tipo snapshot vengono quindi salvati nella memoria locale. L'utente non dovrà gestire il controllo Data e non sarà necessario richiamare il metodo MoveLast nel codice. I blocchi di pagina utilizzati per creare l'oggetto Recordset vengono liberati più rapidamente, rendendo possibile l'accesso agli stessi dati da parte di altri oggetti Recordset. Gli oggetti Recordset creati nel codice ma non assegnati al controllo Data non verranno compilati automaticamente dal modulo Jet e dovranno essere compilati tramite codice.
È possibile gestire il controllo Data con il mouse, spostandosi da un record all'altro oppure all'inizio o alla fine dell'oggetto Recordset. Il controllo Data non consente di spostarsi oltre la fine dell'oggetto Recordset utilizzando il mouse e non può essere evidenziato.

Utilizzare l'evento Validate e la proprietà DataChanged per eseguire gli ultimi controlli sui record scritti nel database.

È possibile utilizzare gli oggetti di accesso ai dati Database e Recordset creati dal controllo Data nelle routine. Per gli oggetti Database e Recordset sono disponibili proprietà e metodi propri che possono essere utilizzati per scrivere routine per la gestione dei dati.
Il metodo MoveNext di un oggetto Recordset, ad esempio, sposta il record corrente al record successivo nell'oggetto Recordset. Per richiamare questo metodo, è possibile utilizzare il seguente codice:
Data1.Recordset.MoveNext
Il controllo Data consente di accedere ad uno qualsiasi dei tre tipi di oggetto Recordset del modulo di gestione di database Jet versione 2.5. Se non si seleziona un tipo di oggetto Recordset, verrà creato un oggetto Recordset di tipo dynaset.
Nota Le costanti utilizzate per richiedere un tipo specifico di Recordset quando si utilizza il controllo Data sono diverse dalle costanti utilizzate per determinare il tipo di oggetto Recordset creato o per creare un oggetto Recordset con il metodo OpenRecordset.
Per selezionare un tipo specifico di oggetto Recordset, impostare la proprietà RecordsetType del controllo Data come indicato di seguito:
Tipo di Recordset Valore Costante
Tabella 0 vbRSTypeTable
Dynaset 1 (Predefinita) vbRSTypeDynaset
Snapshot 2 vbRSTypeSnapshot
Importante In Visual Basic versione 4.0, il controllo Data non consente più di creare o di accedere agli oggetti Dynaset. Per questo motivo, alcuni dei metodi dell'oggetto Dynaset non sono supportati se utilizzati con un oggetto Recordset creato con il controllo Data. I metodi ListFields, ListIndex, CreateDynaset e CreateSnapshot, ad esempio, non sono supportati. Tutti i restanti metodi e proprietà dell'oggetto Dynaset sono supportati dall'oggetto Recordset di tipo dynaset. Si noti che in alcuni casi, le proprietà valide se utilizzate con oggetti Dynaset non sono valide per tutti i tipi di oggetti Recordset creabili con il controllo Data. La proprietà Sort, ad esempio, è valida per gli oggetti Dynaset e Recordset di tipo Dynaset, ma non per gli oggetti Recordset di tipo tabella. Il controllo Data non consente inoltre di accedere ad oggetti Recordset creati con l'opzione dbForwardOnly impostata.

Per quanto riguarda l'accesso ai dati, la principale differenza tra Visual Basic Edizione Standard ed Edizione Professional consiste nella capacità di creare nuovi oggetti di accesso ai dati. In Visual Basic Edizione Standard, non è possibile dichiarare con la parola chiave Dim le variabili come oggetti di accesso ai dati nel codice. Solo il controllo Data consente di creare oggetti Database e Recordset.
In Visual Basic versione 4.0 Edizione Professional, è possibile creare un nuovo oggetto Recordset e assegnarlo alla proprietà Recordset del controllo Data. Tutti i controlli associati al controllo Data consentono la gestione dei record dell'oggetto Recordset creato. Assicurarsi che le proprietà DataField del controllo associato siano impostate su nomi di campo validi per il nuovo oggetto Recordset.

Un'altra importante opzione disponibile quando si utilizza il controllo Data è la capacità di eseguire query memorizzate. Se è disponibile un oggetto QueryDef, il controllo Data potrà eseguirlo e creare un oggetto Recordset utilizzando le proprietà memorizzate SQL, Connect e altre proprietà dell'oggetto QueryDef. Per eseguire un oggetto QueryDef, impostare la proprietà RecordSource del controllo Data sul nome dell'oggetto QueryDef e utilizzare il metodo Refresh.
Se l'oggetto QueryDef memorizzato contiene dei parametri, sarà necessario creare l'oggetto Recordset e passarlo al controllo Data.

Il controllo Data consente inoltre di gestire gli eventi che vengono generati quando si utilizza un oggetto Recordset che non contiene record. Modificando la proprietà EOFAction, è possibile programmare il controllo Data in modo che venga attivata automaticamente la modalità AddNew.
È possibile programmare il controllo Data in modo che venga posizionato automaticamente sulla parte superiore o inferiore del form principale corrispondente utilizzando la proprietà Align. In entrambi i casi, il controllo Data viene ridimensionato orizzontalmente in modo che si adatti alla larghezza del form principale ogni volta che quest'ultimo viene ridimensionato. Questa proprietà consente di collocare un controllo Data su un form MDI senza che sia necessario inserirlo in un controllo Picture.

Informazioni generali sugli oggetti DAO
Gli oggetti DAO (Data Access Objects) consentono di utilizzare un linguaggio di programmazione per accedere e gestire i dati di un database e i database stessi, inclusi i relativi oggetti e la struttura.


Modulo di gestione di database Microsoft Jet
È possibile utilizzare gli oggetti DAO per gestire database in formato MDB nativo del modulo di gestione di database Jet o in altri formati di database ISAM installabile, tra i quali Fox, dBASE, Excel, Btrieve, Paradox e testo delimitato. È inoltre possibile utilizzare il modulo di gestione di database Microsoft Jet per accedere a Microsoft SQL Server e a qualsiasi altro database al quale è possibile avere accesso con un driver ODBC utilizzando lo stesso codice DAO.

È possibile dichiarare nuove variabili DAO per qualsiasi tipo di oggetto utilizzando le istruzioni Dim e Set. Il codice seguente, ad esempio, crea variabili oggetto per un oggetto Database, un oggetto Recordset di tipo dynaset e un oggetto Field:
Dim dbs As Database, rst As Recordset, fld As Field
Set dbs = OpenDatabase("BIBLIO.MDB")
Set rst = dbs.OpenRecordset("Authors", dbOpenDynaset)
Set fld = rst.Fields("Au_ID")
Gli oggetti DAO dispongono di un insieme o di una proprietà predefinita. L'insieme predefinito di un oggetto Recordset, ad esempio, è l'insieme Fields mentre la proprietà predefinita di un oggetto Field è la proprietà Value. L'utilizzo di queste impostazioni predefinite consente di semplificare il codice. Il codice seguente, ad esempio, imposta il valore del campo PubID nel record corrente:
Set rst = dbs.OpenRecordset("Publishers", dbOpenDynaset)
rst!PubID=99
Per modificare la struttura del database, è possibile utilizzare le variabili oggetto e altre caratteristiche DDL. È ad esempio possibile aggiungere un nuovo oggetto Field ad una tabella esistente utilizzando il codice seguente:
Dim dbs As Database, tdf as TableDef, fld As Field
Set dbs = OpenDatabase("BIBLIO.MDB") ' Apre il database.
Set tdf = dbs.TableDefs("Authors")
Set fld = tdf.CreateField("Address", dbText, 20)
tdf.Fields.Append fld ' Allega ai campi TableDef.
Il codice precedente crea una nuova variabile oggetto per un oggetto Field e la aggiunge ad un oggetto TableDef tramite il metodo Append. Dal momento che l'oggetto TableDef contiene la definizione di una tabella, la tabella dispone ora di un campo per l'immissione di dati denominato Address. Analogamente, è possibile creare nuove tabelle e nuovi indici.

Tutti gli oggetti DAO sono derivati dall'oggetto DBEngine che rappresenta il modulo di gestione di database Jet. All'avvio dell'applicazione, Jet crea un oggetto predefinito DBEngine.Workspace al quale è possibile fare riferimento tramite l'insieme Workspaces (Workspaces(0)). Se necessario, è possibile aprire ulteriori oggetti Workspace. Ciascun oggetto Workspace dispone di un ID utente e di una password associati ad esso.
Nota A meno che sia necessario gestire database con protezione attivata o creare un'area di validità della transazione distinta, non è necessario fare riferimento agli oggetti DBEngine o Workspace. Se non viene fatto riferimento esplicito all'oggetto predefinito DBEngine.Workspaces(0), esso viene comunque presupposto. Per aprire, ad esempio, un database che utilizza gli oggetti DAO e creare un oggetto Recordset di tipo tabella, è possibile scrivere il codice seguente:
Dim dbs as Database, rst as Recordset
Set dbs = OpenDatabase("BIBLIO.MDB")
Set rst = dbs.OpenRecordset("Titles")
Tutti gli oggetti Database aperti per un oggetto Workspace condividono un'area di validità della transazione comune, vale a dire che quando si utilizza il metodo BeginTrans su un database, esso viene applicato a tutti gli altri database aperti nell'oggetto Workspace. Analogamente, se si utilizza il metodo CommitTrans per un database, il metodo viene applicato a tutti gli altri database aperti nell'oggetto Workspace.

È possibile limitare l'accesso ad uno o più database MDB o alle relative tabelle utilizzando le impostazioni della protezione stabilite e gestite dal modulo di gestione di database Jet. Nel codice, è possibile stabilire oggetti Group e User per definire per ciascun oggetto specifico l'area di validità e il livello di permessi disponibili per i singoli utenti. È ad esempio possibile stabilire permessi per un utente specifico per consentire l'accesso di sola lettura per una tabella e l'accesso completo per un'altra tabella.
Importante Per poter stabilire o modificare le impostazioni della protezione, è necessario ottenere l'accesso al file di database del sistema associato al database MDB. Questo file può essere creato solo da una particolare utilità inclusa in Microsoft Access versione 2.0 o successive. Senza questo file, l'applicazione non è in grado di attivare la protezione per un database MDB.

Oggetto Workspace e insieme Workspaces
Un oggetto Workspace definisce una sessione per l'utente. L'oggetto contiene database aperti e fornisce i meccanismi per le transazioni contemporanee e per un gruppo di lavoro protetto.
L'insieme Workspaces contiene tutti gli oggetti Workspace attivi e non nascosti dell'oggetto DBEngine.
Osservazioni
Utilizzare l'oggetto Workspace per gestire la sessione corrente o per dare inizio ad un'altra sessione. In una sessione è possibile aprire più database, gestire transazioni ed attivare un tipo di protezione basato su nomi utenti e password. È possibile ad esempio:
Creare un oggetto Workspace utilizzando le proprietà Name, Password e UserName per aprire una sessione denominata e protetta da una password. Durante la sessione viene creata un'area di validità nella quale è possibile aprire più database e condurre un'istanza di transazioni nidificate. Per chiudere la sessione, è possibile utilizzare il metodo Close.
Utilizzare il metodo OpenDatabase per aprire uno o più database esistenti nell'oggetto Workspace.
Utilizzare i metodi BeginTrans, CommitTrans e Rollback per gestire l'elaborazione di transazioni nidificate durante una sessione e utilizzare diversi oggetti Workspace per condurre più transazioni contemporanee in sovrapposizione.
Utilizzare la proprietà IsolateODBCTrans per isolare più transazioni che riguardano lo stesso database ODBC.
Note
Se il progetto non fa riferimento alla libreria degli oggetti Data Access (DA) nel Visualizzatore oggetti, non sarà disponibile nessuno degli oggetti di accesso ai dati. Per rendere disponibili gli oggetti, scegliere Riferimenti dal menu Strumenti e selezionare la libreria degli oggetti DAO appropriata nella finestra di dialogo Riferimenti. Per ulteriori informazioni, vedere Attivazione di oggetti di accesso ai dati.
Se per il modulo di gestione di database Microsoft Jet non è disponibile alcun file SYSTEM.MDW, l'applicazione non sarà in grado di utilizzare nessuna funzione di protezione. Per ulteriori informazioni, vedere Attivazione della protezione.
Quando il modulo di gestione di database Jet viene avviato, verrà creata automaticamente l'area di lavoro predefinita, DBEngine.Workspaces(0). Le impostazioni delle proprietà Name e UserName dell'area di lavoro predefinita sono rispettivamente "#Default Workspace#" e "Admin". Se la protezione è attivata, la proprietà UserName verrà impostata sul nome dell'utente che si è connesso al sistema. Se si utilizza il metodo OpenDatabase senza specificare un oggetto Workspace, verrà utilizzata l'area di lavoro predefinita DBEngine.Workspaces(0).
Quando si utilizzano transazioni, tutti i database dell'oggetto Workspace specificato vengono coinvolti, anche se nell'area di lavoro sono stati aperti più oggetti Database. Se ad esempio viene utilizzato un metodo BeginTrans, vengono aggiornati diversi record di un database e vengono eliminati record in un altro database, quando si utilizza il metodo Rollback, entrambe le operazioni di aggiornamento e di eliminazione verranno annullate. È possibile creare oggetti Workspace aggiuntivi che consentono di gestire le transazioni in modo indipendente nei vari oggetti Database.
Dopo aver creato un nuovo oggetto Workspace con il metodo CreateWorkSpace dell'oggetto DBEngine, sarà necessario aggiungerlo all'insieme Workspaces per potervi fare riferimento all'interno dell'applicazione. È possibile tuttavia utilizzare nuovi oggetti Workspace senza doverli aggiungere all'insieme Workspaces.
Per riferirsi a qualsiasi altro oggetto Workspace creato e aggiunto all'insieme in base all'impostazione della proprietà Name corrispondente è possibile utilizzare la seguente sintassi:
Workspaces("nome")
È inoltre possibile riferirsi a oggetti Workspace aggiunti in base alla loro posizione nell'insieme Workspaces utilizzando la seguente sintassi, dove n è il membro nesimo dell'insieme Workspaces:
DBEngine.Workspaces(n)

Oggetto Database e insieme Databases
Un oggetto Database rappresenta un database aperto.
Un insieme Databases contiene tutti gli oggetti Database aperti o creati in un oggetto Workspace del modulo di gestione di database Microsoft Jet.

Osservazioni
Per gestire un database aperto, utilizzare un oggetto Database ed i metodi e le proprietà corrispondenti. È possibile esaminare gli insiemi in un oggetto Database per comprenderne la struttura delle tabelle, delle query e delle relazioni. È inoltre possibile utilizzare gli insiemi per modificare o creare tabelle, query, set di record e relazioni. È possibile, ad esempio:
Utilizzare il metodo Execute per eseguire un'azione QueryDef o passare una stringa SQL ad un database ODBC (Open Database Connectivity) .
Utilizzare il metodo OpenRecordset per creare un nuovo oggetto Recordset direttamente dall'oggetto Database.
Utilizzare il metodo Close per chiudere un database aperto.
Nota Se il progetto non fa riferimento alla libreria degli oggetti Data Access (DA) nel Visualizzatore oggetti, non sarà disponibile nessuno degli oggetti di accesso ai dati. Per rendere disponibili gli oggetti, scegliere Riferimenti dal menu Strumenti e selezionare la libreria degli oggetti DAO appropriata nella finestra di dialogo Riferimenti. Per ulteriori informazioni, vedere Attivazione di oggetti di accesso ai dati.
Per creare un nuovo oggetto Database permanente ed aggiungerlo all'insieme Databases, salvandolo quindi su disco, utilizzare il metodo CreateDatabase. Una volta creato il database, è necessario creare nuove tabelle per i dati. È inoltre possibile creare nuovi indici e relazioni tra tabelle, allegare tabelle esterne esistenti o definire uno schema di protezioni utilizzando autorizzazioni, gruppi e utenti.
Per aprire un oggetto Database esistente, utilizzare il metodo OpenDatabase
, che consente di aggiungere l'oggetto all'insieme Databases. Il metodo OpenDatabase può essere applicato all'oggetto Workspace predefinito (0) oppure ad un diverso oggetto Workspace aperto.
Se con un oggetto Database viene utilizzato uno dei metodi per le transazioni (
BeginTrans, CommitTrans o Rollback), tale metodo verrà applicato a tutti i database aperti nell'oggetto Workspace dal quale è stato aperto l'oggetto Database. Per utilizzare transazioni indipendenti è necessario aprire un oggetto Workspace aggiuntivo e quindi aprire con esso un altro oggetto Database. Nell'esempio seguente vengono creati due oggetti Database distinti:
Dim Db1 As Database, DB2 As Database, Ws As Workspace, WS2 As Workspace
Dim MyUserName As String
Set Ws = Workspaces(0) ' Utilizza l'oggetto Workspace predefinito.
Set Db1 = Ws.OpenDatabase("MIODB.MDB")
' Legge UserName dell'oggetto Workspace predefinito.
MyUserName = Ws.UserName
' Crea un nuovo oggetto Workspace.
Set WS2 = DBEngine.CreateWorkspace("Special", MyUserName, "SpecialPW")
Set Db2 = WS2.OpenDatabase("MIODB.MDB")
Per creare un oggetto Database, oltre al metodo OpenDatabase è possibile utilizzare la funzione OpenDatabase di versioni precedenti. In questo caso viene sempre utilizzato l'oggetto Workspaces(0) predefinito.
Non è necessario specificare l'oggetto DBEngine se si utilizza il metodo OpenDatabase. È necessario infatti specificare un oggetto Workspace specifico solo se si deve aprire un oggetto Database in un contesto di transazione separato. Le seguenti istruzioni sono ad esempio equivalenti:
Set Db = DBEngine.Workspaces(0).OpenDatabase("MIODB.MDB")
Set Db = Workspaces(0).OpenDatabase("MIODB.MDB")
Set Db = OpenDatabase("MIODB.MDB")
Se si apre un database con tabelle allegate, il collegamento ai file esterni specificati o a database ODBC esterni non verrà effettuato automaticamente, ma dovrà esistere un riferimento agli oggetti TableDef o Field della tabella oppure dovrà essere aperto un oggetto Recordset. Se i collegamenti alle tabelle specificate non possono essere effettuati, si verificherà un errore intercettabile. Può inoltre essere necessario disporre dell'autorizzazione all'accesso al database o il database può già essere stato aperto in modo esclusivo da un altro utente. Anche in questi casi si verificherà un errore intercettabile.
È inoltre possibile aprire un database esterno direttamente, invece di aprire un database Jet con collegamenti alle tabelle del database. Il modulo di gestione di database Jet supporta vari database esterni, quali FoxPro, dBASE, Btrieve, Paradox e database ODBC come Microsoft SQL Server. Per ulteriori informazioni, vedere il metodo OpenDatabase. Per aprire un database FoxPro, ad esempio, è possibile utilizzare il seguente codice:
Dim Db As Database
Set Db = Workspaces(0).OpenDatabase("C:\FoxFiles", _
False,False,"FoxPro 2.5")
Dopo aver aperto un database esterno, è possibile esaminare la proprietà Connect dell'oggetto Database e determinare i parametri utilizzati per accedervi. Se si apre direttamente un database ODBC esterno, non è possible utilizzare oggetti Recordset di tipo tabella.
Ogni volta che si apre direttamente un database ODBC esterno, viene stabilita una connessione al server del database esterno. Il modulo di gestione di database Jet esegue inoltre query aggiuntive del database che consentono di determinare la struttura delle tabelle alle quali si è avuto accesso. Evitare quindi di aprire direttamente database esterni. La possibilità di accedervi è disponibile solo per motivi di compatibilità con versioni precedenti.
Il metodo Close consente di rimuovere un oggetto Database dall'insieme Databases senza doverlo eliminare dal disco. Tutti gli oggetti Recordset vengono chiusi automaticamente quando si chiude l'oggetto Database.
Una volta terminata una routine che dichiara un oggetto Database, gli oggetti Database locali e tutti gli oggetti Recordset aperti verranno chiusi. Qualsiasi aggiornamento e transazione in sospeso saranno persi, ma non si verificherà un errore intercettabile. È consigliabile completare qualsiasi transazione o modifica in sospeso e chiudere gli oggetti Recordset e Database prima di uscire da routine che dichiarano queste variabili di oggetto a livello locale.
Il primo database che viene aperto è Databases(0). L'impostazione della proprietà Name di un database è una stringa che specifica il percorso del file del database. La proprietà Connect specifica il tipo del database ed altri parametri per il collegamento a database esterni. Per riferirsi ad un qualsiasi oggetto Database impostato con la proprietà Name, utilizzare la seguente sintassi:
Databases("nome")
È inoltre possibile riferirsi all'oggetto in base al numero ordinale corrispondente e utilizzando la seguente sintassi, nella quale viene fatto riferimento al primo elemento dell'insieme Databases:
Databases(0)

Apre il database specificato in una sessione e restituisce un riferimento all'oggetto Database che lo rappresenta. Il database aperto verrà aggiunto automaticamente all'insieme Databases.
Sintassi
Set database = areadilavoro.OpenDatabase(nomedb[, esclusivo[, solalettura[, fonte]]])
La sintassi del metodo OpenDatabase è composta dalle seguenti parti:
Parte Descrizione
database Variabile del tipo di dati oggetto di un oggetto Database che rappresenta l'oggetto Database da aprire.
areadilavoro Variabile del tipo di dati oggetto Workspace che rappresenta l'oggetto Workspace esistente che conterrà il database.
nomedb Espressione stringa che specifica il nome di un file di database esistente o il nome di una fonte dati ODBC registrata. Se il nome del file prevede un'estensione, è necessario specificarla. Se la rete lo supporta, è possibile specificare anche un percorso di rete, ad esempio "
\\SERVER\SHARE\MIADIR\MIODB.MDB".
Quando si utilizza nomedb è necessario tenere conto dei seguenti aspetti:
Se si riferisce a un database già aperto per l'accesso esclusivo da parte di un altro utente, verrà generato un errore.
Se non si riferisce a un database esistente o al nome di una fonte dati ODBC valida, verrà generato un errore.
Se è una stringa vuota ("") e per l'argomento fonte è specificato "ODBC;", verrà visualizzata una finestra di dialogo in cui sono elencati tutti i nomi delle fonti dati ODBC registrate da cui l'utente potrà selezionare un database.
esclusivo Valore booleano uguale a True se il database verrà aperto per l'accesso esclusivo, ovvero non condiviso, e a False se il database verrà aperto per l'accesso condiviso. Se l'argomento viene omesso, il database verrà aperto per l'accesso condiviso.
solalettura Valore booleano uguale a True se il database verrà aperto per accesso di sola lettura e a False se il database verrà aperto per l'accesso di lettura-scrittura. Se l'argomento viene omesso, il database verrà aperto per l'accesso di lettura-scrittura.
fonte Espressione stringa utilizzata per aprire il database. La stringa rappresenta gli argomenti per la connessione ODBC. Per definire la stringa fonte, è necessario specificare gli argomenti esclusivo e solalettura. Per informazioni sulla sintassi vedere Proprietà Connect.
Osservazioni
Per chiudere un database e rimuovere il relativo oggetto Database dall'insieme Databases, è necessario applicare all'oggetto il metodo Close
.
Per ulteriori informazioni sui driver ODBC, quale SQL Server, vedere il file della Guida fornito con il driver.
Nota L'argomento fonte viene espresso in due parti, ovvero il tipo di database seguito da un punto e virgola (;) e i parametri facoltativi. Il tipo di database, come "ODBC;" o "FoxPro 2.5" deve essere specificato per primo. Gli argomenti facoltativi possono essere aggiunti senza un ordine specifico, separati da punti e virgola.

Oggetto Recordset e insieme Recordsets
Un oggetto Recordset rappresenta i record di una tabella di base o i record restituiti dall'esecuzione di una query.
L'insieme Recordsets contiene tutti gli oggetti Recordset aperti di un oggetto Database.

Nota Il modulo di gestione di database Jet versione 1.1 supporta gli oggetti di accesso ai dati Table, Dynaset e Snapshot. Sebbene tali oggetti siano supportati anche dal modulo di gestione di database Jet versione 2.5/3.0, essi differiscono dagli oggetti Recordset di tipo tabella, dynaset e snapshot. Tali oggetti dispongono di proprietà e metodi analoghi, ma l'oggetto Recordset supporta numerose funzioni aggiuntive.
È comunque consigliabile utilizzare gli oggetti Recordset di tipo tabella, di tipo dynaset e di tipo snapshot ed i metodi e le proprietà associate. Per ulteriori informazioni, vedere Esempi di conversione del codice nella versione Jet 2.5/3.0.
Osservazioni
Quando si utilizzano gli oggetti di accesso ai dati, l'interazione con i dati avviene quasi esclusivamente con gli oggetti Recordset. Tutti gli oggetti Recordset vengono creati utilizzando record (righe) e campi (colonne). Esistono tre tipi di oggetti Recordset che è possibile creare:
Recordset di tipo tabella che rappresentano in linguaggio di programmazione una tabella di base con la quale è possibile aggiungere, modificare o eliminare record da una singola tabella del database.
Recordset di tipo dynaset che sono il risultato di una query i cui record possono essere aggiornati. Un oggetto Recordset di tipo dynaset è un set di record dinamico che è possibile utilizzare per aggiungere, modificare o eliminare record da una o più tabelle di origine. Tale oggetto può contenere campi di una o più tabelle di un database.
Recordset di tipo snapshot che sono immagini statiche di un set di record che è possibile utilizzare per la ricerca di dati o la generazione di report. Un oggetto Recordset di tipo snapshot può contenere campi di una o più tabelle di un database, ma non può essere aggiornato.
Nota Se il progetto non fa riferimento alla libreria degli oggetti Data Access (DA) nel Visualizzatore oggetti, non sarà disponibile nessuno degli oggetti di accesso ai dati. Per rendere disponibili gli oggetti, scegliere Riferimenti dal menu Strumenti e selezionare la libreria degli oggetti DAO appropriata nella finestra di dialogo Riferimenti. Per ulteriori informazioni, vedere Attivazione di oggetti di accesso ai dati.
È possibile specificare il tipo di oggetto Recordset che si desidera creare utilizzando l'argomento tipo del metodo OpenRecordset. Se non viene specificato un tipo, il modulo di gestione di database Microsoft Jet tenterà di creare un oggetto Recordset di tipo tabella. Se non ci riesce, creerà un oggetto Recordset di tipo dynaset o snapshot.
Quando si crea un oggetto Recordset utilizzando un oggetto TableDef che non è allegato, verranno creati solo oggetti Recordset di tipo tabella. Utilizzando tabelle allegate o tabelle di database ODBC esterni è possibile creare solo Recordsets di tipo dynaset o snapshot.
La proprietà Type specifica il tipo di oggetto Recordset creato e la proprietà Updatable specifica se è possibile o meno modificare i record dell'oggetto.
Quando si apre un oggetto, viene aggiunto automaticamente all'insieme Recordsets un nuovo oggetto Recordset, che viene automaticamente eliminato quando l'oggetto viene chiuso.
Le informazioni sulla struttura di una tabella di base, quali i nomi ed i tipi di dati dei campi di ciascun oggetto Field e Index, sono memorizzate in un oggetto TableDef.
Nota Se vengono utilizzate variabili per rappresentare un oggetto Recordset e l'oggetto Database che contiene il set di record, verificare che tali variabili abbiano la stessa area di validità e la stessa durata. Se, ad esempio, si dichiara una variabile globale che rappresenta un oggetto Recordset, verificare che la variabile che rappresenta il database contenente il set di record sia anch'essa una variabile globale o che sia stata dichiarata in una routine Sub o Function utilizzando la parola chiave Static.
È possibile dichiarare più variabili oggetto per un oggetto Recordset. Un oggetto Recordset può essere riferito ad una o più tabelle, solo a query, oppure a query alle quali si riferiscono altri oggetti Recordset di una qualsiasi combinazione. È possibile inoltre disporre di un oggetto Recordset che fa riferimento ad alcuni o a tutti i campi o record di altri oggetti Recordset.
Gli oggetti Recordset di tipo dynaset o snapshot vengono memorizzati nella memoria locale. Se tale memoria è insufficiente, il modulo di gestione di database Jet salva i dati aggiuntivi nello spazio su disco TEMP. Se tale spazio è esaurito, si verificherà un errore intercettabile.
L'insieme predefinito per gli oggetti Recordset è l'insieme Fields e la proprietà predefinita di un oggetto Field è Value. È possibile semplificare il codice utilizzando tali impostazioni predefinite. Nell'esempio seguente viene impostato il valore del campo PubID nel record corrente di un oggetto Recordset:
MyTable.Fields("PubID").Value = 99
MyTable("PubID") = 99
MyTable!PubID = 99
Quando si crea un nuovo oggetto Recordset, il record corrente diventa il primo record, se esistono altri record. Se non esistono altri record, la proprietà RecordCount viene impostata su 0 e le proprietà BOF e EOF vengono impostate su True.
Per riposizionare il record corrente, è possibile utilizzare i metodi MoveNext, MovePrevious, MoveFirst e MoveLast. Per individuare un determinato record in base ad un criterio specifico in un oggetto Recordset di tipo dynaset o snapshot, è inoltre possibile utilizzare i metodi di ricerca, come FindFirst. Se il record non viene trovato, la proprietà NoMatch viene impostata su True.
Per scorrere tutti i record, è possibile utilizzare le proprietà BOF e EOF per passare all'inizio o alla fine di un oggetto Recordset. Può tuttavia risultare più conveniente scrivere una query SQL che consente di eseguire operazioni valide per un intero set di record.
È possibile avere più variabili dell'oggetto Recordset che si riferiscono allo stesso set di record. Inoltre, non bisogna dimenticare che le variabili oggetto create con l'istruzione Dim nella sezione Dichiarazioni di un form esistono solo quando il form è aperto e vengono chiuse quando il form viene scaricato. Allo stesso modo, le variabili oggetto create in una routine esistono solo fino a quando la routine viene terminata. Prima di uscire o completare una routine che contiene dichiarazioni relative a questi oggetti di accesso ai dati, è necessario completare in modo esplicito le transazioni o le modifiche in sospeso e chiudere tutti gli oggetti Recordset e Database aperti.

Esempio di metodo OpenDatabase
Il codice di questo esempio apre la tabella Dipendenti del database contenuto nell'oggetto Workspace predefinito. Se non è possibile aprire il database, ad esempio perché è già stato aperto in modo esclusivo da un altro utente in un ambiente multiutente, si verificherà un errore e verrà visualizzato un messaggio di errore. Il codice passa quindi all'aggiornamento del campo "Qualifica" della tabella Dipendenti.
Function UpdateNorthwind () As Integer
Dim MyWorkspace As Workspace, MyDatabase As Database
Dim MyTable As Recordset
Dim MyFile As String
Dim ErrorCondition As Integer
UpdateDb = True
MyFile = "MIODB.MDB" ' Definisce il nome del database.
On Error GoTo DBErrorHandler ' Attiva l'intercettazione degli
' errori.
Set MyWorkspace = Workspaces(0)
' Apre il database.
Set MyDatabase = MyWorkspace.OpenDatabase(MyFile)
If Not ErrorCondition Then
On Error GoTo TableErrorHandler ' Attiva l'intercettazione
' degli errori.
' Apre la tabella.
Set MyTable = MyDatabase.OpenRecordset("Dipendenti")
If Not ErrorCondition Then
On Error GoTo EditErrorHandler ' Attiva l'intercettazione
' degli errori.
Do Until MyTable.EOF
If MyTable![Qualifica] = "Rappresentante" Then
MyTable.Edit ' Rende possibili le
' modifiche.
MyTable![Qualifica] = "Funzionario" ' Apporta le
' modifiche.
MyTable.Update ' Salva le modifiche.
End If
MyTable.MoveNext ' Passa al record successivo.
Loop
MyTable.Close ' Chiude la tabella.
End If
MyDatabase.Close ' Chiude il database.
End If
On Error GoTo 0 ' Disattiva l'intercettazione
' degli errori.
Exit Function
DBErrorHandler:
ErrorCondition = True
UpdateDb = False
MsgBox "Impossibile aprire il database.", vbExclamation
Resume Next
TableErrorHandler:
ErrorCondition = True
UpdateDb = False
MsgBox "Impossibile aprire la tabella Dipendenti.", vbExclamation
Resume Next
EditErrorHandler:
ErrorCondition = True
UpdateDb = False
MsgBox "Impossibile modificare la tabella Dipendenti.", vbExclamation
Resume Next
End Function

Un oggetto Database rappresenta un database aperto.
Osservazioni
Per gestire un database aperto utilizzare l'oggetto Database ed i relativi metodi e proprietà. In qualsiasi tipo di database, è possibile:
· Utilizzare il metodo Execute per eseguire una query di comando.
· Impostare la proprietà Connect per stabilire una connessione ad un'origine dati ODBC.
· Impostare la proprietà QueryTimeout per limitare il tempo di attesa per l'esecuzione di una query di un'origine dati ODBC.
· Utilizzare la proprietà RecordsAffected per determinare il numero di record modificati da una query di comando.
· Utilizzare il metodo OpenRecordset per eseguire una query di selezione e creare un oggetto Recordset.
· Utilizzare la proprietà Version per determinare la versione del modulo di gestione di database che ha creato il database.
Con un database di Microsoft Jet (file mdb), è inoltre possibile utilizzare altri metodi, proprietà ed insiemi per gestire un oggetto Database per creare, modificare o acquisire informazioni sulle relative tabelle, query e relazioni. È possibile:
· Utilizzare rispettivamente i metodi CreateTableDef e CreateRelation per creare tabelle e relazioni.
· Utilizzare il metodo CreateProperty per definire nuove proprietà Database.
· Utilizzare il metodo CreateQueryDef per creare una definizione di una query permanente o temporanea.
· Utilizzare i metodi MakeReplica, Synchronize e PopulatePartial per creare e sincronizzare repliche complete o parziali di un database.
· Impostare la proprietà CollatingOrder per stabilire la sequenza di caratteri per i campi basati su caratteri nelle diverse lingue.
In un'area di lavoro di ODBCDirect, è possibile:
· Utilizzare la proprietà Connection per ottenere un riferimento all'oggetto Connection
che corrisponde all'oggetto Database.
Nota Per un elenco completo di tutti i metodi, proprietà e insiemi disponibili su un oggetto Database in un'area di lavoro di Microsoft Jet o di ODBCDirect, vedere l'argomento Summary.
Il metodo CreateDatabase viene utilizzato per creare un oggetto Database permanente
che viene accodato automaticamente all'insieme Databases, e quindi salvato su disco.
Non è necessario specificare l'oggetto DBEngine quando si utilizza il metodo OpenDatabase.
L'apertura di un database con tabelle collegate non stabilisce in modo automatico dei collegamenti ai file esterni specificati o alle origini dati ODBC connesse a Microsoft Jet
. Si deve stabilire un riferimento agli oggetti TableDef o Field delle tabelle o aprire un oggetto Recordset. Se non è possibile stabilire dei collegamenti a queste tabelle, si verifica un errore intercettabile. Può essere necessaria l'autorizzazione per accedere al database oppure il database potrebbe essere già aperto in accesso esclusivo da un altro utente. In tali casi, si verificano degli errori intercettabili.
È inoltre possibile utilizzare il metodo OpenDatabase per aprire un database esterno, ad esempio FoxPro, dBASE e Paradox, in modo diretto, senza dover aprire un database di Microsoft Jet che dispone di collegamenti alle relative tabelle.
Nota L'apertura di un oggetto Database direttamente su un'origine dati ODBC connessa a Microsoft Jet, quale Microsoft SQL Server, non è consigliabile in quanto le prestazioni della query sono molto più lente di quando si utilizzano tabelle collegate. Tuttavia, le prestazioni non costituiscono un problema quando si apre un oggetto Database direttamente su un file database ISAM esterno, quale ad esempio FoxPro, Paradox ed altri.
Una volta conclusa l'esecuzione di una routine che dichiara un oggetto Database, gli oggetti Database locali vengono chiusi insieme ad eventuali oggetti Recordset aperti. Tutti gli aggiornamenti in sospeso vengono perduti e vengono annullate tutte le transazioni in sospeso, ma non si verifica nessun errore intercettabile. Prima di uscire dalle routine che dichiarano queste variabili di oggetto a livello locale, è necessario completare qualsiasi transazione o modifica in sospeso e chiudere gli oggetti Recordset e Database.
Quando si utilizza uno dei metodi di transazione (BeginTrans, CommitTrans o Rollback) nell'oggetto Workspace, tali transazioni hanno effetto su tutti i database aperti sul Workspace da cui era stato aperto l'oggetto Database. Se si desidera utilizzare transazioni indipendenti, è necessario prima aprire un ulteriore oggetto Workspace e quindi aprire un altro oggetto Database in tale oggetto Workspace.
Note È possibile aprire la stessa origine dati o lo stesso database più volte, creando nomi duplicati nell'insieme Databases. È necessario assegnare gli oggetti Database alle variabili di oggetto e farvi riferimento mediante nomi di variabile.