Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   2 DBGrids sollen die selbe Tabelle inkl. Änderungen zeigen (https://www.delphipraxis.net/191060-2-dbgrids-sollen-die-selbe-tabelle-inkl-aenderungen-zeigen.html)

BlueStarHH 4. Dez 2016 17:26

Datenbank: Firebird • Version: 2.5 • Zugriff über: IBDAC

2 DBGrids sollen die selbe Tabelle inkl. Änderungen zeigen
 
Ich habe in meiner Datenbank eine Tabelle, die zwei mal in meinem Programm angezeigt werden soll:

Dazu habe ich jeweils 2 DBGrids erstellt, die jeweils mit einer TIBCTable/TDataSource-Kombination mit Daten versorgt werden. In beiden TIBCTable-Komponenten ist die selbe Tabelle eingetragen. (Das wird benötigt, da gleichzeigt 2 verschiedene Datensätze ausgewählten werden sollen, die man gleichzeitig sehen/barbeiten soll. Das funktioniert soweit.)

Wenn ich jetzt allerding eine Änderung an dem einem DBGrid vornehme, werden die Änderungen im zweiten DBGrid im selben Datensatz nicht sichtbar. Auch neue Datensätze sind nur in einem der DBGrids sichtbar, je nachdem welches Insert welcher TIBCTable aufgerufen wurde. Wie kann ich die Änderungen in beiden DBGrids anzeigen lassen? Erst nach einem Programmneustart sind alle Änderungen in beiden Grids sichtbar.

mkinzler 4. Dez 2016 18:04

AW: 2 DBGrids sollen die selbe Tabelle inkl. Änderungen zeigen
 
Die 2. Table-Komponente bekommt von der Änderung nichts mit. Du musst bei Änderungen in einem Grid entweder beide DataSets neu laden oder och besser auf Änderungen reagieren ( diese können ja auch von einer anderen Instanz des Programmes und oder anderen Programm her rühren)

nahpets 4. Dez 2016 18:08

AW: 2 DBGrids sollen die selbe Tabelle inkl. Änderungen zeigen
 
Du muss die Daten neu laden, damit Du Änderungen sehen kannst.

Benutzt Du zufällig zusätzlich zum DBGrid auch jeweils einen DBNavigator?

Der hat rechts den Button für ein Refresh.
Den betätigen und die Daten werden neu geladen.

Andernfalls z. B. im AfterPost-Ereignis der Tabellenkomponente die Refresh-Methode aufrufen.

Oder:
Delphi-Quellcode:
DBGrid.DataSource.DataSet.Refresh;
Was ich nicht weiß ist, ob dann der Satzzeiger verändert wird. Wenn ja, müsstest Du Dir vor dem Refresh den Datensatz merken und nach dem Refresh wieder zu diesem wechseln.

Elegant ist diese Lösung allerdings sicherlich nicht.

BlueStarHH 4. Dez 2016 18:43

AW: 2 DBGrids sollen die selbe Tabelle inkl. Änderungen zeigen
 
Zitat:

Zitat von mkinzler (Beitrag 1355307)
Die 2. Table-Komponente bekommt von der Änderung nichts mit. Du musst bei Änderungen in einem Grid entweder beide DataSets neu laden oder och besser auf Änderungen reagieren ( diese können ja auch von einer anderen Instanz des Programmes und oder anderen Programm her rühren)

Kann man auch nur den geänderten Record neu laden? Alles neu zu Laden macht ja nicht viel Sinn...

himitsu 4. Dez 2016 18:46

AW: 2 DBGrids sollen die selbe Tabelle inkl. Änderungen zeigen
 
.Refresh und .RefreshRecord wird von vielen DB-Query-Komponenten unterstützt.
Da wird dann meistens das WHERE erweitert, damit nur der Record getroffen wird und dann nur der geholt. (es gibt nur manchmal Probleme, dass das dann WHERE falsch ist und entweder nichts, oder uviel trifft, was dann in einem "fehlerhaftem" Update endet)


Zwei Mal genau das Selbe?

Im Prinzip könnte man auch an beide Grids die selbe DataSource oder DataSet anbinden.

BlueStarHH 4. Dez 2016 18:48

AW: 2 DBGrids sollen die selbe Tabelle inkl. Änderungen zeigen
 
Zitat:

Zitat von himitsu (Beitrag 1355312)
Zwei Mal genau das Selbe?

Im Prinzip könnte man auch an beide Grids die selbe DataSource oder DataSet anbinden.

Das eine Grid hat manchmal noch einen SQL-Filter-Ausdruck und der Datensatzzeiger soll bei beiden auch unterschiedlich sein...

himitsu 4. Dez 2016 18:58

AW: 2 DBGrids sollen die selbe Tabelle inkl. Änderungen zeigen
 
Dann nimm ein "ordentliches" Grid.

Bei DevExpress braucht man den Filter nicht im DataSet zu machen, sondern kann im DataController des Grids filtern/sortieren.
Und man muß den DataSet-Zeiger nicht mit dem ActiveRecord des Grids synchronisieren lassen. (nur beim Editieren würde dann im DataSet gescrollt)

BlueStarHH 4. Dez 2016 19:08

AW: 2 DBGrids sollen die selbe Tabelle inkl. Änderungen zeigen
 
Zitat:

Zitat von himitsu (Beitrag 1355316)
Dann nimm ein "ordentliches" Grid.

Bei DevExpress braucht man den Filter nicht im DataSet zu machen, sondern kann im DataController des Grids filtern/sortieren.
Und man muß den DataSet-Zeiger nicht mit dem ActiveRecord des Grids synchronisieren lassen. (nur beim Editieren würde dann im DataSet gescrollt)

Ich möchte die Daten erst gar nicht vom Server zum Client übertragen. Daher muss so früh wie möglich gefiltert werden. Das war aber gar nicht die Fragestellung... Ich verwendete übrigens das TcxGrid.


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