Domanda

Quando si crea un nuovo database in Access 2007, è necessario utilizzare ADO (ActiveX Data Objects) o DAO (Data Access Objects)?

Modifica: parte del database importerà i dati dai fogli di calcolo di Excel 2007.

È stato utile?

Soluzione

[Per la cronaca, il nome ufficiale di quello che una volta era "Jet" è ora "Motore di database di accesso".]

Per le funzionalità ACE (il formato .accdb del motore Access2007) deve essere ACEDAO.

Per le funzionalità di Jet 4.0 deve essere un classico ADO.

Per le funzionalità Jet 3.51 e precedenti, selezionare ADO o DAO. Ci sono vantaggi e svantaggi per entrambi. La stragrande maggioranza delle funzionalità del motore di database di Access è comune a entrambi; la funzionalità reciprocamente esclusiva è discutibile frangia. Una scelta di vita, forse, ma non è un grosso problema. Lo smart coder utilizza il meglio di entrambi :)

Ho usato entrambi un bel po 'e ADO è la mia preferenza personale. È più moderno di DAO, quindi dal punto di vista architettonico è un miglioramento: modello di oggetto più piatto, nessuno dei problemi di demolizione di DAO, ecc. Altre proprietà e metodi e introduce eventi (DAO non ne ha) ad es. per connessione asincrona e recupero di record. I recordset ADO possono essere disconnessi, gerarchici e fabbricati, i recordset DAO no. Fondamentalmente, hanno preso le cose buone di DAO e le hanno rese migliori.

DAO non è privo di punti di forza. Per uno, troverai più esempi di codice DAO di ADO per Access / Jet.

P.S. per qualche ragione, alle persone a cui piace DAO non piace davvero ADO. Ignora la propaganda. ADO non è deprecato. L'ACE ha un provider OLE DB ed è attualmente l'unico modo per utilizzare ACE a 64 bit. ADO.NET non ha sostituito ADO classic più di quanto VB.NET abbia sostituito VBA6 nei progetti di Access.

EDIT: solo per chiarire, " Per le funzionalità Jet 4.0 deve essere classico ADO, " questo perché DAO 3.6 ha ricevuto solo alcuni miglioramenti per le funzionalità nuove di Jet 4.0. Ad esempio, per il tipo di dati DECIMAL non è possibile specificare la scala / precisione. Altre funzioni mancano completamente da DAO. Ad esempio, è possibile effettuare le seguenti operazioni in Jet 4.0 utilizzando DAO (o ACEDAO in ACE per quella materia)?

CREATE TABLE Test (
   col1 CHAR(4) WITH COMPRESSION DEFAULT '0000' NOT NULL, 
   CHECK (NOT EXISTS (
                      SELECT T1.col1 
                        FROM Test AS T1 
                        WHERE T1.col1 <> '0000' 
                        GROUP 
                           BY T1.col1 
                       HAVING COUNT(*) > 1
                      ))
);

(suggerimento: colonna di testo comprimibile a larghezza fissa con vincolo di integrità dei dati a livello di tabella.) No, non puoi.

AFAIK gli unici miglioramenti ad ACEDAO riguardavano la nuova funzionalità ACE, cioè non tornarono indietro e colmarono le lacune Jet 4.0 in DAO. E perché dovrebbero? Abbiamo ancora ADO per colmare le lacune. Meglio che il team abbia trascorso il proprio tempo in modo più produttivo, come correggere quel fastidioso bug di ordinamento DECIMAL , per me la cosa migliore di ACE ;-)

Altri suggerimenti

DAO è la tecnologia consigliata qui. ADO è stato ampiamente ammortizzato e ora viene sostituito con ADO.net.

DAO non è solo il modello di oggetti dati nativo e consigliato per l'utilizzo dell'accesso MS, ma continua ad essere migliorato e ora ha un sacco di nuove funzionalità per sharepoint. In Access 2007 ora abbiamo il supporto per gli elenchi di SharePoint. Ciò significa che il nuovo modello a oggetti DAO per il 2007 consente di utilizzare e visualizzare un elenco di sharepoint come tabella di server SQL. Ciò significa che è possibile utilizzare SQL negli elenchi sharepoint (di fronte non esiste nemmeno un provider oleDB che consente di utilizzare gli elenchi di SharePoint in questo modo, ma con DAO ora è possibile farlo). Non è stato aggiunto nulla di questo tipo ad ADO. Quindi gli elenchi di SharePoint dal punto di vista dell'accesso (dao) vedono questi elenchi di SharePoint come una tabella standard.

Inoltre DAO in accesso ha anche il supporto per quelli che chiamiamo tipi di dati complessi. Ciò è stato fatto per supportare gli elenchi XML da sharepoint. Tenete presente che per la prossima versione di accesso (2010) vedremo un sacco di nuove funzionalità aggiuntive aggiunte a DAO (JET è ora chiamato ACE).

Quindi, senza dubbio, DAO è il modello corretto e buono da usare. ADO non riceve più miglioramenti ed è stato sostituito da ADO.NET.

Quindi il futuro appartiene a DAO ed è chiaro che è dove Microsoft sta investendo i suoi soldi in termini di accesso agli Stati membri e termini di aggiornamento di Access per lavorare con cose sharepoint.

Access 2007 ha ricevuto funzionalità multi-valore per le sue definizioni di campo, e di nuovo questo è stato il risultato di miglioramenti per il supporto di sharepoint. Tuttavia, queste funzionalità fanno parte di JET e questi miglioramenti possono essere utilizzati senza sharepoint. ora fanno parte di DAO.


modifica: Forse approfondirò un po 'questo argomento e cercherò di chiarire quali sono le risposte così opposte qui, posso assicurarti che quando usi Access 2007, sei molto meglio usare DAO.

Da dove deriva la confusione, se si guarda ai riferimenti degli strumenti quando si sceglie di utilizzare l'accesso al modello a oggetti di dati predefinito 2007, il problema qui è che non si chiama più DAO. Ora si chiama ACE.

Quando si utilizza DAO in Access 2007, si noterà nei riferimenti dello strumento, il riferimento non è impostato su DAO 3.6 (tale versione è stata deprezzata e ora non fa più parte del download di MDAC). Noterai che il nuovo riferimento quando usi DAO in ms-access si chiama:

Libreria oggetti del motore di database di accesso a Microsoft Office 12.0

Ora quanto sopra è un po 'pieno, ma quanto sopra è corretto per l'accesso di riferimento 2007 quando si utilizzerà DAO al posto di ADO.

In altre parole, forse dovremmo chiamare questo DAO II.

In altre parole, questo motore di dati continua a essere migliorato e sicuramente vedrà una versione a 64 bit di questo motore per Office 2010 (Office 14).

Quindi la domanda o la confusione ruota attorno al termine che useremo quando ci riferiamo all'utilizzo di DAO in accesso 2007. La confusione qui è in realtà che la documentazione e persino gli strumenti - > riferimento non lo chiamano DAO.

Alla fine della giornata in Access 2007, se si prevede di utilizzare DAO, ciò significa che si imposta il riferimento sopra e non si fa riferimento a DAO 3.6. Indipendentemente da ciò, non ha assolutamente senso iniziare a utilizzare ADO ora quando è stato ammortizzato e il nuovo modello a oggetti DAO per l'accesso continua a essere migliorato e investito da Microsoft.

Spero che questo aiuti a chiarire la confusione qui. Mentre DAO / JET viene ammortizzato, l'accesso alla nuova versione 2007 si basa sulla stessa base di codice, tranne per il fatto che continua a essere migliorato. Quindi il nuovo motore di dati in accesso può essere considerato e chiamato il nuovo modello a oggetti DAO.

Sono attualmente sotto NDA su questo problema, ma posso sicuramente dirtelo per la prossima versione di Office (2

La risposta alla domanda dipende da cosa stai facendo. Se si utilizza Access per lavorare con dati in un formato la cui interfaccia ADO è più versatile, utilizzare ADO. Se stai utilizzando i dati Jet o il motore di database Jet per lavorare con un altro motore di database (tramite ODBC), DAO è la scelta giusta.

Ma quella risposta presuppone che tu stia lavorando da Access. Se lavori da un altro ambiente di programmazione, le risposte saranno probabilmente completamente diverse.

Dipende dalle tue esigenze. Nessuno degli strumenti dovrebbe scomparire presto.

Se non hai esperienza in ADO o DAO, scoprirai che DAO è molto, molto più semplice. Quindi, a meno che tu non abbia bisogno di ADO, usa DAO.

Hai aggiunto questo elemento critico: " Sto cercando di inserire dati da una fonte esterna in un DB di accesso. " Questa connettività potrebbe richiedere ADO.

ADO è l'attuale metodo di accesso consigliato. Penso che DAO sia stato deprecato per un certo numero di anni.

Sembra che sia stato da Access 2000 - secondo questo link ,

Elenco di tecnologie di accesso ai dati obsolete - http: // msdn. microsoft.com/en-us/library/ms810810.aspx#mdac road map tecnologie old_topic9

Citazione dell'articolo precedente, che è stato rivisto a dicembre 2008 - " Data Access Objects (DAO): DAO fornisce l'accesso ai database JET (Access). Questa API può essere utilizzata da Microsoft Visual Basic, Microsoft Visual C ++ e dai linguaggi di scripting. Era incluso con Microsoft Office 2000 e Office XP. DAO 3.6 è la versione finale di questa tecnologia. Non sarà disponibile sul sistema operativo Windows a 64 bit. & Quot;

DAO oscilla in termini di prestazioni rispetto ad ADO. Non c'è paragone.

Mi scuso che questa sia una risposta, quando avrebbe dovuto essere un commento (non ho il rappresentante), ma volevo chiarire un'errata affermazione che DAO / ACEDAO non supporta il blocco dei record Jet 4.0. Lo fa, e questo è il comportamento predefinito, indipendentemente da ciò che affermano alcuni articoli della SM.

Il problema è che questo può introdurre un enorme gonfiore (file DB estremamente frammentato) quando si utilizza la modifica / aggiornamento DAO e non è possibile disattivarlo in DAO / ACEDAO.

Se si riscontra questo problema, è possibile disattivarlo aprendo prima il database tramite una connessione OLEDB utilizzando le impostazioni Jet OLEDB: Modalità blocco database corrette, che consentono di impostare il database sul blocco a livello di pagina. Questa proprietà verrà quindi rispettata da connessioni conseguenti, DAO o altro, quindi è possibile utilizzare DAO per aggiornamenti rapidi ecc.

Ciò consentirà quindi a DAO di ripristinare le normali prestazioni 8X rispetto all'esecuzione delle istruzioni SQL.

Ecco un paio di link che indicano il problema:

ACEDAO supporta il blocco a livello di riga?

http://www.access-programmers.co .uk / forum / showthread.php? t = 47040

Articolo di MS KB, incluso il codice di impostazione della modalità di blocco con ADO, quindi l'utilizzo di DAO su quel DB - http://support.microsoft.com/?id=306435

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top