MFC: utilizzo di classi di database con documenti e viste
È possibile usare le classi di database MFC con o senza l'architettura di documento/visualizzazione. In questo argomento viene sottolineato l'utilizzo di documenti e visualizzazioni. Spiega:
Come scrivere un'applicazione basata su form usando un
CRecordView
oggetto come visualizzazione principale del documento.Come usare gli oggetti recordset nei documenti e nelle visualizzazioni.
Per le alternative, vedere MFC: Uso di classi di database senza documenti e viste.
Scrittura di un'applicazione basata su form
Molte applicazioni di accesso ai dati sono basate su moduli. L'interfaccia utente è un modulo contenente controlli in cui l'utente esamina, immette o modifica i dati. Per fare in modo che il modulo dell'applicazione sia basato su , usare la classe CRecordView
. Quando si esegue la Creazione guidata applicazione MFC e si seleziona il tipo di client ODBC nella pagina Supporto database, il progetto usa CRecordView
per la classe di visualizzazione.
In un'applicazione basata su form ogni oggetto visualizzazione record archivia un puntatore a un CRecordset
oggetto . Il meccanismo RFX (Record Field Exchange) del framework scambia i dati tra il recordset e l'origine dati. Il meccanismo DDX (Dialog Data Exchange) scambia i dati tra i membri dati di campo dell'oggetto recordset e i controlli nel modulo. CRecordView
fornisce inoltre funzioni del gestore dei comandi predefinite per lo spostamento dal record al record nel form.
Per creare un'applicazione basata su form con la procedura guidata dell'applicazione, vedere Creazione di un'applicazione MFC basata su form e supporto del database, Creazione guidata applicazione MFC.
Per una descrizione completa dei moduli, vedere Visualizzazioni record.
Uso di recordset in documenti e viste
Molte semplici applicazioni basate su form non necessitano di documenti. Se l'applicazione è più complessa, è probabile che si voglia usare un documento come proxy per il database, archiviando un CDatabase
oggetto che si connette all'origine dati. Le applicazioni basate su form in genere archiviano un puntatore a un oggetto recordset nella visualizzazione. Altri tipi di applicazioni di database archivia recordset e CDatabase
oggetti nel documento. Ecco alcune possibilità per l'uso di documenti nelle applicazioni di database:
Se si accede a un recordset in un contesto locale, creare un
CRecordset
oggetto localmente nelle funzioni membro del documento o della vista, in base alle esigenze.Dichiarare un oggetto recordset come variabile locale in una funzione. Passare NULL al costruttore, che fa sì che il framework crei e apra automaticamente un oggetto temporaneo
CDatabase
. In alternativa, passare un puntatore a unCDatabase
oggetto . Usare il recordset all'interno della funzione e lasciarlo distruggere automaticamente quando la funzione viene chiusa.Quando si passa NULL a un costruttore di recordset, il framework usa le informazioni restituite dalla funzione membro del
GetDefaultConnect
recordset per creare unCDatabase
oggetto e aprirlo. Le procedure guidate implementanoGetDefaultConnect
per l'utente.Se si accede a un recordset durante la durata del documento, incorporare uno o più
CRecordset
oggetti nel documento.Costruire gli oggetti recordset quando si inizializza il documento o in base alle esigenze. È possibile scrivere una funzione che restituisce un puntatore al recordset se esiste già o costruisce e apre il recordset se non esiste ancora. Chiudere, eliminare e ricreare il recordset in base alle esigenze oppure chiamare la relativa
Requery
funzione membro per aggiornare i record.Se si accede a un'origine dati durante la durata del documento, incorporare un
CDatabase
oggetto o archiviare un puntatore a unCDatabase
oggetto.L'oggetto
CDatabase
gestisce una connessione all'origine dati. L'oggetto viene costruito automaticamente durante la costruzione di documenti e si chiama la relativaOpen
funzione membro quando si inizializza il documento. Quando si creano oggetti recordset nelle funzioni membro del documento, si passa un puntatore all'oggetto delCDatabase
documento. In questo modo ogni recordset viene associato all'origine dati. L'oggetto di database viene in genere eliminato definitivamente quando il documento viene chiuso. Gli oggetti recordset vengono in genere eliminati definitivamente quando escono dall'ambito di una funzione.
Altri fattori
Le applicazioni basate su form spesso non usano il meccanismo di serializzazione dei documenti del framework, pertanto è possibile rimuovere, disabilitare o sostituire i comandi Nuovo e Apri dal menu File . Vedere l'articolo Serializzazione: serializzazione e input/output del database.
È anche possibile usare le numerose possibilità dell'interfaccia utente supportate dal framework. Ad esempio, è possibile usare più CRecordView
oggetti in una finestra di suddivisione, aprire più recordset in diverse finestre figlio dell'interfaccia documento (MDI) e così via.
È possibile implementare la stampa di qualsiasi elemento nella visualizzazione, indipendentemente dal fatto che si tratti di un modulo implementato con CRecordView
o qualcos'altro. Poiché le classi derivate da CFormView
non CRecordView
supportano la stampa, ma è possibile eseguire l'override della funzione membro per consentire la OnPrint
stampa. Per altre informazioni, vedere classe CFormView.
Potrebbe non essere necessario usare documenti e visualizzazioni. In tal caso, vedere MFC: Uso di classi di database senza documenti e viste.