Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Geschwindigkeit-Zugriff Access ADO (https://www.delphipraxis.net/81665-geschwindigkeit-zugriff-access-ado.html)

fhaehnel 1. Dez 2006 07:35

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

hoika 1. Dez 2006 07:39

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

fhaehnel 1. Dez 2006 07:44

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

Bernhard Geyer 1. Dez 2006 08:40

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 AQTime die Bremse suchen. Bei den Wrapper gibt es eine Performance-Bremse wenn Queries geöffnet werden.

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.

hoika 1. Dez 2006 10:12

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

alzaimar 1. Dez 2006 11:57

Re: Geschwindigkeit-Zugriff Access ADO
 
Dumme Frage: Was willst Du denn mit 80.000 Records anstellen? Geht das nicht auch mit DML?

Arthur Hoornweg 1. Dez 2006 13:58

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.

hoika 1. Dez 2006 15:34

Re: Geschwindigkeit-Zugriff Access ADO
 
ah ja,

so rum war es ;)


Heiko

fhaehnel 1. Dez 2006 20:17

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.

Hansa 1. Dez 2006 20:32

Re: Geschwindigkeit-Zugriff Access ADO
 
Zitat:

Zitat von fhaehnel
..erst mal vielen Dank für die Anregungen, für weiter Ideen an dieser Stelle würde ich mich freuen.

Die Hauptidee fehlt sowieso noch. :lol: Also : Access wegwerfen und richtige DB benutzen. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:20 Uhr.
Seite 1 von 2  1 2      

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