AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Tabelle Öffnen+Fortschittsanzeige

Tabelle Öffnen+Fortschittsanzeige

Ein Thema von Sugar · begonnen am 20. Okt 2016 · letzter Beitrag vom 21. Okt 2016
Antwort Antwort
Sugar

Registriert seit: 23. Jul 2012
83 Beiträge
 
#1

Tabelle Öffnen+Fortschittsanzeige

  Alt 20. Okt 2016, 19:30
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
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.123 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Tabelle Öffnen+Fortschittsanzeige

  Alt 20. Okt 2016, 23:04
hmm 3 Stickworte

- Kein Select *
- Immer N Datensätze nachladen..
- Laderoutine im Thread
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Tabelle Öffnen+Fortschittsanzeige

  Alt 21. Okt 2016, 05:07
Hallo,
nicht TADOTable benutzen, sondern TADOQuery
Cursor auf clUseServer.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Tabelle Öffnen+Fortschittsanzeige

  Alt 21. Okt 2016, 09:24
Keinen Timer verwenden...
sondern:

Code:
Label.Caption := 'Öffnen Tabelle A...';
Application.ProcessMessages;
TabelleA.Active := True;
Label.Caption := 'Öffnen Tabelle B...';
Application.ProcessMessages;
TabelleB.Active := True;
Frank
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Tabelle Öffnen+Fortschittsanzeige

  Alt 21. Okt 2016, 09:34
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

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Tabelle Öffnen+Fortschittsanzeige

  Alt 21. Okt 2016, 09:35
Keinen Timer verwenden...
sondern:
Hilft nicht sonderlich, wenn TabelleA bereits eine Minute zum Laden braucht, Dann werden die Nachrichten durch die Anwendung solange halt nicht verarbeitet...

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#7

AW: Tabelle Öffnen+Fortschittsanzeige

  Alt 21. Okt 2016, 10:58
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. Bei Google suchenData Warehouse oder sonstwie vorher das "Ergebnis" in eine Temp-Tabelle schreiben

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Sugar

Registriert seit: 23. Jul 2012
83 Beiträge
 
#8

AW: Tabelle Öffnen+Fortschittsanzeige

  Alt 21. Okt 2016, 15:07
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
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Tabelle Öffnen+Fortschittsanzeige

  Alt 21. Okt 2016, 16:16
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.
?? "keine userorientierte Oberfläche" <> "Userdialog" ??

Wenn du größere Änderungen durchführen willst, dann könntest Du doch gleich SQL bemühen
 Update mytable set myfield='bubuwhere myfield='baba'; Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:18 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