![]() |
Datenbank: MS-Access • Version: 2003 • Zugriff über: Ado; Treiber: MS-Jet OLEDB 4.0
Access CommandText zuweisen dauert 10 Sekunden
Eine Frage an alle, die mit Delphi auf eine Access-Datenbank zugreifen:
Gegeben ist eine Adress-Datenbank mit 16 Feldern und 10.000 Einträgen. Beim Suchen werden relevante Datensätze selektiert, in der Tabelle (DBgrid) werden auch nur die selektierten Datensätze angezeigt und zusätzlich eine CheckBox "nur Suchergebnisse anzeigen" gechecked. Besser gesagt: Erst in der Ereignisbehandlung "OnClick" dieser Checkbox weise ich den CommandText der AdoDataSet-Komponente zu:
Delphi-Quellcode:
Das funktioniert alles bestens, die Resultate sind einwandfrei, keine Fehlermeldungen wegen falscher SQL-Statements usw. Doch das Rücksetzen (DefaultFilter), das mit dem Entfernen des Hakens in der CheckBox ausgelöst wird, dauert gute 10 Sekunden (bei einem Intel Double-Core-Rechner mit insges. 7 GHz). SuchFilter und DefaultFilter sind Widestrings, die den CommandText enthalten. Erstgenannte Variable enthält den CommandText für die Selektion (Select Adress.Name, Adress.Vorname usw. FROM ... WHERE ...) und DefaultFilter einfach nur "Select * FROM Adress".
DatMod.Aset_Adress.Active := FALSE;
IF Check_Suchanzeige.Checked THEN DatMod.Aset_Adress.CommandText := SuchFilter ELSE DatMod.Aset_Adress.CommandText := DefaultFilter; DatMod.Aset_Adress.Active := TRUE; Mich interessiert nun, ob diese unerträglich lange Zeit von 10 Sekunden, die benötigt wird, um wieder alle Einträge anzuzeigen, an MS-Access liegt oder ob ich etwas falsch/umständlich mache und das beschleunigen könnte. Ich danke schon mal im Voraus für eure wertvollen Hinweise. |
Re: Access CommandText zuweisen dauert 10 Sekunden
Hallo und Willkommen in der DP :dp:,
DisableControls und EnableControls hast Du benutzt? Ich könnte mir vorstellen, dass die Neuzeichnerei der datensensitiven Komponenten der Flaschenhals ist. |
Re: Access CommandText zuweisen dauert 10 Sekunden
Zitat:
Zitat:
|
Re: Access CommandText zuweisen dauert 10 Sekunden
Ich meinte die DisableControls-Methode von TDataset.
Zitat:
|
Re: Access CommandText zuweisen dauert 10 Sekunden
Zitat:
AHH, jetzt ist mir noch was aufgefallen: vor dem EnableControls stand bei mir noch ein Refresh. Nachdem ich das rausgelöscht habe, dauert der Vorgang nur noch ca. 2 Sekunden. Das ist akzeptabel. Ich danke dir für deine schnelle und punktgenaue Hilfe. Ohne diese hätte ich wohl stundenlang gesucht ;-) |
Re: Access CommandText zuweisen dauert 10 Sekunden
Kein Problem, dazu ist ein Forum ja da ;)
|
Re: Access CommandText zuweisen dauert 10 Sekunden
Zitat:
Eine Frage hab ich aber noch: Wie stelle ich es an, den Thread hier als beantwortet zu markieren? Oder muß ich das nur, wenn ich zuvor den Haken "Als offene Frage markieren" gesetzt habe? |
Re: Access CommandText zuweisen dauert 10 Sekunden
Zitat:
|
Re: Access CommandText zuweisen dauert 10 Sekunden
Zitat:
Arbeitest du auch mit CurserLocation clUseServer? Kann bei Access auch einiges wegen vermeiden einer unnötigen Datenkopier-Aktion bringen. |
Re: Access CommandText zuweisen dauert 10 Sekunden
Zitat:
Zitat:
Wenn ich die Eigenschaft CursorLocation richtig verstanden habe, arbeitet mein Programm bei clUseClient mit einer Kopie, die auf der Platte liegt? Und bei clUseServer mit der Original-Datei (z.B. Adressen.mdb)? In meiner Online-Hilfe steht, daß sich der Wert nur auf Verbindungen auswirkt, die nach der Zuweisung geöffnet werden. Und daß man clUseServer verwenden muß, wenn der Plattenplatz beim Client nicht ausreichen würde, alle selektieren Datensätze zwischen zu speichern. Platz hab ich aber genug, daher dürfte es wohl egal sein, welche Einstellung ich beim Property CursorLocation verwende. Die Datenbank liegt zudem im selben Ordner wie die Anwendung, also nicht auf irgend einem Server. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 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