Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Refresh (https://www.delphipraxis.net/173575-refresh.html)

Alterauge 5. Mär 2013 11:26

Refresh
 
Hallo,

habe ein DBGrid über einem Timer mache ich (1000) also jede 1 sec.
ein refresh.

Jetzt blink das Grid immer auf beim refresh!
Wie kann ich dieses ändern!

Gru? :-)

Sir Rufo 5. Mär 2013 11:31

AW: Refresh
 
Beim DataSet DisableControls und EnableControls

Alterauge 5. Mär 2013 11:47

AW: Refresh
 
Hallo Sir Rufo

ich mache das so:

Delphi-Quellcode:
MyTable2.Refresh;

Sir Rufo 5. Mär 2013 11:53

AW: Refresh
 
Ja dann mach das doch so ...
Delphi-Quellcode:
MyTable2.DisableControls;
try
  MyTable2.Refresh;
finally
  MyTable2.EnableControls;
end;
MyTable2 ist ja irgendwann mal von Delphi-Referenz durchsuchenTDataSet abgeleitet worden

Alterauge 5. Mär 2013 12:00

AW: Refresh
 
Ok, dass sieht gut aus!

Jetzt habe ich noch die Mausanzeige mit der Sanduhr und SQL Zeichen
was blink!

Sir Rufo 5. Mär 2013 12:09

AW: Refresh
 
Das ist doch auch gut so, damit weiß der Benutzer, dass hier Daten geholt werden und er aktuell nichts machen kann (das Programm ist beschäftigt)

Alterauge 5. Mär 2013 12:14

AW: Refresh
 
Ok,
dann werde ich die Zeit ändern!
So sieht das aus als würde gleich das Programm abstürzen! :shock:

Sir Rufo 5. Mär 2013 12:22

AW: Refresh
 
Ansonsten musst du das Pferd eben anders aufzäumen und die Daten per Thread abholen.

Ein TClientDataSet hat die aktuellen Daten für die Anzeige.
Der Thread holt die neuen Daten und übergibt diese (synchronisiert) and das TClientDataSet.

Oder du nimmst eine TCollection und füllst diese vom Thread aus. Dann ist das DBGrid natürlich Geschichte ;)

DSCHUCH 5. Mär 2013 17:27

AW: Refresh
 
oder du probierst das einmal: http://digilander.libero.it/snapobje...pObjectDataset
und erzählst hinterher einmal, ob das (richtig) funktioniert. ;)
ich will das auch seit ewigkeiten mal anschauen und testen. letztendlich läuft es in richtung object mapper.

haentschman 5. Mär 2013 18:38

AW: Refresh
 
Moin... 8-)

[Mein Senf]
Die Daten permanent zu pollen ist grundsätzlich keine gute Idee... :roll:

Warum mußt du das überhaupt machen ?
[/Mein Senf]

Sir Rufo 5. Mär 2013 19:28

AW: Refresh
 
Auch wenn es grundsätzlich keine gute Idee ist zu pollen, wenn die Datenbank aber keine entsprechende Möglichkeit der Benachrichtigung vorsieht, dann muss man halt pollen oder eine Zwischenschicht einschieben (wenn man alle Datenlieferanten umstellen kann)

Furtbichler 6. Mär 2013 06:46

AW: Refresh
 
Wenn es sich um keine Massenänderungen handelt, kann man über einen Trigger die Datensätze markieren, die verändert wurden, bzw. eine separate 'Changes'-Tabelle erstellen. Gepollt wird dann diese Tabelle und eine Heuristik kann entscheiden, wie und ob die Daten neu geladen werden.

Alterauge 8. Mär 2013 13:22

AW: Refresh
 
Hallo,
gibt es noch eine andere Möglichkeit das DBGrid aktuell zu halten?

Ich greife mit einem DBGrid auf eine mySQL DB zu.
Zum Zeitpunk wo das Grid geöffnet wird werden auch alle Daten angezeigt.
Kommen jetzt aber neue Daten dazu, sieht es schlecht aus?

Ohne einen Refresh, ist das Grid nicht aktuell!

Gibt es eine andere Möglichkeit das Grid aktuell zu halten?
Refresh geht, aber das ganze Form zappelt! :-(

Ich arbeite mitder Komponente myTable!

Danke für die schnelle Hilfe !

Furtbichler 9. Mär 2013 08:41

AW: Refresh
 
Alle Möglichkeiten wurden genannt:
1. Regelmäßiges Neuladen der Daten
2. Wenn das RDBMS oder der (App-)Server Benachrichtigungen anbietet, diese verwenden
3. Triggergesteuerte Pflege einer Tabelle, die Änderungen der Daten protokolliert und Pollen dieser Tabelle.

generic 12. Mär 2013 11:38

AW: Refresh
 
Architektur umstellen auf ein Ereignis-System über einen Message-Server.

Kurz:
Änderungen an einen Datensatz, werden über eine MessageQue an das Persistenz-System bzw. Datenbank gemeldet.
Diese Nachrichten, abbonierst du auch auf deinen Client und kannst dann die Datensätze einzeln aktualisieren (in der Oberfläche).


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 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