2012-03-16 73 views
14

Questa non è una domanda su quale sia meglio, ma piuttosto una domanda sul perché differiscono dal punto di vista funzionale. Il problema che stavo incontrando è stato gestito, ma sono curioso di sapere perché questo comportamento sta accadendo.Differenza tra ADO e DAO

Sfondo: utilizzo di Excel vba per estrarre i dati da un database di Access. Quando l'utente fa clic su un pulsante, viene richiamato un recordset da Access e compila vari dati nel foglio di calcolo. Quindi, un altro recordset viene estratto da una query diversa per popolare un'altra parte del foglio di calcolo.

Cosa ADO - ADO funziona alla grande per il mio primo set di record. Tuttavia, il mio secondo set di record va alla query in Access, viene eseguito e non restituisce alcuna riga. Se eseguo questa query in Access, si apre (dopo circa 3 o 4 secondi). Questa query ha più join, elementi calcolati, limiti e possibilmente query dell'Unione (l'ho provato in molti modi diversi, con/senza unione, ecc.). Ho provato a chiudere e riaprire la connessione ado. Ho provato a cambiare i valori di timeout e ho persino provato a utilizzare un comando ADO per eseguire le query di tabella Crea per questi dati e quindi estrarre dalla tabella (ciò ha funzionato a proposito, ma non è il caso migliore, poiché i dati cambiano continuamente e non voglio dover eseguire la query table make ogni volta che qualcuno usa questo strumento).

Così, ho cambiato il secondo tiro dati DAO, ed ecco, funziona. Il primo pull di dati è ancora ADO (che generalmente preferisco usare), ma ora sto considerando di cambiarlo in DAO, perché preferirei avere un metodo di accesso ai dati nel codice.

Quindi qualcuno può spiegarmi perché ADO non estrarrà i dati in un caso, ma DAO lo farà? Ancora una volta, questo è puramente a scopo informativo.

+1

È difficile commentare senza visualizzare il codice, ma potrebbe essere un tipo di tipo cusrsor/tipo recordset. Stai facendo affidamento sulle impostazioni predefinite del tuo codice?Se si lavora solo con Access, DAO è una scelta migliore in quanto è nativo per Access e offre un maggiore controllo rispetto a ADO – SWa

+2

Dove si utilizzano i caratteri jolly? Questo è un problema comune, per ADO il carattere jolly è%, mentre DAO è (di solito) *. – Fionnuala

+0

@Remou, ho familiarità con la differenza di caratteri jolly tra i due, ma sfortunatamente non li uso nelle query. – APrough

risposta

11

DAO è il metodo di accesso ai dati nativo per le tabelle di dati Jet (MS-Access). ADO "Active X Data Objects" è una connessione di facile utilizzo per quasi tutti i tipi di database.

Con una query standard non c'è motivo in questo caso perché ADO non debba restituire alcun record su DAO, sospetto che la query debba contenere anche i parametri relativi agli elementi all'interno del database di Access. Se questo è il caso, ADO non funzionerà in quanto non avrà la possibilità di utilizzare tali parametri poiché è solo un riferimento esterno a Excel, utilizzando il metodo DAO attiverà Access per eseguire la query anziché Excel e come tale essere in grado di accedere ai propri parametri/riferimenti.

+1

+1 DAO è una scelta molto migliore di ADO per Access – SWa

+0

@Matt Donnan - I parametri non dovrebbero essere un problema; entrambe le query li usano e, dopo averlo modificato su un tavolo, li usano ancora. Deve esserci qualcos'altro in cui il processo di interrogazione sta impiegando troppo tempo o qualcosa del genere. Tuttavia, mi piace il tuo commento "l'utilizzo del metodo DAO attiverà Access per eseguire la query anziché Excel e come tale sarà in grado di accedere ai propri parametri/riferimenti". Forse ADO sta avendo Excel tenta di elaborare la query e si sta perdendo lì? – APrough

+0

@creamyegg e Kyle. Sono d'accordo che DAO è probabilmente la scelta migliore, ma generalmente uso ADO contro SQL Server, più le mie abitudini sono dure a morire, e usare ADO per la maggior parte del tempo va bene finché non mi imbatto in un problema come questo: P Oh bene, ho bisogno di ingrain me stesso da usare DAO d'ora in poi (in questi tipi di progetti). – APrough

3

Penso che questa domanda abbia già avuto una risposta molto buona ma voglio aggiungere un'altra risorsa eccellente (anche se piuttosto difficile da trovare) per confrontare DAO e ADO. Si rivolge principalmente alle applicazioni di Access con moduli di accesso e report, ma molte delle informazioni qui si applicano a una soluzione scritta in Excel.

UtterAccess Wiki Article: Choosing between ADO and ADO

1

In Visual Basic, tre interfacce di accesso ai dati sono a vostra disposizione: ActiveX Data Objects (ADO), Remote Data Objects (RDO), e Data Access Objects (DAO). Un'interfaccia di accesso ai dati è un modello a oggetti che rappresenta vari aspetti dell'accesso ai dati. Utilizzando Visual Basic, è possibile controllare a livello di codice la connessione, i builder di istruzioni e i dati restituiti per l'utilizzo in qualsiasi applicazione.

Perché ci sono tre interfacce di accesso ai dati in Visual Basic? La tecnologia di accesso ai dati è in continua evoluzione e ciascuna delle tre interfacce rappresenta uno stato dell'arte diverso. L'ultimo è ADO, che presenta un modello di oggetto più semplice, ma più flessibile rispetto a RDO o DAO. Per i nuovi progetti, è necessario utilizzare ADO come interfaccia di accesso ai dati.

+0

Leggi che ADO non è più in sviluppo Link: http://www.utteraccess.com/ wiki/index.php/Choosing_between_DAO_and_ADO –