![]() |
Tabelle Öffnen+Fortschittsanzeige
Hallo Forum,
ich greife über die ADO-Komponeten von D7 auf zwei Tabellen einer MS-SQL Datenbank zu. Wenn ich die Tabellen öffne dauert es aufgrund der immensen Menge an Datensätzen extrem lang bis die Anwendung die Arbeit fortsetzen kann. Konkret habe ich im Designmodus die Komponenten mit der DB verbunden, aber die Tabellenobjekte auf ACTIVE:=False gesetzt. In der Anwendung (es ist nur ein Tool zur Datenmigration) schalte ich dann die einzelnen Tabellen auf ACTIVE:=TRUE; auf Button-Klich passiert folgendes Screen.Cursor := crHourGlass; Panel2.Visible := true; Timer1.Enabled := true; Application.ProcessMessages; // TAbelle öffnen ANTBL.Active := true; Der Timer sollte eigentlich die Caption verändern um so wenigstens Aktivität anzuzeigen. Aber er kommt wohl nicht zum reagieren. Das Öffnen der Tabelle ANTBL saugt alle Prozessorleistung. Kann man irgendwo den Fortschritt der Aktion Tabelle.Active abgreifen und anzeigen? Gruß Heiko |
AW: Tabelle Öffnen+Fortschittsanzeige
hmm 3 Stickworte
- Kein Select * - Immer N Datensätze nachladen.. - Laderoutine im Thread |
AW: Tabelle Öffnen+Fortschittsanzeige
Hallo,
nicht TADOTable benutzen, sondern TADOQuery Cursor auf clUseServer. |
AW: Tabelle Öffnen+Fortschittsanzeige
Keinen Timer verwenden...
sondern:
Code:
Frank
Label.Caption := 'Öffnen Tabelle A...';
Application.ProcessMessages; TabelleA.Active := True; Label.Caption := 'Öffnen Tabelle B...'; Application.ProcessMessages; TabelleB.Active := True; |
AW: Tabelle Öffnen+Fortschittsanzeige
Die nächste relevante Frage ist, wozu Du in der Anwendung eine solche Menge an Datensätzen unqualifiziert laden musst. Ein Nutzer braucht eigentlich nie tausende Datensätze in der GUI, damit kommt der eh nicht zurande. Daher den Nutzer zuerst filtern lassen, zum Beispiel Datensätze mit Änderungen in den letzten 2 Wochen, oder alle "Schmidt"s... etc. Und dann lediglich die relevanten Daten laden, dazu, wie von hoika bereits angemerkt, TADOQuery und den Cursor serverseitig laufen lassen und es geht viel praktikabler für den Nutzer.
Natürlich mag es Situationen geben, in welchen man die Gesamtmenge an Daten benötigt, aber in einer nutzergesteuerten Anwendung warte ich bis heute auf diesen Beweis ;) ...:cat:... |
AW: Tabelle Öffnen+Fortschittsanzeige
Zitat:
...:cat:... |
AW: Tabelle Öffnen+Fortschittsanzeige
Es kommt auch darauf an, was so lange dauert.
1) die Daten im DBMS zusammenstellen (Suchen, Filtern, Joinen usw. 2) die Daten vom DBMS ins Programm übertragen (Netzwerk) 3) die Daten in die Anzeige laden 3a) nur "aktuellen" Datensatz in paar TDBEdits ist immer gleich schnell, egal wieviel 3b) aber zu viele Datensätze in ein Grid rein, dauert schonmal ewig Das erste kann man nur durch "Vorladen" schneller machen, also das bei Abfrage schon alles fertig und abholbereit ist. z.B. ![]() Und bei 2/3 kann man entweder manuell ein "Window" laden, also jeweils nur ein paar Daten LIMIT+Offset, aber da darf Punkt 1 nicht lange dauern, wenn man das Select mehrmals abschickt. Oder die Query-Komponente und das Grid (und eventuell auch das DBMS) können einen passenden Modus, wo man die selektierten Daten dann Stück für Stück laden kann, also jeweils nur einen aktuell "sichtbaren" Bereich. Punkt 1 und 2 kann man aber auch in einem Thread im Hintergrund laden, damit nicht die GUI so lange angehalten wird. |
AW: Tabelle Öffnen+Fortschittsanzeige
Danke für die vielen Hinweise.
Mir ist natürlich klar, dass ich mit Queries arbeiten könnte, allerdings baue ich gerade keine userorientierte Oberfläche, sondern möchte Massenänderungen mit Userdialog durchführen. Jedesmal einen Datensatz zu selektieren, dannn zu prüfen, optimieren und wegschrieben würde erheblich länger dauern als einmal die Tebelle(n) komplett zu laden und zu durchlaufen. Ich war der Meinung, man kann den Status beim .Active erfragen |
AW: Tabelle Öffnen+Fortschittsanzeige
Zitat:
Wenn du größere Änderungen durchführen willst, dann könntest Du doch gleich SQL bemühen
SQL-Code:
Gruß
Update mytable set myfield='bubu' where myfield='baba';
K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 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 by Thomas Breitkreuz