22 Stimmen

Unterschied zwischen ADO und DAO

Hier geht es nicht um die Frage, was besser ist, sondern vielmehr darum, warum sie sich funktional unterscheiden. Das Problem, auf das ich gestoßen bin, wurde behoben, aber ich bin neugierig, warum dieses Verhalten auftritt.

Hintergrund - Verwendung von Excel vba zum Abrufen von Daten aus einer Access-Datenbank. Wenn der Benutzer auf eine Schaltfläche klickt, wird ein Datensatz aus Access gezogen, der verschiedene Daten in das Arbeitsblatt einträgt. Dann wird ein anderer Datensatz aus einer anderen Abfrage gezogen, um einen anderen Teil des Arbeitsblatts aufzufüllen.

Was ADO macht - ADO funktioniert hervorragend für meinen ersten Datensatz. Mein zweiter Datensatz geht jedoch zur Abfrage in Access, wird ausgeführt und gibt keine Zeilen zurück. Wenn ich diese Abfrage in Access ausführe, öffnet sie sich (nach etwa 3 bis 4 Sekunden). Diese Abfrage enthält mehrere Verknüpfungen, berechnete Elemente, Begrenzungen und möglicherweise Unionsabfragen (ich habe sie auf viele verschiedene Arten ausprobiert, mit/ohne Union usw.). Ich habe versucht, die Ado-Verbindung zu schließen und erneut zu öffnen. Ich habe versucht, Timeout-Werte zu ändern, und ich habe sogar getestet, einen ADO-Befehl zu verwenden, um Make-Table-Abfragen für diese Daten auszuführen und dann stattdessen aus der Tabelle zu ziehen (dies hat übrigens funktioniert, ist aber nicht der beste Fall, da sich die Daten ständig ändern und ich nicht jedes Mal, wenn jemand dieses Tool verwendet, die Make-Table-Abfrage ausführen möchte).

Also änderte ich den zweiten Datenzugriff auf DAO, und siehe da, es funktioniert. Der erste Data Pull ist immer noch ADO (was ich im Allgemeinen bevorzuge), aber ich überlege jetzt, ihn in DAO zu ändern, weil ich lieber eine einzige Datenzugriffsmethode im Code hätte.

Kann mir also jemand erklären, warum ADO die Daten in einem Fall nicht abruft, DAO aber schon? Nochmals, dies ist rein zu Informationszwecken.

15voto

Matt Donnan Punkte 4843

DAO ist die native Datenzugriffsmethode für die Datentabellen von Jet (Ms-Access). ADO "Active X Data Objects" ist eine industriefreundliche Verbindung zu fast allen Arten von Datenbanken.

Bei einer Standardabfrage gibt es in diesem Fall keinen Grund, warum ADO keine Datensätze zurückgeben sollte, während DAO dies tut. Ich vermute, dass die Abfrage auch Parameter enthalten muss, die sich auf Elemente in der Access-Datenbank beziehen. Wenn dies der Fall ist, wird ADO nicht funktionieren, da es nicht die Möglichkeit hat, die besagten Parameter zu verwenden, da es sich nur um einen externen Verweis auf Excel handelt. Die Verwendung der DAO-Methode wird Access dazu veranlassen, die Abfrage anstelle von Excel auszuführen, und so kann es auf seine eigenen Parameter/Verweise zugreifen.

6voto

HK1 Punkte 11408

Ich denke, diese Frage wurde bereits sehr gut beantwortet, aber ich möchte noch eine weitere ausgezeichnete (wenn auch etwas schwer zu findende) Ressource zum Vergleich von DAO und ADO hinzufügen. Sie zielt in erster Linie auf Access-Anwendungen mit Access-Formularen und -Berichten ab, aber viele der Informationen hier würden auch für eine in Excel geschriebene Lösung gelten.

UtterAccess Wiki Artikel: Die Wahl zwischen ADO und ADO

4voto

In Visual Basic stehen Ihnen drei Datenzugriffsschnittstellen zur Verfügung: ActiveX Data Objects (ADO), Remote Data Objects (RDO) und Data Access Objects (DAO). Eine Datenzugriffsschnittstelle ist ein Objektmodell, das verschiedene Facetten des Datenzugriffs darstellt. Mit Visual Basic können Sie die Verbindung, die Anweisungsersteller und die zurückgegebenen Daten zur Verwendung in jeder Anwendung programmatisch steuern.

Warum gibt es drei Datenzugriffsschnittstellen in Visual Basic? Die Datenzugriffstechnologie entwickelt sich ständig weiter, und jede der drei Schnittstellen stellt einen anderen Stand der Technik dar. Die neueste ist ADO, das ein einfacheres, aber flexibleres Objektmodell als RDO oder DAO bietet. Für neue Projekte sollten Sie ADO als Datenzugriffsschnittstelle verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X