PDA

Vollständige Version anzeigen : DAO zu ADO


Kevin
28.06.2001, 15:29
Hi Guys,

das DAO-Objektmodel wird ja mittlerweile von ADO abgelöst und für DAO wird auch bei MS nichts neues mehr entwickelt (soweit mein Stand von der 3. ÄEK). :(

Hat jemand Erfahrung mit ADO UND DAO gemacht, kann mir jemand sagen ob sie eine Umstellung meiner Datenbanken lohnt ????
(Ausser um sie dann auf höhere AccV zu konvertieren)

Ich bin aktuell dabei meine DB zu optimieren (Performance) und dann (wenn's klappt) auf'n SQL Server umsteigen (Backend).
Und die Frage stelle ich, um VORHER zu wissen, ob eine ADO-Umstellung nicht nur sinnvoll ist sondern mir auch noch Vorteile verschafft (z.B more Performance,..).

Hoffe ihr habt schon Erfahrungen
Gruß Kevin

Joachim Hofmann
28.06.2001, 16:14
Hallo,

was ich *konkret* sagen kann: Access DAO + SQL Server unterstüzt keine Festkommazahlen (decimal's). Als Kommazahlen kann man nur float's bzw double's einbinden, und das sind eigentlich wissenschaftlich dargestellte Zahlen. Dadurch kommt es bei "mir" je nach Anzeigefrontend zu absurden Nachkommawerten, die der Access-Benutzer garantiert nicht eingegeben hat.
Falls man wirklich mit Dezimalzahlen zu tun hat -> Verbesserung.

Siehe auch Kapitel "Migration" der SQL server FAQ http://www.berndjungbluth.de/sqlfaq/LeitseiteSQLFAQ.htm

Günni
28.06.2001, 18:16
Also erst mal vorweg: nur so aus Langeweile würd ich nie auf die Idee kommen, das Ding umzustellen. Tatsache ist aber das ADO definitiv schneller ist (nagle mich jetzt aber nicht auf einen Faktor fest). Der Grund dafür liegt in der unterschiedlichen Kommunikation der Anwendungen untereinander (Access <--> SQL-Server). Während DAO DDE verwendet (und damit ein "Uralt-Protokoll") verwendet ADO eine wesentlich schnellere OLE Kommunikation.

Trotzdem würde ich es nur machen, wenn es unumgänglich ist. Auch wenn MS für DAO nix mehr entwickelt, wird die DAO-DLL dennoch auch weiterhin mit ausgeliefert werden. Und mit etwas Disziplin ist es sogar möglich, DAO und ADO in einer Datenbank einzusetzen. Deshalb ist nur die Portierbarkeit in eine höhere Access-Version kein Argument für eine Umstellung.

Kevin
29.06.2001, 10:20
Hi,

die portierbarkeit ist auch nicht der einzigste Grund.
Die Performance sinkt total !! :(

Hab ne DB erstellt (relative komplex und groß), seit Jan ist sie in Betrieb und hat mittlerweile (nur Backend) ca 40 MB.
Da sie "wissenchaftlich" ist, sind manche Abbildung in der DB nicht so leicht zu realiesieren. (Musste leider aber auch DAO-loop zur DS Bearbeitung benutzt, was auch bremst.)
Bin dabei das whitepaper von MS zu JET Performance durchzuarbeiten um sie zu opti.
Und dabei hätte ich Stück für Stück ADO eingetauscht.
Hab halt nur noch einwenig schiess (um ehrlich zu sein). Obwohl ich beim dekla. meistens DAO. mit angab.

Aber so richtig negative Erfahrung mit ADO hat niemand ???

Kevin
PS: thx for answer

A.S.
29.06.2001, 10:59
Hallo Kevin,

ich könnte jetzt aus dem Buch "Access 2000 programmieren" von Ralf Albrecht und Natascha Nicol zitieren (erschienen bei Addison-Wesley; ISBN 3-8273-1547-6; DEM 99,90). Aus Urheberrechtsgründen werde ich dies jedoch nicht tun, sondern mein Fazit der Seiten 255 - 258 ziehen.

ADO wird zwar von Microsoft empfohlen, favorisiert und als Standard-Bibliothek bei vielen Access-Objekten - insbesondere Formularen, Modulen und Berichten - eingesetzt. Viele Funktionalitäten die mit DAO alltäglich bewerkstelligt werden, sind in ADO aber gar nicht machbar. Daher kommt man um DAO gar nicht herum, insbesondere wenn es um das Handling von Access-Datenbanken geht. Für Access-Datenbanken wird hier IMHO indirekt DAO empfohlen. Wenn es um die Arbeit beispielsweise mit SQL-Servern geht ADO.

Gruß

Arno

PS Auch die Autoren dieses Werkes gehen davon aus das DAO noch über Jahre hinaus eingesetzt werden wird.

Kevin
02.07.2001, 08:32
Hi,

reicht es denn aus wenn man alle DAO Methoden und Objekte mit DAO deklariert
(z.B. dim db as dao.database) um DAO und ADO zusammen einzusetzen??
Falls ja, noch ne Frage.
Ich habe insbesondere bei Database und Recordset DAO davorgesetzt (leider jedoch nicht bei den anderen Dingen), kann ich über die Verweis-Hierachie festlegen das DAO primär ist und ADO nur benutzt wird wenn es speziell für ein Object/Methode deklariert ist ???

Gruß Kevin

PS: Danke nochmal für die Antworten, obwohl schon früher etwas über das Thema geschrieben wurde, würde ich gerne noch mehr wissen und kram es deshalb nochmals aus.

Günni
02.07.2001, 18:13
Hi Kevin,

grundsätzlich ist es so, dass Access nach der ersten Bibliothek sucht, die eine Klasse mit dem entsprechenden Namen enthält. Dummerweise gibts jetzt aber sowohl in DAO als auch in ADO zum Beispiel ein Recordset-Objekt. Wenn Du deshalb mit

Dim ObjRes As Recordset

eine Objektvariable für ein Recordset deklarierst, hängt es von der Reihenfolge der Bibliothekseinträgen ab. Wenn Du unter Extras --> Verweise in der Liste der referenzierten Bibliotheken deshalb die DAO vor der ADO Bibliothek stehen hast, bekommst Du ein DAO-Recordset. Sind die Verweise in der anderen Reihenfolge eingetragen, bekommst Du entsprechend ein ADO-Recordset. Diese Verweis-Reihenfolge ist die einzige Möglichkeit um festzulegen, was als Default erzeugt werden soll. Deshalb ist bei Verwendung beider Bibliotheken dringend IMMER anzuraten entweder

Dim ObjRes As DAO.Recordset

oder

Dim ObjRes As ADODB.Recordset

zu definieren.

Wenn aber erst mal das richtige Objekt deklariert und instanziiert ist, "weiß" Access, ob es jeweils DAO oder ADO verwenden muß, weshalb Du dir dann keine Gedanken mehr darum machen mußt ... außer natürlich, die Objekte richtig einzusetzen :-)

<hr>

<font color="#808080" size="2" face="Arial"><strong>Mühldorfer Günter
Computer- und Software-Service
</strong></font>
mg@mgcss.de
<a href="http://www.mgcss.de">www.mgcss.de</a>

Kevin
03.07.2001, 08:56
Hi Günni,

danke erstmal für Dein aufschlussreiches Statment.
Ich würde jedoch gerne ADO und DAO einsetzten da ich mir wirklich teilweise einen Performanceschub ERHOFFE und ich dann ausserdem die JetEngine 4 einsetzten kann, wo ja die DS Speere zu gepriesen wird.
Soweit ich Dich richtig verstanden habe und auch mir noch logisch zusammen reimen kann, müßte ich nur die
Recordsets
Fields
Field
Parameters
Parameter
Errors
Error jeweils zur "richtigen" Bibo zuordnen.

Ich verstehe jedoch nur nicht warum davon immer gringend abgeraten wird???
Da ja man mit DAO (ich zumindest, besser umgehen kann und es auch einfacher ist spezielle Dinge zu erledigen), während ADO besser für Performance (je nach einsatzzweck) und auch besser für ext. Conn. (wenn bedarf).

Gruß Kevin
PS: Hoffe Du verstehst wie ich es meine, etwas ungeschickt ausgedrückt.

Günni
03.07.2001, 17:40
Vollkommen korrekt erkannt ... und warum davon abgeraten wird??? Ehrlich gesagt, keine Ahnung. Wenn es um den reinen Datenzugriff und -manipulation geht, würde ich immer zu ADO tendieren wenn die Möglichkeit dazu besteht. Nur wenn´s um Access-spezifische Besonderheiten geht (wie zum Beispiel Benutzerverwaltung in der *.mdw) würde ich DAO einsetzen. Die Ursache dafür ist aber nicht, dass ADO schlecht ist, sondern dass es sich bei den mdw´s eben einfach um einen Sonderfall geht, den´s so nur in Access gibt - deshalb darf man eigentlich nicht ADO verteufeln sonder das echt bescheuerte Benutzerkonzept von Access.

<hr>

<font color="#808080" size="2" face="Arial"><strong>Mühldorfer Günter
Computer- und Software-Service
</strong></font>
mg@mgcss.de
<a href="http://www.mgcss.de">www.mgcss.de</a>