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à
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 modernodbLangArabic
ArabodbLangCyrillic
RussodbLangCzech
CecodbLangDutch
OlandesedbLangGreek
GrecodbLangHebrew
EbraicodbLangHungarian
UngheresedbLangIcelandic
IslandesedbLangNordic
Lingue nordice (solo motore di database Microsoft Jet versione 1.0)dbLangNorwdan
Norvegese e danesedbLangPolish
PolaccodbLangSpanish
Spagnolo tradizionaledbLangSwedfin
Svedese e finlandesedbLangTurkish
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, , Update
e 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