AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Access CommandText zuweisen dauert 10 Sekunden
Thema durchsuchen
Ansicht
Themen-Optionen

Access CommandText zuweisen dauert 10 Sekunden

Ein Thema von Perlsau · begonnen am 26. Sep 2009 · letzter Beitrag vom 29. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
Perlsau
(Gast)

n/a Beiträge
 
#1

Access CommandText zuweisen dauert 10 Sekunden

  Alt 26. Sep 2009, 12:16
Datenbank: MS-Access • Version: 2003 • Zugriff über: Ado; Treiber: MS-Jet OLEDB 4.0
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:
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;
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".

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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: Access CommandText zuweisen dauert 10 Sekunden

  Alt 26. Sep 2009, 12:20
Hallo und Willkommen in der DP ,

DisableControls und EnableControls hast Du benutzt? Ich könnte mir vorstellen, dass die Neuzeichnerei der datensensitiven Komponenten der Flaschenhals ist.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

Re: Access CommandText zuweisen dauert 10 Sekunden

  Alt 26. Sep 2009, 12:41
Zitat von DeddyH:
Hallo und Willkommen in der DP ,
Herzlichen Dank. Bin hier zwar schon länger angemeldet, hab aber ausser einer Gesuch noch nichts geschrieben.

Zitat von DeddyH:
DisableControls und EnableControls hast Du benutzt? Ich könnte mir vorstellen, dass die Neuzeichnerei der datensensitiven Komponenten der Flaschenhals ist.
Meinst du damit, ich soll die Eigenschaft Enabled des DBgrid und der DB-Editfelder vor dem Zuweisen von CommandText auf FALSE setzen und nach dem .Active := TRUE wieder auf TRUE? Wenn ja, das hab ich eben ausprobiert, ohne daß die Sache schneller wurde.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

Re: Access CommandText zuweisen dauert 10 Sekunden

  Alt 26. Sep 2009, 12:47
Ich meinte die DisableControls-Methode von TDataset.
Zitat von Delphi-Hilfe:
Rufen Sie DisableControls vor dem Verarbeiten einer großen Anzahl von Datensätzen auf, damit die datensensitiven Steuerelemente nicht bei jeder Änderung des aktiven Datensatzes aktualisiert werden. Auf diese Weise kann die ständige Bildschirmaktualisierung verhindert und die Verarbeitung beschleunigt werden, da die Daten nicht laufend auf dem Bildschirm ausgegeben werden müssen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

Re: Access CommandText zuweisen dauert 10 Sekunden

  Alt 26. Sep 2009, 12:52
Zitat von DeddyH:
Ich meinte die DisableControls-Methode von TDataset.
Oh, sorry, das hab ich mißverstanden. Doch auch das beschleunigt den Vorgang nicht: ich kann dabei locker bis 10 zählen ...
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

Re: Access CommandText zuweisen dauert 10 Sekunden

  Alt 26. Sep 2009, 12:57
Kein Problem, dazu ist ein Forum ja da
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

Re: Access CommandText zuweisen dauert 10 Sekunden

  Alt 26. Sep 2009, 14:59
Zitat von DeddyH:
Kein Problem, dazu ist ein Forum ja da
Genau, ich fühl mich jetzt auch wie im 7. Programiererhimmel

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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

Re: Access CommandText zuweisen dauert 10 Sekunden

  Alt 26. Sep 2009, 16:28
Zitat von Perlsau:
Oder muß ich das nur, wenn ich zuvor den Haken "Als offene Frage markieren" gesetzt habe?
So ist es.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.198 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Access CommandText zuweisen dauert 10 Sekunden

  Alt 26. Sep 2009, 18:11
Zitat von Perlsau:
(bei einem Intel Double-Core-Rechner mit insges. 7 GHz)
Vergiss die GHz. Bei der verwendung einer Desktop-DB ist oft die HD bzw. die RAM-Geschwindigkeit primär für die Geschwindigkeit verantwortlich. Und Access glaube ich kann auch nicht mit mehr als einem Kern anfangen.

Arbeitest du auch mit CurserLocation clUseServer? Kann bei Access auch einiges wegen vermeiden einer unnötigen Datenkopier-Aktion bringen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#10

Re: Access CommandText zuweisen dauert 10 Sekunden

  Alt 26. Sep 2009, 18:36
Zitat von Bernhard Geyer:
Vergiss die GHz. Bei der verwendung einer Desktop-DB ist oft die HD bzw. die RAM-Geschwindigkeit primär für die Geschwindigkeit verantwortlich. Und Access glaube ich kann auch nicht mit mehr als einem Kern anfangen.
Das wußte ich nicht. Ich hatte beim letzten Kunden, der eines meiner Delphi-Programme mit Access-Datenbank auf einem 800-Mhz-Rechner fährt, keinen erkennbaren Geschwindigkeitsunterschied bemerken können.

Zitat von Bernhard Geyer:
Arbeitest du auch mit CurserLocation clUseServer? Kann bei Access auch einiges wegen vermeiden einer unnötigen Datenkopier-Aktion bringen.
Hab eben mal umgestellt auf clUseServer, doch ohne erkennbaren Unterschied, wenn ich die Where-Bedingung wieder aufhebe und alle Datensätze anzeigen lasse. Ich muß das mal genauer testen mit eingebauten Timer, ob sich bei verschiedenen Operationen, die ich benötige, ein Gewschwindigkeitsvorteil ergibt.

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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz