Condividi tramite


Classe CDaoDatabase

Rappresenta una connessione a un database di Access utilizzando oggetti DAO (Data Access Objects).

Nota

L'oggetto DAO (Data Access Object) è supportato tramite Office 2013. DAO 3.6 è la versione finale ed è obsoleta.

Sintassi

class CDaoDatabase : public CObject

Membri

Costruttori pubblici

Nome Descrizione
CDaoDatabase::CDaoDatabase Costruisce un oggetto CDaoDatabase. Chiamare Open per connettere l'oggetto a un database.

Metodi pubblici

Nome Descrizione
CDaoDatabase::CanTransact Restituisce un valore diverso da zero se il database supporta le transazioni.
CDaoDatabase::CanUpdate Restituisce un valore diverso da zero se l'oggetto CDaoDatabase è aggiornabile (non di sola lettura).
CDaoDatabase::Close Chiude la connessione al database.
CDaoDatabase::Create Crea l'oggetto di database DAO sottostante e inizializza l'oggetto CDaoDatabase .
CDaoDatabase::CreateRelation Definisce una nuova relazione tra le tabelle nel database.
CDaoDatabase::D eleteQueryDef Elimina un oggetto querydef salvato nell'insieme QueryDefs del database.
CDaoDatabase::D eleteRelation Elimina una relazione esistente tra tabelle nel database.
CDaoDatabase::D eleteTableDef Elimina la definizione di una tabella nel database. In questo modo viene eliminata la tabella effettiva e tutti i relativi dati.
CDaoDatabase::Execute Esegue una query di azione. La chiamata Execute a una query che restituisce i risultati genera un'eccezione.
CDaoDatabase::GetConnect Restituisce il stringa di connessione utilizzato per connettere l'oggetto CDaoDatabase a un database. Utilizzato per ODBC.
CDaoDatabase::GetName Restituisce il nome del database attualmente in uso.
CDaoDatabase::GetQueryDefCount Restituisce il numero di query definite per il database.
CDaoDatabase::GetQueryDefInfo Restituisce informazioni su una query specificata definita nel database.
CDaoDatabase::GetQueryTimeout Restituisce il numero di secondi dopo il quale si verifica il timeout delle operazioni di query del database. Influisce su tutte le operazioni aperte successive, aggiungere nuove, aggiornare e modificare e altre operazioni su origini dati ODBC (solo), ad esempio Execute le chiamate.
CDaoDatabase::GetRecordsAffected Restituisce il numero di record interessati dall'ultima operazione di aggiornamento, modifica o aggiunta o da una chiamata a Execute.
CDaoDatabase::GetRelationCount Restituisce il numero di relazioni definite tra le tabelle nel database.
CDaoDatabase::GetRelationInfo Restituisce informazioni su una relazione specificata definita tra tabelle nel database.
CDaoDatabase::GetTableDefCount Restituisce il numero di tabelle definite nel database.
CDaoDatabase::GetTableDefInfo Restituisce informazioni su una tabella specificata nel database.
CDaoDatabase::GetVersion Restituisce la versione del motore di database associato al database.
CDaoDatabase::IsOpen Restituisce un valore diverso da zero se l'oggetto CDaoDatabase è attualmente connesso a un database.
CDaoDatabase::Open Stabilisce una connessione a un database.
CDaoDatabase::SetQueryTimeout Imposta il numero di secondi dopo il quale si verifica il timeout delle operazioni di query del database (solo nelle origini dati ODBC). Influisce su tutte le operazioni aperte successive, aggiungere nuove, aggiornare ed eliminare.

Membri dati pubblici

Nome Descrizione
CDaoDatabase::m_pDAODatabase Puntatore all'oggetto di database DAO sottostante.
CDaoDatabase::m_pWorkspace Puntatore all'oggetto CDaoWorkspace che contiene il database e ne definisce lo spazio delle transazioni.

Osservazioni:

Per informazioni sui formati di database supportati, vedere la funzione membro GetName . È possibile avere uno o più CDaoDatabase oggetti attivi alla volta in una determinata "area di lavoro", rappresentata da un oggetto CDaoWorkspace . L'area di lavoro gestisce una raccolta di oggetti di database aperti, denominati insieme Databases.

Utilizzo

È possibile creare oggetti di database in modo implicito quando si creano oggetti recordset. Ma è anche possibile creare oggetti di database in modo esplicito. Per usare un database esistente in modo esplicito con CDaoDatabase, eseguire una delle operazioni seguenti:

  • Costruire un CDaoDatabase oggetto passando un puntatore a un oggetto CDaoWorkspace aperto.

  • In alternativa, creare un CDaoDatabase oggetto senza specificare l'area di lavoro (MFC crea un oggetto area di lavoro temporaneo).

Per creare un nuovo Microsoft Jet (. Database MDB), costruire un CDaoDatabase oggetto e chiamare la relativa funzione membro Create . Non chiamare Open dopo Create.

Per aprire un database esistente, creare un CDaoDatabase oggetto e chiamare la relativa funzione membro Open .

Una di queste tecniche aggiunge l'oggetto di database DAO all'insieme Databases dell'area di lavoro e apre una connessione ai dati. Quando si creano quindi oggetti CDaoRecordset, CDaoTableDef o CDaoQueryDef per operare nel database connesso, passare i costruttori per questi oggetti un puntatore all'oggetto CDaoDatabase . Al termine dell'utilizzo della connessione, chiamare la funzione membro Close ed eliminare definitivamente l'oggetto CDaoDatabase . Close chiude tutti i recordset che non sono già stati chiusi.

Transazioni

L'elaborazione delle transazioni di database viene fornita a livello di area di lavoro. Vedere le funzioni membro BeginTrans, CommitTrans e Rollback della classe CDaoWorkspace.

Connessioni ODBC

Il modo consigliato per usare le origini dati ODBC (Open Database Base Connectivity) consiste nel collegare tabelle esterne a un database Microsoft Jet (.MDB).

Raccolte

Ogni database gestisce le proprie raccolte di oggetti tabledef, querydef, recordset e relation. La classe CDaoDatabase fornisce funzioni membro per la modifica di questi oggetti.

Nota

Gli oggetti vengono archiviati in DAO, non nell'oggetto di database MFC. MFC fornisce classi per oggetti tabledef, querydef e recordset, ma non per gli oggetti relazione.

Gerarchia di ereditarietà

CObject

CDaoDatabase

Requisiti

Intestazione: afxdao.h

CDaoDatabase::CanTransact

Chiamare questa funzione membro per determinare se il database consente transazioni.

BOOL CanTransact();

Valore restituito

Diverso da zero se il database supporta le transazioni; in caso contrario, 0.

Osservazioni:

Le transazioni vengono gestite nell'area di lavoro del database.

CDaoDatabase::CanUpdate

Chiamare questa funzione membro per determinare se l'oggetto CDaoDatabase consente gli aggiornamenti.

BOOL CanUpdate();

Valore restituito

Diverso da zero se l'oggetto CDaoDatabase consente aggiornamenti; in caso contrario, 0, che indica che è stato passato TRUE in bReadOnly quando si apre l'oggetto CDaoDatabase o che il database stesso è di sola lettura. Vedere la funzione membro Open .

Osservazioni:

Per informazioni sull'updatabilità del database, vedere l'argomento "Proprietà aggiornabile" nella Guida di DAO.

CDaoDatabase::CDaoDatabase

Costruisce un oggetto CDaoDatabase.

CDaoDatabase(CDaoWorkspace* pWorkspace = NULL);

Parametri

pWorkspace
Puntatore all'oggetto CDaoWorkspace che conterrà il nuovo oggetto di database. Se si accetta il valore predefinito NULL, il costruttore crea un oggetto temporaneo CDaoWorkspace che usa l'area di lavoro DAO predefinita. È possibile ottenere un puntatore all'oggetto area di lavoro tramite il membro dati m_pWorkspace .

Osservazioni:

Dopo aver costruito l'oggetto, se si sta creando un nuovo Microsoft Jet (. Database MDB), chiamare la funzione membro Create dell'oggetto. Se invece si apre un database esistente, chiamare la funzione membro Open dell'oggetto.

Al termine dell'oggetto, è necessario chiamare la relativa funzione membro Close e quindi eliminare definitivamente l'oggetto CDaoDatabase .

Potrebbe risultare utile incorporare l'oggetto CDaoDatabase nella classe del documento.

Nota

Un CDaoDatabase oggetto viene creato in modo implicito anche se si apre un oggetto CDaoRecordset senza passare un puntatore a un oggetto esistente CDaoDatabase . Questo oggetto di database viene chiuso quando si chiude l'oggetto recordset.

CDaoDatabase::Close

Chiamare questa funzione membro per disconnettersi da un database e chiudere eventuali recordset aperti, tabledef e querydef associati al database.

virtual void Close();

Osservazioni:

È consigliabile chiudere manualmente questi oggetti prima di chiamare questa funzione membro. La chiusura di un CDaoDatabase oggetto lo rimuove dall'insieme Databases nell'area di lavoro associata. Poiché Close non elimina definitivamente l'oggetto CDaoDatabase , è possibile riutilizzare l'oggetto aprendo lo stesso database o un database diverso.

Attenzione

Chiamare la funzione membro Update (se sono presenti modifiche in sospeso) e la Close funzione membro in tutti gli oggetti recordset aperti prima di chiudere un database. Se si esce da una funzione che dichiara CDaoRecordset o CDaoDatabase oggetti nello stack, il database viene chiuso, eventuali modifiche non salvate vengono perse, viene eseguito il rollback di tutte le transazioni in sospeso e le eventuali modifiche in sospeso ai dati andranno perse.

Attenzione

Se si tenta di chiudere un oggetto di database mentre sono aperti oggetti recordset o se si tenta di chiudere un oggetto area di lavoro mentre tutti gli oggetti di database appartenenti a tale area di lavoro specifica sono aperti, tali oggetti recordset verranno chiusi e verrà eseguito il rollback di eventuali aggiornamenti o modifiche in sospeso. Se si tenta di chiudere un oggetto area di lavoro mentre gli oggetti di database appartenenti a esso sono aperti, l'operazione chiude tutti gli oggetti di database appartenenti a tale oggetto area di lavoro specifico, il che può comportare la chiusura di oggetti recordset non chiusi. Se non si chiude l'oggetto di database, MFC segnala un errore di asserzione nelle compilazioni di debug.

Se l'oggetto di database è definito all'esterno dell'ambito di una funzione e si esce dalla funzione senza chiuderlo, l'oggetto di database rimarrà aperto fino a quando non viene chiuso in modo esplicito o il modulo in cui è definito non rientra nell'ambito.

CDaoDatabase::Create

Per creare un nuovo Microsoft Jet (. Database MDB), chiamare questa funzione membro dopo aver creato un CDaoDatabase oggetto .

virtual void Create(
    LPCTSTR lpszName,
    LPCTSTR lpszLocale = dbLangGeneral,
    int dwOptions = 0);

Parametri

lpszName
Espressione stringa che rappresenta il nome del file di database che si sta creando. Può essere il percorso completo e il nome file, ad esempio "C:\\MYDB. MDB". È necessario specificare un nome. Se non si specifica un'estensione del nome file, . MDB viene aggiunto. Se la rete supporta la convenzione di denominazione uniforme (UNC), è anche possibile specificare un percorso di rete, ad esempio "\\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB". Solo Microsoft Jet (. I file di database MDB) possono essere creati usando questa funzione membro. Le barre rovesciata doppie sono necessarie nei valori letterali stringa perché "\" è il carattere di escape C++.

lpszLocale
Espressione stringa utilizzata per specificare l'ordine di confronto per la creazione del database. Il valore predefinito è dbLangGeneral. I valori possibili sono:

  • dbLangGeneral Inglese, tedesco, francese, portoghese, italiano e spagnolo moderno

  • dbLangArabic Arabo

  • dbLangCyrillic Russo

  • dbLangCzech Ceco

  • dbLangDutch Olandese

  • dbLangGreek Greco

  • dbLangHebrew Ebraico

  • dbLangHungarian Ungherese

  • dbLangIcelandic Islandese

  • dbLangNordic Lingue nordice (solo motore di database Microsoft Jet versione 1.0)

  • dbLangNorwdan Norvegese e danese

  • dbLangPolish Polacco

  • dbLangSpanish Spagnolo tradizionale

  • dbLangSwedfin Svedese e finlandese

  • dbLangTurkish Turco

dwOptions
Intero che indica una o più opzioni. I valori possibili sono:

  • dbEncrypt Creare un database crittografato.

  • dbVersion10 Creare un database con il database Microsoft Jet versione 1.0.

  • dbVersion11 Creare un database con il database Microsoft Jet versione 1.1.

  • dbVersion20 Creare un database con il database Microsoft Jet versione 2.0.

  • dbVersion30 Creare un database con il database Microsoft Jet versione 3.0.

Se si omette la costante di crittografia, viene creato un database non crittografato. È possibile specificare una sola costante di versione. Se si omette una costante della versione, viene creato un database che usa il database Microsoft Jet versione 3.0.

Attenzione

Se un database non è crittografato, è possibile, anche se si implementa la sicurezza utente/password, per leggere direttamente il file del disco binario che costituisce il database.

Osservazioni:

Create crea il file di database e l'oggetto di database DAO sottostante e inizializza l'oggetto C++. L'oggetto viene aggiunto all'insieme Databases dell'area di lavoro associata. L'oggetto di database si trova in uno stato aperto; non chiamare Open* dopo Create.

Nota

Con Createè possibile creare solo Microsoft Jet (. Database MDB). Non è possibile creare database ISAM o database ODBC.

CDaoDatabase::CreateRelation

Chiamare questa funzione membro per stabilire una relazione tra uno o più campi in una tabella primaria nel database e uno o più campi in una tabella esterna (un'altra tabella nel database).

void CreateRelation(
    LPCTSTR lpszName,
    LPCTSTR lpszTable,
    LPCTSTR lpszForeignTable,
    long lAttributes,
    LPCTSTR lpszField,
    LPCTSTR lpszForeignField);

void CreateRelation(CDaoRelationInfo& relinfo);

Parametri

lpszName
Nome univoco dell'oggetto relazione. Il nome deve iniziare con una lettera e può contenere un massimo di 40 caratteri. Può includere numeri e caratteri di sottolineatura, ma non può includere punteggiatura o spazi.

lpszTable
Nome della tabella primaria nella relazione. Se la tabella non esiste, MFC genera un'eccezione di tipo CDaoException.

lpszForeignTable
Nome della tabella esterna nella relazione. Se la tabella non esiste, MFC genera un'eccezione di tipo CDaoException.

lAttributes
Valore long che contiene informazioni sul tipo di relazione. È possibile usare questo valore per applicare l'integrità referenziale, tra le altre cose. È possibile usare l'operatore OR bit per bit (|) per combinare uno dei valori seguenti (purché la combinazione abbia senso):

  • dbRelationUnique La relazione è uno-a-uno.

  • dbRelationDontEnforce La relazione non viene applicata (nessuna integrità referenziale).

  • dbRelationInherited La relazione esiste in un database non simultaneo che contiene le due tabelle collegate.

  • dbRelationUpdateCascade Gli aggiornamenti verranno propagati (per altre informazioni sulle cascate, vedere La sezione Osservazioni).

  • dbRelationDeleteCascade Le eliminazioni verranno propagate.

lpszField
Puntatore a una stringa con terminazione Null contenente il nome di un campo nella tabella primaria (denominata da lpszTable).

lpszForeignField
Puntatore a una stringa con terminazione Null contenente il nome di un campo nella tabella esterna (denominata da lpszForeignTable).

relinfo
Riferimento a un oggetto CDaoRelationInfo che contiene informazioni sulla relazione che si desidera creare.

Osservazioni:

La relazione non può comportare una query o una tabella collegata da un database esterno.

Usare la prima versione della funzione quando la relazione include un campo in ognuna delle due tabelle. Usare la seconda versione quando la relazione include più campi. Il numero massimo di campi in una relazione è 14.

Questa azione crea un oggetto relazione DAO sottostante, ma si tratta di un dettaglio di implementazione MFC poiché l'incapsulamento degli oggetti relazione MFC è contenuto all'interno della classe CDaoDatabase. MFC non fornisce una classe per le relazioni.

Se si impostano gli attributi dell'oggetto relazione per attivare le operazioni a catena, il motore di database aggiorna o elimina automaticamente i record in una o più altre tabelle quando vengono apportate modifiche alle tabelle chiave primaria correlate.

Si supponga, ad esempio, di stabilire una relazione di eliminazione a catena tra una tabella Customers e una tabella Orders. Quando si eliminano i record dalla tabella Customers, vengono eliminati anche i record nella tabella Orders correlati a tale cliente. Inoltre, se si stabiliscono relazioni di eliminazione a catena tra la tabella Orders e altre tabelle, i record di tali tabelle vengono eliminati automaticamente quando si eliminano i record dalla tabella Customers.

Per informazioni correlate, vedere l'argomento "Metodo CreateRelation" nella Guida di DAO.

CDaoDatabase::D eleteQueryDef

Chiamare questa funzione membro per eliminare il querydef specificato, ovvero la query salvata, dall'insieme CDaoDatabase QueryDefs dell'oggetto.

void DeleteQueryDef(LPCTSTR lpszName);

Parametri

lpszName
Nome della query salvata da eliminare.

Osservazioni:

Successivamente, la query non è più definita nel database.

Per informazioni sulla creazione di oggetti querydef, vedere classe CDaoQueryDef. Un oggetto querydef diventa associato a un particolare CDaoDatabase oggetto quando si costruisce l'oggetto CDaoQueryDef , passandolo un puntatore all'oggetto di database.

CDaoDatabase::D eleteRelation

Chiamare questa funzione membro per eliminare una relazione esistente dall'insieme Relations dell'oggetto di database.

void DeleteRelation(LPCTSTR lpszName);

Parametri

lpszName
Nome della relazione da eliminare.

Osservazioni:

Successivamente, la relazione non esiste più.

Per informazioni correlate, vedere l'argomento "Delete Method" nella Guida di DAO.

CDaoDatabase::D eleteTableDef

Chiamare questa funzione membro per eliminare la tabella specificata e tutti i relativi dati dall'insieme CDaoDatabase TableDefs dell'oggetto.

void DeleteTableDef(LPCTSTR lpszName);

Parametri

lpszName
Nome dell'oggetto tabledef da eliminare.

Osservazioni:

Successivamente, tale tabella non è più definita nel database.

Nota

Prestare molta attenzione a non eliminare le tabelle di sistema.

Per informazioni sulla creazione di oggetti tabledef, vedere classe CDaoTableDef. Un oggetto tabledef viene associato a un particolare CDaoDatabase oggetto quando si costruisce l'oggetto CDaoTableDef , passandolo un puntatore all'oggetto di database.

Per informazioni correlate, vedere l'argomento "Delete Method" nella Guida di DAO.

CDaoDatabase::Execute

Chiamare questa funzione membro per eseguire una query di azione o eseguire un'istruzione SQL nel database.

void Execute(
    LPCTSTR lpszSQL,
    int nOptions = dbFailOnError);

Parametri

lpszSQL
Puntatore a una stringa con terminazione Null contenente un comando SQL valido da eseguire.

nOptions
Intero che specifica le opzioni relative all'integrità della query. È possibile usare l'operatore OR bit per bit (|) per combinare una delle costanti seguenti, a condizione che la combinazione abbia senso. Ad esempio, non è possibile combinare dbInconsistent con dbConsistent:

  • dbDenyWrite Negare l'autorizzazione di scrittura ad altri utenti.

  • dbInconsistent (Impostazione predefinita) Aggiornamenti incoerenti.

  • dbConsistent Aggiornamenti coerenti.

  • dbSQLPassThrough Pass-through SQL. Fa sì che l'istruzione SQL venga passata a un'origine dati ODBC per l'elaborazione.

  • dbFailOnError Eseguire il rollback degli aggiornamenti se si verifica un errore.

  • dbSeeChanges Generare un errore di run-time se un altro utente sta modificando i dati che si stanno modificando.

Nota

Se e dbInconsistent dbConsistent sono inclusi o se nessuno dei due è incluso, il risultato è il valore predefinito. Per una spiegazione di queste costanti, vedere l'argomento "Execute Method" nella Guida di DAO.

Osservazioni:

Execute funziona solo per query di azione o query pass-through SQL che non restituiscono risultati. Non funziona per le query di selezione, che restituiscono record.

Per una definizione e informazioni sulle query di azione, vedere gli argomenti "Query di azione" e "Execute Method" nella Guida di DAO.

Suggerimento

Dato un'istruzione SQL sintatticamente corretta e le autorizzazioni appropriate, la Execute funzione membro non avrà esito negativo anche se non è possibile modificare o eliminare una singola riga. Pertanto, usare sempre l'opzione dbFailOnError quando si usa la Execute funzione membro per eseguire una query di aggiornamento o eliminazione. Questa opzione fa sì che MFC generi un'eccezione di tipo CDaoException e esegue il rollback di tutte le modifiche riuscite se uno dei record interessati è bloccato e non può essere aggiornato o eliminato. Si noti che è sempre possibile chiamare GetRecordsAffected per verificare il numero di record interessati.

Chiamare la funzione membro GetRecordsAffected dell'oggetto di database per determinare il numero di record interessati dalla chiamata più recente Execute . Ad esempio, restituisce GetRecordsAffected informazioni sul numero di record eliminati, aggiornati o inseriti durante l'esecuzione di una query di azione. Il conteggio restituito non riflette le modifiche apportate alle tabelle correlate quando sono attivi aggiornamenti o eliminazioni a catena.

Execute non restituisce un recordset. L'uso Execute di in una query che seleziona i record fa sì che MFC generi un'eccezione di tipo CDaoException. Non esiste alcuna ExecuteSQL funzione membro analoga a CDatabase::ExecuteSQL.)

CDaoDatabase::GetConnect

Chiamare questa funzione membro per recuperare il stringa di connessione utilizzato per connettere l'oggetto CDaoDatabase a un database ODBC o ISAM.

CString GetConnect();

Valore restituito

Il stringa di connessione se Open è stato chiamato correttamente in un'origine dati ODBC; in caso contrario, una stringa vuota. Per un Microsoft Jet (. Database MDB), la stringa è sempre vuota, a meno che non venga impostata per l'uso con l'opzione dbSQLPassThrough usata con la funzione Membro Execute o usata per aprire un recordset.

Osservazioni:

La stringa fornisce informazioni sull'origine di un database aperto o di un database utilizzato in una query pass-through. Il stringa di connessione è costituito da un identificatore di tipo di database e da zero o più parametri separati da punti e virgola.

Nota

L'uso delle classi DAO MFC per connettersi a un'origine dati tramite ODBC è meno efficiente rispetto alla connessione tramite una tabella collegata.

Nota

Il stringa di connessione viene usato per passare informazioni aggiuntive a ODBC e a determinati driver ISAM in base alle esigenze. Non viene usato per . Database MDB. Per le tabelle di base del database Microsoft Jet, il stringa di connessione è una stringa vuota ("") tranne quando viene usata per una query pass-through SQL, come descritto in Valore restituito precedente.

Per una descrizione del modo in cui viene creato il stringa di connessione, vedere la funzione membro Open. Dopo aver impostato il stringa di connessione nella Open chiamata, è possibile usarlo in un secondo momento per controllare l'impostazione per determinare il tipo, il percorso, l'ID utente, la password o l'origine dati ODBC del database.

CDaoDatabase::GetName

Chiamare questa funzione membro per recuperare il nome del database attualmente aperto, ovvero il nome di un file di database esistente o il nome di un'origine dati ODBC registrata.

CString GetName();

Valore restituito

Percorso completo e nome file del database, se l'operazione ha esito positivo; in caso contrario, CString vuoto.

Osservazioni:

Se la rete supporta la convenzione di denominazione uniforme (UNC), è anche possibile specificare un percorso di rete, ad esempio "\\\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB. MDB". Le barre rovesciata doppie sono necessarie nei valori letterali stringa perché "\" è il carattere di escape C++.

È possibile, ad esempio, visualizzare questo nome in un'intestazione. Se si verifica un errore durante il recupero del nome, MFC genera un'eccezione di tipo CDaoException.

Nota

Per prestazioni migliori quando si accede a database esterni, è consigliabile collegare tabelle di database esterne a un database Microsoft Jet (. MDB) anziché connettersi direttamente all'origine dati.

Il tipo di database è indicato dal file o dalla directory a cui punta il percorso, come indicato di seguito:

Pathname punta a.. Tipo di database
. File MDB Microsoft Jet database (Microsoft Access)
Directory contenente . File DBF Database dBASE
Directory contenente .XLS file Database di Microsoft Excel
Directory contenente . File PDX Database Paradox
Directory contenente file di database di testo formattati in modo appropriato Database in formato testo

Per i database ODBC, ad esempio SQL Server e Oracle, il stringa di connessione del database identifica un nome di origine dati (DSN) registrato da ODBC.

CDaoDatabase::GetQueryDefCount

Chiamare questa funzione membro per recuperare il numero di query definite nell'insieme QueryDefs del database.

short GetQueryDefCount();

Valore restituito

Numero di query definite nel database.

Osservazioni:

GetQueryDefCount è utile se è necessario scorrere tutti i querydef nell'insieme QueryDefs. Per ottenere informazioni su una determinata query nella raccolta, vedere GetQueryDefInfo.

CDaoDatabase::GetQueryDefInfo

Chiamare questa funzione membro per ottenere vari tipi di informazioni su una query definita nel database.

void GetQueryDefInfo(
    int nIndex,
    CDaoQueryDefInfo& querydefinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetQueryDefInfo(
    LPCTSTR lpszName,
    CDaoQueryDefInfo& querydefinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Parametri

nIndex
Indice della query predefinita nell'insieme QueryDefs del database, per la ricerca in base all'indice.

querydefinfo
Riferimento a un oggetto CDaoQueryDefInfo che restituisce le informazioni richieste.

dwInfoOptions
Opzioni che specificano le informazioni relative al recordset da recuperare. Le opzioni disponibili sono elencate di seguito insieme a ciò che causano la restituzione della funzione sul recordset:

  • nome AFX_DAO_PRIMARY_INFO (impostazione predefinita), type

  • AFX_DAO_SECONDARY_INFO Informazioni primarie più: Data creazione, Data dell'ultimo aggiornamento, Restituisce record, Aggiornabile

  • AFX_DAO_ALL_INFO informazioni primarie e secondarie più: SQL, Connect, ODBCTimeout

lpszName
Stringa contenente il nome di una query definita nel database, per la ricerca in base al nome.

Osservazioni:

Vengono fornite due versioni della funzione in modo da poter selezionare una query in base all'indice nell'insieme QueryDefs del database o in base al nome della query.

Per una descrizione delle informazioni restituite in querydefinfo, vedere la struttura CDaoQueryDefInfo. Questa struttura ha membri che corrispondono agli elementi delle informazioni elencate in precedenza nella descrizione di dwInfoOptions. Se si richiede un livello di informazioni, si ottengono anche livelli precedenti di informazioni.

CDaoDatabase::GetQueryTimeout

Chiamare questa funzione membro per recuperare il numero corrente di secondi da consentire prima del timeout delle operazioni successive nel database connesso.

short GetQueryTimeout();

Valore restituito

Intero breve contenente il valore di timeout in secondi.

Osservazioni:

Un'operazione potrebbe verificarsi un timeout a causa di problemi di accesso alla rete, tempi di elaborazione delle query eccessivi e così via. Mentre l'impostazione è attiva, influisce su tutte le operazioni aperte, aggiungere nuove, aggiornare ed eliminare i recordset associati a questo CDaoDatabase oggetto. È possibile modificare l'impostazione di timeout corrente chiamando SetQueryTimeout. La modifica del valore di timeout della query per un recordset dopo l'apertura non modifica il valore per il recordset. Ad esempio, le operazioni di spostamento successive non usano il nuovo valore. Il valore predefinito viene inizialmente impostato quando il motore di database viene inizializzato.

Il valore predefinito per i timeout delle query viene ricavato dal Registro di sistema di Windows. Se non è presente alcuna impostazione del Registro di sistema, il valore predefinito è 60 secondi. Non tutti i database supportano la possibilità di impostare un valore di timeout della query. Se si imposta un valore di timeout della query pari a 0, non si verifica alcun timeout; e la comunicazione con il database potrebbe smettere di rispondere. Questo comportamento può essere utile durante lo sviluppo. Se la chiamata non riesce, MFC genera un'eccezione di tipo CDaoException.

Per informazioni correlate, vedere l'argomento "Proprietà QueryTimeout" nella Guida di DAO.

CDaoDatabase::GetRecordsAffected

Chiamare questa funzione membro per determinare il numero di record interessati dalla chiamata più recente della funzione membro Execute .

long GetRecordsAffected();

Valore restituito

Intero lungo contenente il numero di record interessati.

Osservazioni:

Il valore restituito include il numero di record eliminati, aggiornati o inseriti da una query di azione eseguita con Execute. Il conteggio restituito non riflette le modifiche apportate alle tabelle correlate quando sono attivi aggiornamenti o eliminazioni a catena.

Per informazioni correlate, vedere l'argomento "RecordsAffected Property" nella Guida di DAO.

CDaoDatabase::GetRelationCount

Chiamare questa funzione membro per ottenere il numero di relazioni definite tra le tabelle nel database.

short GetRelationCount();

Valore restituito

Numero di relazioni definite tra tabelle nel database.

Osservazioni:

GetRelationCount è utile se è necessario scorrere tutte le relazioni definite nella raccolta Relations del database. Per ottenere informazioni su una determinata relazione nella raccolta, vedere GetRelationInfo.

Per illustrare il concetto di relazione, considerare una tabella Suppliers e una tabella Products, che potrebbe avere una relazione uno-a-molti. In questa relazione, un fornitore può fornire più di un prodotto. Altre relazioni sono uno-a-uno e molti-a-molti.

CDaoDatabase::GetRelationInfo

Chiamare questa funzione membro per ottenere informazioni su una relazione specificata nell'insieme Relations del database.

void GetRelationInfo(
    int nIndex,
    CDaoRelationInfo& relinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetRelationInfo(
    LPCTSTR lpszName,
    CDaoRelationInfo& relinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Parametri

nIndex
Indice dell'oggetto relazione nell'insieme Relations del database, per la ricerca in base all'indice.

relinfo
Riferimento a un oggetto CDaoRelationInfo che restituisce le informazioni richieste.

dwInfoOptions
Opzioni che specificano le informazioni sulla relazione da recuperare. Le opzioni disponibili sono elencate di seguito insieme a ciò che causano la restituzione della funzione sulla relazione:

  • AFX_DAO_PRIMARY_INFO (valore predefinito) Name, Table, Foreign Table

  • attributi AFX_DAO_SECONDARY_INFO, informazioni sul campo

Field Information è un oggetto CDaoRelationFieldInfo contenente i campi della tabella primaria coinvolta nella relazione.

lpszName
Stringa contenente il nome dell'oggetto relazione, per la ricerca in base al nome.

Osservazioni:

Due versioni di questa funzione forniscono l'accesso in base all'indice o al nome. Per una descrizione delle informazioni restituite in relinfo, vedere la struttura CDaoRelationInfo . Questa struttura ha membri che corrispondono agli elementi delle informazioni elencate in precedenza nella descrizione di dwInfoOptions. Se si richiedono informazioni a un livello, si ottengono anche informazioni a qualsiasi livello precedente.

Nota

Se si impostano gli attributi dell'oggetto relazione per attivare le operazioni a catena (dbRelationUpdateCascades o dbRelationDeleteCascades), il motore di database Microsoft Jet aggiorna o elimina automaticamente i record in una o più altre tabelle quando vengono apportate modifiche alle tabelle chiave primaria correlate. Si supponga, ad esempio, di stabilire una relazione di eliminazione a catena tra una tabella Customers e una tabella Orders. Quando si eliminano i record dalla tabella Customers, vengono eliminati anche i record nella tabella Orders correlati a tale cliente. Inoltre, se si stabiliscono relazioni di eliminazione a catena tra la tabella Orders e altre tabelle, i record di tali tabelle vengono eliminati automaticamente quando si eliminano i record dalla tabella Customers.

CDaoDatabase::GetTableDefCount

Chiamare questa funzione membro per recuperare il numero di tabelle definite nel database.

short GetTableDefCount();

Valore restituito

Numero di tabledef definiti nel database.

Osservazioni:

GetTableDefCount è utile se è necessario scorrere tutti gli oggetti tabledef nell'insieme TableDefs del database. Per ottenere informazioni su una determinata tabella nella raccolta, vedere GetTableDefInfo.

CDaoDatabase::GetTableDefInfo

Chiamare questa funzione membro per ottenere vari tipi di informazioni su una tabella definita nel database.

void GetTableDefInfo(
    int nIndex,
    CDaoTableDefInfo& tabledefinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

void GetTableDefInfo(
    LPCTSTR lpszName,
    CDaoTableDefInfo& tabledefinfo,
    DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);

Parametri

nIndex
Indice dell'oggetto tabledef nell'insieme TableDefs del database, per la ricerca in base all'indice.

tabledefinfo
Riferimento a un oggetto CDaoTableDefInfo che restituisce le informazioni richieste.

dwInfoOptions
Opzioni che specificano le informazioni sulla tabella da recuperare. Le opzioni disponibili sono elencate di seguito insieme a ciò che causano la restituzione della funzione sulla relazione:

  • AFX_DAO_PRIMARY_INFO (valore predefinito) Name, Updatable, Attributes

  • AFX_DAO_SECONDARY_INFO Informazioni primarie più: Data creazione, Data ultimo aggiornamento, Nome tabella di origine, Connetti

  • AFX_DAO_ALL_INFO informazioni primarie e secondarie più: Regola di convalida, Testo di convalida, Conteggio record

lpszName
Nome dell'oggetto tabledef, per la ricerca in base al nome.

Osservazioni:

Vengono fornite due versioni della funzione in modo da poter selezionare una tabella in base all'indice nell'insieme TableDefs del database o al nome della tabella.

Per una descrizione delle informazioni restituite in tabledefinfo, vedere la struttura CDaoTableDefInfo. Questa struttura ha membri che corrispondono agli elementi delle informazioni elencate in precedenza nella descrizione di dwInfoOptions. Se si richiedono informazioni a un livello, si ottengono anche informazioni per i livelli precedenti.

Nota

L'opzione AFX_DAO_ALL_INFO fornisce informazioni che possono essere lente da ottenere. In questo caso, il conteggio dei record nella tabella potrebbe richiedere molto tempo se sono presenti molti record.

CDaoDatabase::GetVersion

Chiamare questa funzione membro per determinare la versione del file di database Microsoft Jet.

CString GetVersion();

Valore restituito

CString che indica la versione del file di database associato all'oggetto .

Osservazioni:

Il valore restituito rappresenta il numero di versione nel formato "major.minor"; ad esempio "3.0". Il numero di versione del prodotto (ad esempio, 3.0) è costituito dal numero di versione (3), da un punto e dal numero di versione (0). Le versioni alla data sono 1.0, 1.1, 2.0 e 3.0.

Per informazioni correlate, vedere l'argomento "Version Property" nella Guida di DAO.

CDaoDatabase::IsOpen

Chiamare questa funzione membro per determinare se l'oggetto CDaoDatabase è attualmente aperto in un database.

BOOL IsOpen() const;

Valore restituito

Diverso da zero se l'oggetto CDaoDatabase è attualmente aperto; in caso contrario, 0.

Osservazioni:

CDaoDatabase::m_pDAODatabase

Contiene un puntatore all'interfaccia OLE per l'oggetto di database DAO sottostante l'oggetto CDaoDatabase .

Osservazioni:

Usare questo puntatore se è necessario accedere direttamente all'interfaccia DAO.

Per informazioni sulla chiamata diretta daO, vedere La nota tecnica 54.

CDaoDatabase::m_pWorkspace

Contiene un puntatore all'oggetto CDaoWorkspace che contiene l'oggetto di database.

Osservazioni:

Usare questo puntatore se è necessario accedere direttamente all'area di lavoro. Ad esempio, per ottenere puntatori ad altri oggetti di database nell'insieme Databases dell'area di lavoro.

CDaoDatabase::Open

È necessario chiamare questa funzione membro per inizializzare un oggetto appena costruito CDaoDatabase che rappresenta un database esistente.

virtual void Open(
    LPCTSTR lpszName,
    BOOL bExclusive = FALSE,
    BOOL bReadOnly = FALSE,
    LPCTSTR lpszConnect = _T(""));

Parametri

lpszName
Espressione stringa che rappresenta il nome di un Microsoft Jet esistente (. File di database MDB). Se il nome file ha un'estensione, è necessario. Se la rete supporta la convenzione di denominazione uniforme (UNC), è anche possibile specificare un percorso di rete, ad esempio "\\\\MYSERVER\\MYSHARE\\MYDIR\\MYDB. MDB". Le barre rovesciata doppie sono necessarie nei valori letterali stringa perché "\" è il carattere di escape C++.

Alcune considerazioni si applicano quando si usa lpszName. In caso affermativo:

  • Fa riferimento a un database già aperto per l'accesso esclusivo da un altro utente, MFC genera un'eccezione di tipo CDaoException. Intercettare tale eccezione per informare l'utente che il database non è disponibile.

  • Stringa vuota ("") e lpszConnect è "ODBC;", viene visualizzata una finestra di dialogo che elenca tutti i nomi di origine dati ODBC registrati in modo che l'utente possa selezionare un database. È consigliabile evitare connessioni dirette alle origini dati ODBC; utilizzare invece una tabella associata.

  • In caso contrario, non fa riferimento a un database esistente o a un nome di origine dati ODBC valido, MFC genera un'eccezione di tipo CDaoException.

Nota

Per informazioni dettagliate sui codici di errore DAO, vedere DAOERR. File H. Per informazioni correlate, vedere l'argomento "Errori di accesso ai dati intercegnabili" nella Guida di DAO.

bExclusive
Valore booleano true se il database deve essere aperto per l'accesso esclusivo (non condiviso) e FALSE se il database deve essere aperto per l'accesso condiviso. Se si omette questo argomento, il database viene aperto per l'accesso condiviso.

bReadOnly
Valore booleano true se il database deve essere aperto per l'accesso in sola lettura e FALSE se il database deve essere aperto per l'accesso in lettura/scrittura. Se si omette questo argomento, il database viene aperto per l'accesso in lettura/scrittura. Tutti i recordset dipendenti ereditano questo attributo.

lpszConnect
Espressione stringa utilizzata per aprire il database. Questa stringa costituisce gli argomenti di connessione ODBC. È necessario specificare gli argomenti esclusivi e di sola lettura per fornire una stringa di origine. Se il database è un database Microsoft Jet (. MDB), questa stringa è vuota (""). La sintassi per il valore predefinito, _T(""), offre portabilità per Unicode e compilazioni ANSI dell'applicazione.

Osservazioni:

Open associa il database all'oggetto DAO sottostante. Non è possibile utilizzare l'oggetto di database per costruire oggetti recordset, tabledef o querydef finché non viene inizializzato. Open aggiunge l'oggetto di database all'insieme Databases dell'area di lavoro associata.

Usare i parametri come segue:

  • Se si apre un Microsoft Jet (. Database MDB), usare il parametro lpszName e passare una stringa vuota per il parametro lpszConnect o passare una stringa password del formato "; PWD=password" se il database è protetto da password (. Solo database MDB).

  • Se si apre un'origine dati ODBC, passare un stringa di connessione ODBC valido in lpszConnect e una stringa vuota in lpszName.

Per informazioni correlate, vedere l'argomento "Metodo OpenDatabase" nella Guida di DAO.

Nota

Per prestazioni migliori quando si accede a database esterni, inclusi i database ISAM e le origini dati ODBC, è consigliabile collegare tabelle di database esterne a un database del motore Microsoft Jet (. MDB) anziché connettersi direttamente all'origine dati.

È possibile che un tentativo di connessione si verifichi un timeout se, ad esempio, l'host DBMS non è disponibile. Se il tentativo di connessione non riesce, Open genera un'eccezione di tipo CDaoException.

Le osservazioni rimanenti si applicano solo ai database ODBC:

Se il database è un database ODBC e i parametri nella Open chiamata non contengono informazioni sufficienti per stabilire la connessione, il driver ODBC apre una finestra di dialogo per ottenere le informazioni necessarie dall'utente. Quando si chiama Open, il stringa di connessione, lpszConnect, viene archiviato privatamente ed è disponibile chiamando la funzione membro GetConnect.

Se si desidera, è possibile aprire una finestra di dialogo personalizzata prima di chiamare Open per ottenere informazioni dall'utente, ad esempio una password, quindi aggiungere tali informazioni al stringa di connessione si passa a Open. Oppure potresti voler salvare il stringa di connessione che passi (ad esempio nel Registro di sistema di Windows) in modo da poterlo riutilizzare alla successiva chiamata dell'applicazione Open su un CDaoDatabase oggetto.

È anche possibile usare il stringa di connessione per più livelli di autorizzazione di accesso (ognuno per un oggetto diversoCDaoDatabase) o per trasmettere altre informazioni specifiche del database.

CDaoDatabase::SetQueryTimeout

Chiamare questa funzione membro per eseguire l'override del numero predefinito di secondi consentiti prima del timeout delle operazioni successive nel database connesso.

void SetQueryTimeout(short nSeconds);

Parametri

nSeconds
Numero di secondi consentiti prima del timeout di un tentativo di query.

Osservazioni:

Un'operazione potrebbe verificarsi un timeout a causa di problemi di accesso alla rete, tempi di elaborazione delle query eccessivi e così via. Chiamare SetQueryTimeout prima di aprire il recordset o prima di chiamare le funzioni addNew, Update o Delete del recordset se si desidera modificare il valore di timeout della query. L'impostazione influisce su tutte le successive chiamate Open, , Updatee Delete a tutti i recordset associati a questo CDaoDatabase oggetto. AddNew La modifica del valore di timeout della query per un recordset dopo l'apertura non modifica il valore per il recordset. Ad esempio, le operazioni di spostamento successive non usano il nuovo valore.

Il valore predefinito per i timeout delle query è 60 secondi. Non tutti i database supportano la possibilità di impostare un valore di timeout della query. Se si imposta un valore di timeout della query pari a 0, non si verifica alcun timeout; la comunicazione con il database potrebbe smettere di rispondere. Questo comportamento può essere utile durante lo sviluppo.

Per informazioni correlate, vedere l'argomento "Proprietà QueryTimeout" nella Guida di DAO.

Vedi anche

Classe CObject
Grafico della gerarchia
Classe CDaoWorkspace
Classe CDaoRecordset
Classe CDaoTableDef
Classe CDaoQueryDef
Classe CDatabase
Classe CDaoException