![]() |
Datenbank: Access • Version: 2000 • Zugriff über: ADO
Geschwindigkeit-Zugriff Access ADO
Hallo,
wie sind eure Erfahrungen mit der Zugriffs-Geschwindigkeit auf eine Access-MDB per Ado ? Ich versuche durch Anpassungen vom ConnString eine höhere Lesegeschwindigkeit bei ca 80.000 Datensätze zu erreichen, dennoch ist die ADO-Query/AdoNext einfach zu langsam. Ich will das Problem mal kurz beschreiben: Schon rein die Ado-Schleife (SQL-Command mit SELECT felder WHERE tbl ORDER BY datum) und Veränderungen an den Cursortyp und CursorLocation änderte an dem Zugriff nichts, die Datenbank vom Netzlaufwerk auf das Lokale LW zu verschieben brachte auch nichts. Ich habe die Tabellen testweise auf eine lokale MSDE kopiert, nur die ConnString angepasst und es läuft wesentlich schneller, leider müssen die Zugriffe auf die MDBs laufen. fhaehnel |
Re: Geschwindigkeit-Zugriff Access ADO
Hallo,
CursorType sollte auf ctClient stehen, weil Access ja keinen Server hat. Bei der MSDE auf ctServer ?. Dort würde auch der Firehouse-Cursor was bringen . Ansonsten hats du bei der MDB wie bei jeder Acess-Datenbank das Problem, dass 80000 Datensätze übers Netz laufen sollen (warum die lokale nicht schneller ist, weiss ichnicht). Hängt an der Query noch ne Datasource + DBGrid ? -> DisableControls. Heiko |
Re: Geschwindigkeit-Zugriff Access ADO
nein
es ist eine einfach AdoQuery ( if not ADOQuery.IsEmpty then / while not ADOQuery.Eof do begin ) AdoNext - Schleife. Ich habe auch schon den inhalt der Schleife herrausgenommen, es liegt an dem reine Zugriff. fhaaehnel |
Re: Geschwindigkeit-Zugriff Access ADO
Schon mal probiert mit den nativen ADO-Objekten zu arbeiten (also ohne die VCL-Wrapper)?
Ansonsten kannst Du mal mit ![]() Ebenfalls könntest du die Einstellungen deiner TADOConnection und TADOQuery Posten. Ich würde dir auch raten TADODataset statt TADOTable/TADOQuery zu verwenden. Diese sind nur wegen der einfachen Portierbarkeit von BDE vorhanden und haben selbst ein paar Macken. |
Re: Geschwindigkeit-Zugriff Access ADO
Hallo,
unter Umständen ist es das IsEmpty, nimm das mal weg. Es reicht while not EOF EOF ist bei IsEmpty True. Die BDE hatte damals beim Check auf IsEmpty alle Datensätze runtergeladen und gezählt. Heiko |
Re: Geschwindigkeit-Zugriff Access ADO
Dumme Frage: Was willst Du denn mit 80.000 Records anstellen? Geht das nicht auch mit DML?
|
Re: Geschwindigkeit-Zugriff Access ADO
Ich muss Hoika widersprechen.
Bei MDB Datenbanken sollte man wirklich lieber einen Serverseitigen Cursor nehmen (cursorlocation=cluseserver), bei "richtigen" Servern wie MSDE dagegen einen clientseitigen Cursor weil der sehr viel besser skaliert. Der "Server" ist bei Access die Access/Jet DLL, der die Daten eh im lokalen Hauptspeicher verwaltet. Also auch bei einem Serverseitigen Cursor hat man bei Access die angefordeten Daten immer lokal im Hauptspeicher. Nimmt man einen Clientseitigen Cursor, werden die Daten von Ado noch einmal unnötigerweise kopiert. Teste mal beide varianten durch, und beobachte den Speicherverbrauch im Task manager. Idealerweise sollte die MDB Datei auf der eigenen Festplatte liegen. |
Re: Geschwindigkeit-Zugriff Access ADO
ah ja,
so rum war es ;) Heiko |
Re: Geschwindigkeit-Zugriff Access ADO
ich habe einiges getestet, aber schneller ist es leider nicht geworden.
hier nochmals mein ConnString: Provider=Microsoft.Jet.OLEDB.4.0;Data Source="n:\db\datenbank.mdb";Persist Security Info=False Dennoch erst mal vielen Dank für die Anregungen, für weiter Ideen an dieser Stelle würde ich mich freuen. |
Re: Geschwindigkeit-Zugriff Access ADO
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz