Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   MySQL Refresh (https://www.delphipraxis.net/165781-mysql-refresh.html)

Alterauge 16. Jan 2012 10:24

Datenbank: MySQL • Version: ? • Zugriff über: 3306

MySQL Refresh
 
Gibt es noch eine andere möglichkeit ein DBGrid aktuell zu halten?

Delphi-Quellcode:
procedure TForm1.RefreshTimer(Sender: TObject);
begin
 MyTAble1.Last;
 MYTAble1.Refresh;
end;

Sir Rufo 16. Jan 2012 12:35

AW: MySQL Refresh
 
Hier nochmals der Hinweis:

Gib bitte die Version des MySql-Servers an und mit welchem Framework du darauf zugreifst.
Das kann doch so schwer nicht sein ...

shmia 16. Jan 2012 12:43

AW: MySQL Refresh
 
Naja, zunächst mal sollte man überlegen, ob es überhaupt notwendig ist
die angezeigten Datensätze in einem DBGrid immer aktuell zu halten.
Beispiel:
In einer Bücherei gibt es eine "Buch"-Tabelle.
Wenn ein Mitarbeiter an Arbeitsplatz A neue Bücher einpflegt ist es sicher nicht
notwendig, dass Arbeitsplatz B immer die aktuellen Daten sieht.

Desweiteren ist es fast immer unnötig einem Benutzer ALLE Datensätze einer Tabelle anzuzeigen.
Es reicht meistens eine Teilmenge der Daten - sprich man sollte SQL-Abfragen mit einschränkender WHERE-Klausel verwenden anstatt immer alle Datensätze mittels TTable abzurufen.

EarlyBird 16. Jan 2012 15:30

AW: MySQL Refresh
 
Sorry, aber das muss ich jetzt mal los werden:

Ist es notwendig den TE immer zu "Bevormunden"
(Das geschieht leider leider sehr sehr oft, "warum willst Du alle Datensätze" "warum müssen sie aktuell sein")
Es gibt sicherlich einen guten Grund warum der TE die Datensätze aktuell haben möchte.
Er sagt auch nichts von allen Datensätzen.
Es gibt genügend Gründe für die Frage des TE.
Ist nicht bös gemeint.

Nun zum Tema:
Leider kann auch ich die Frage nicht direkt beantworten.
Mit den Devart Komponenten gibt es z.B. die Möglichkeit einzelne Datensätze zu aktualisieren.
Stichwort "refreshrecord"

mkinzler 16. Jan 2012 17:29

AW: MySQL Refresh
 
Das hat nichts mit bevormunden zu tun, sondern ist ein Denkanstoss.
Und da er eine Table-Komponente verwendet, welche
SQL-Code:
select * from <Tabelle>;
als Abfrage verwendet, hat er alle Datensätze.

shmia 16. Jan 2012 17:42

AW: MySQL Refresh
 
Zitat:

Zitat von EarlyBird (Beitrag 1146201)
Es gibt sicherlich einen guten Grund warum der TE die Datensätze aktuell haben möchte.

Mag sein, aber es gibt eben keine vernünftige technische Lösung dafür!
Ein Datenbankserver müsste zusätzlich eine Benachrichtigungsschnittstelle anbieten.
Die Clients könnten sich beim Server registrieren nach dem Motto: "Server bitte schick mir ein Event, wenn sich der Inhalt der Tabellen Tab1, Tab2 oder TabXY ändert!".
IMHO kann nur Interbase Events an die Clients versenden und selbst wenn andere Server Ähnliches können bringt das wenig weil es keinen Standard gibt.

EarlyBird 16. Jan 2012 18:33

AW: MySQL Refresh
 
Ich kann noch mal die Devart Komponenten empfehlen.
Die Table-Komponente kann dort über
Code:
Mytable.filter := ....
auch gefilterte Datensätze abrufen.
Außerdem gibt es noch die "RefreshQuick" Methode.
Die holt wenigsten nur die geänderten Datensätze.
Und löscht bei bedarf die nicht mehr vorhandenen.

Oder ein TimeStamp nutzen.
Und nur dann refreshen wenn Daten geändert wurden.

Wenns auch eine andere Datenbank sein darf dort gibt es notification events.
(oracle, mssql ich glaube schon die Express Versionen)

DeddyH 16. Jan 2012 18:36

AW: MySQL Refresh
 
Zitat:

Zitat von EarlyBird (Beitrag 1146233)
Wenns auch eine andere Datenbank sein darf dort gibt es notification events.
(oracle, mssql ich glaube schon die Express Versionen)

Oder Firebird (siehe auch shmias Bemerkung zu Interbase, die ursprüngliche Basis ist ja aus demselben Stall).

mkinzler 16. Jan 2012 18:47

AW: MySQL Refresh
 
Zitat:

Zitat von EarlyBird (Beitrag 1146233)
Ich kann noch mal die Devart Komponenten empfehlen.
Die Table-Komponente kann dort über
Code:
Mytable.filter := ....
auch gefilterte Datensätze abrufen.
Außerdem gibt es noch die "RefreshQuick" Methode.
Die holt wenigsten nur die geänderten Datensätze.
Und löscht bei bedarf die nicht mehr vorhandenen.

Oder ein TimeStamp nutzen.
Und nur dann refreshen wenn Daten geändert wurden.

Wenns auch eine andere Datenbank sein darf dort gibt es notification events.
(oracle, mssql ich glaube schon die Express Versionen)

Die Filtereigenschaft kann auch das Standard-DataSet (TAble, Query). dieser Filter ist aber lokal, d.h. es wird trotzdem die ganze Tabelle an den Client übertragen.

EarlyBird 16. Jan 2012 19:31

AW: MySQL Refresh
 
Sorry ich meinte auch:
SQL-Code:
Mytable.filterSQl := ....
Daraus wird dann
SQL-Code:
select * from mytable where ....


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