Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Andere DBGrids nach Tabellenupdate aktualisieren (https://www.delphipraxis.net/83206-andere-dbgrids-nach-tabellenupdate-aktualisieren.html)

Andreas H. 29. Dez 2006 07:37


Andere DBGrids nach Tabellenupdate aktualisieren
 
Hallo,

folgende Situation:
MySQL-Datenbank mit ZEOS angebunden
mehrere MDIChildForms mit DBGrids (JEDI VCL) und TZTables auf die gleiche DB-Tabelle

Problem: Änderungen an der Tabelle im einen Fenster werden nicht im zweiten Fenster angezeigt. Das ist hauptsächlich deshalb hässlich, wenn ich an einer Tabelle geändert habe, die in einer anderen Form als Detail-Tabelle verwendet wird und ich einen geänderten Datensatz einfügen möchte.

Muss ich denn echt jede Tabelle (in jedem Childfenster) explizit updaten oder gibts da ne Schraube, an der ich drehen kann?

Ich hoffe ihr habt mich verstanden :gruebel:

Gruß Andreas

alzaimar 29. Dez 2006 07:45

Re: Andere DBGrids nach Tabellenupdate aktualisieren
 
Ich kenne die JEDI-Komponenten nicht, aber grundsätzlich sind Datasets nicht synchronisiert.

Versuche, nur ein einziges Dataset pro Tabelle zu verwenden. Die einzelnen Sichten und Tabellenverknüpfungen erstellst Du zur Designzeit. Wenn Du dann das eine Dataset neu lädst, hast Du damit ja per se aktuelle Daten in allen Fenstern.
Sonst bleibt dir nur, alle Queries (Datasets) neu zu laden. Das lässt sich manchmal nicht umgehen, ist aber natürlich der Tod jeder Performanceoptimierung.

Aber wie schon gesagt, ich kenne die JEDI-VCL nicht. Kann ja sein, das die sich was haben einfallen lassen. Im Endeffekt wird es aber auf ein Neuladen aller abhängigen Queries hinauslaufen, und das das blöd ist, sagte ich ja bereits.

Andreas H. 29. Dez 2006 07:52

Re: Andere DBGrids nach Tabellenupdate aktualisieren
 
Hallo,

es handelt sich (noch) nur um Tables, nicht um Queries. Und da die als Detailtabellen fungieren (1-n) muss ich wohl in den sauren Apfel beißen, oder? Und da mehrere MDI-Childs offen sein können, scheidet ja ein zentrale DataSource aus.

Hat noch einer ne Idee?

Gruß Andreas

mkinzler 29. Dez 2006 07:56

Re: Andere DBGrids nach Tabellenupdate aktualisieren
 
Zitat:

Und da mehrere MDI-Childs offen sein können, scheidet ja ein zentrale DataSource aus.
Wenn die Child alle Teil der selben Programminstanz sind reicht eine.

marabu 29. Dez 2006 08:11

Re: Andere DBGrids nach Tabellenupdate aktualisieren
 
Hallo Andreas,

wenn du den "gleichen" DataSet mehrmals auf verschiedenen MDI-Child-Instanzen sitzen hast, dann solltest du überlegen, ob du den DataSet dort wegnehmen kannst. Einmal auf ein DataModule gezogen und auf den MDI-Child-Instanzen nur die DataSource mit dieser zentralen Table-Komponente verbunden ist viel wirtschaftlicher. Das gleiche gilt auch für Master-Detail-Beziehungen: Werden diese mehrfach "gleich" vorgehalten, dann ab damit auf das DataModule.

Freundliche Grüße

Andreas H. 29. Dez 2006 12:12

Re: Andere DBGrids nach Tabellenupdate aktualisieren
 
Ha,

dort waren sie und ich habe sie in die Forms verfrachtet, da ich für jede Form einen andere Filterbedingung habe (durch den Benutzer änderbar - dies ist der Sinn für mehrere Childs!)

Ich glaube, ich muss mir die Sachen nochmal überlegen :gruebel:

Ich meld mich nochmal...

Gruß Andreas

alzaimar 29. Dez 2006 12:23

Re: Andere DBGrids nach Tabellenupdate aktualisieren
 
Hi

1. Möglichkeit: Die Child-spezifischen Filter setzt Du, sobald das Child sichtbar wird
2. Möglichkeit: Verwende TClientDataset + TProvider... Die TClientDatasets erzeugst Du für jedes Child-Fenster mit den entsprechenden Filtern. Einen TProvider verbindest du mit der 'Mastertabelle'. Die TClientdatasets verbindest Du alle zu dem TProvider. Wenn Du die Mastertabelle änderst, werden alle TClientDatasets mit geändert...

Andreas H. 29. Dez 2006 12:50

Re: Andere DBGrids nach Tabellenupdate aktualisieren
 
Soso,

Zitat:

TClientDataset + TProvider
Das ist ja genau das, was ich suche, oder? Ich habe mich schon immer gefragt, wofür man die braucht :cyclops:

Aber wofür ist denn der Provider genau? Meinst Du TDataSetProvider? :gruebel:

Ich probiers mal!

Andreas

Andreas H. 29. Dez 2006 15:25

Re: Andere DBGrids nach Tabellenupdate aktualisieren
 
Hm,

ich kriegs nicht hin :wall:

Folgende Situation:
Mainform:
Table1
DatasetProvider1 mi DataSet:=Table1
ChildForm:
ClientDataSet1 mit erstelltem DataSet und ProviderName:=MainForm->DataSetProvider1

Die Einrichtung des ClientDataset bekomme ich nicht hin. Entweder fehlt beim Zuweisen lokaler Daten die Eigenschaft DataSet odes es fehlt der DatenProvider oder das Datenpaket.

Kannst Du mir weiterhelfen, alzaimar?

Gruß Andreas

Andreas H. 29. Dez 2006 17:42

Re: Andere DBGrids nach Tabellenupdate aktualisieren
 
Also,

wenn ClientDataSet und Provider in der ChildForm liegen, gehts. Das Aktualisieren der Datenbank muss man manuell mit ApplyUpdates erledigen, oder?
Auch das Benachrichtigen der anderen Childs funktioniert noch nicht. Gibts da noch nen Trick?

Gruß Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:10 Uhr.
Seite 1 von 2  1 2      

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