Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

ADO und DAO im Vergleich/Schreibschutz bei DAO auf SQL-Server ????





Frage

Hallo Ihr Lieben, mich hat heute gänzlich der Schlag getroffen. Zum Hintergrund. Im Netz liegt der SQL-Server. Idee ist es mit VB eine Anwendung zu bauen und dabei die Daten vom SQL Server 7 zu nutzen. So weit ok. Angefangen habe ich das ganze mit ADO zu proggen. Bis die Daten da sind dauert es zwei Sekunden, egal wie viele Daten angezeigt werden und auch egal ob select * ..... oder select feld, feld2 from...... usw. Also 2 Sekunden, ok kenn ich ja so auch von ADO. Aber dann der Hammer, denn beim erstellen einer Beispiel.exe wird auch das Programm MDAC_typ.exe mit verpackt (samt .dll`s usw.) Das ganze gepackt fix und fertig ergibt dann so ca. 9,5 MB Das ist aber noch nicht alles, denn die Anwendung würde beim Fremdclient voraussetzen, das auch DCOM dort installiert ist. Weitere 1,2 MB. Wären also dann so ca. 11-12 MB. Wenn ich mir jetzt vorstelle, das sich die Leute diese 11-12 MB mit ISDN bei ca. 5 KB runterziehen müssen, würde dies ca. 33 Minuten dauern. Da zeigt mir doch jeder den Vogel, so geil es dann auch wäre, also die Anwendung. Also ich habe dann überlegt; ok, schau ich mir mal die Sache mal mit DAO an. Gesagt getan: SQL = "SELECT * from forumeinstellungen" Set CN = OpenDatabase("", dbOpenDynaset, False, "PROVIDER=SQLOLEDB.1;DRIVER=SQL Server;SERVER=;UID=;PWD=;") Set RS = CN.OpenRecordset(SQL, dbOpenDynaset) Auch hier ist es völlig egal ob ich mir 100, 1000 oder 5000 Daten anzeigen lassen will. Es dauert exakt immer 7 Sekunden. Das ist hart an der Schmerzgränze. Übrigens beziehen sich diese Sekundenwerte auf eine DSL-Verbindung Ich wollte es jetzt aber genauer wissen, also habe ich mir angeschaut wie viel KB sich welche Methode zieht und was passiert bei movenext. Hier das Ergebnis: ADO = Erste Verbindung, 5 KB gezogen in 2 Sekunden DAO = Erste Verbindung, 30 KB gezogen in 7 Sekunden Wenn ich also 30 KB durch 5 KB dividiere, dann komme ich auf 6 (Sekunden). Das haut also mit den 7 Sekunden ca. hin Nun das ganze mit MoveNext ADO = 1x MoveNext, 5 KB gezogen, ca 1 Sekunde jedes weitere MoveNext, 5 KB, ca 1 Sekunde DAO = 1x MoveNext, 14 KB gezogen, ca 3 Sekunden dann 50 x MoveNext, 0 KB gezogen, 0 Sekunden, dann zieht DAo sich wieder 50 Daten, so scheint es mit 13-14 KB in ca- 2-3 Sekunden. Und so geht das alle 50 Datensätze weiter Ich stelle fest, korregiert mich wenn nicht richtig, dass ADO die erste Verbindung schneller aufbaut als DAO, aber mit MoveNext lädt er sich mit 2-3 KB jedesmal den neuen Datensatz DAO hingegen ist am Anfang langsamer, ca. 7 Sekunden, lädt dann beim ersten MoveNext 50 Datensätze mit 13-14 KB und dann kann man 50 mal MoveNext ausführen ohne das DAO weitere KB runterlädt. Su nun meine Fragen dazu: 1. Wieso arbeitet ADO so und DAO halt anders 2. Da mir die ADO-Variante besser gefällt, ich aber keine Anwendung von 11-12 MB zur Verfügung stellen möchte, sondern weniger >> gibt es eine Möglichkeit, die Arbeitsweise wie oben unter DAO beschrieben so zu ändern, das ich micht DAO arbeite aber die Verfahrensweise von ADO nutze. CursorType und solche Sachen meine ich alle schon getestet zu haben, da ändert sich beim DAO-Verfahren nichts, gar nichts 3. Kann ich mit ADO arbeiten ohne das VB mir dass MDAC_typ.exe mit verpackt 4. Kann ich mit ADO arbeiten und VB klarmachen, das es zwar die ADO-Bibliotheken mit verpackt, ca. 2-3 MB aber dafür das Programm MDAC_typ.exe ca. 6 MB draussen lässt 5. Was mich sonst an DAO stört ist die Tatsache, das, um eine Verbindung letztendlich aufzubauen und mit RS die Daten zu bekommen, jedesmal mit Set RS ein Recordset-Objekt aufgemacht wird. Klar kann ich mit Nothing die Sache jedesmal wieder löschen, aber dennoch kostet dies wieder Performance. Hab ich ne Möglichkeit beide Objekte einmal nur zu definieren. Im Modul oder Klassenmodul. Mit RS.OpenRecordset SQL, dbOpenDynaset komme ich nicht weiter, da bekomme ich den fehler das die With-Blockvariable fehlt 5. Sonstige Tips & Tricks von Euch Ich weiß ist viel, aber sonst ist es aus dem Zusammenhang genommen und dann ist dies auch nicht gut. Danke für Eure Mühe im voraus. P.S. Noch was vergessen: Habe folgendes geschrieben: Dim CN as Database Dim RS as Recordset SQL = "SELECT ident,beschreibung,kategorie,bereich,admin from forumeinstellungen order by ident DESC" Set CN = OpenDatabase("", False, False, "PROVIDER=SQLOLEDB.1;DRIVER=SQL Server;SERVER=;UID=;PWD=;") Set RS = CN.OpenRecordset(SQL) abfragen klappt alles einwandfrei, aber das löschen und bearbeiten klappt nicht, es kommt die Fehlermeldung das die Datenbank schreibgeschützt ist. Was muss ich im Code schreiben, um dies zu ändern ? Gruß

Antwort von



Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: