![]() |
Datenbank: interbase 6.5 • Zugriff über: ibx, ibexpert
dataset aktualisieren
Hallo
ich schlage mich schon seit 'ner Weile mit einer Sache rum, für die ich zwar eine Lösung gefunden hab; allerdings ist die irgendwie nicht optimal. In meiner Anwendung gibt es mehrere TIBDataSet - Komponenten, die gleichzeitig auf die gleiche Datenbank zu greifen. Nehmen wir als Beispiel:
Delphi-Quellcode:
Jetzt stelle man sich weiter vor, die sind beide geöffnet und DataSet1 hat beispielsweise gerade einen neuen Datensatz eingefügt, was mit
var
DataSet1, DataSet2: TIBDataSet;
Delphi-Quellcode:
abgeschlossen wurde. Um jetzt diesen neuen Datensatz auch in DataSet2 verfügbar zu haben, muss ich DataSet2 erst schließen und dann wieder öffnen. Meine Frage: Geht das nicht auch anders? Also ohne gleich das DataSet zu schließen?
DataSet1.Post();
Delphi-Quellcode:
hat jedenfalls nicht die gewünschte Wirkung erzielt...
DataSet2.Refresh()
*ratlosKuck |
Re: dataset aktualisieren
Hallo!
Um dies zu realisieren mußt Du beide Du beide Datasets an die selbe Transaction binden. Dann klappts auch mit dem Nachbarn. Gruß onlinekater |
Re: dataset aktualisieren
aber das sind sie längst, wirklich!
|
Re: dataset aktualisieren
Versuchs mal mit CommitRetaining() der Transaktion.
|
Re: dataset aktualisieren
Liste der Anhänge anzeigen (Anzahl: 1)
ne,
das bringts irgendwie auch nicht könnt euch das kleine prog ja mal runterladen ne leere testdatenbank ist auch dabei (die müsst ihr nach c:\leer.gdb kopieren) einfach das programm starten und auf open database klicken dann seht ihr zwei navigatoren und zwei edit-felder; jeweils an 2 verschiedene datasets gebunden wenn ihr über ein navigator-edit-paar einen neuen datensatz hinzufügt, kann man das im anderen paar nicht sehen commitretaining is ein!! |
Re: dataset aktualisieren
Zitat:
Zitat:
Bau Dir ein Datenmodul, dann schaun wir weiter. BTW Wozu soll das ganze dienen, wenns fertig ist? *neugierigguck* Gruß Thomas |
Re: dataset aktualisieren
doch!
schau dir mal den code genauer an ich meine NICHT, dass du zweimal auf "open database" klicken sollst klicke EINMAL auf open database, dann wird genau EIN datenmodul erzeugt, und dieses datenmodul hat genau 2 datasets; außerdem wird automatisch ein formular erzeugt, in dem die daten dargestellt werden: 2 navigatoren und 2 dbedits jetzt klickst du auf das + vom ersten navigator und fügst einen neuen datensatz ein; dann postest du ihn wenn du jetzt mit dem unteren navigator scrollst, ist der neue datensatz im unteren dbedit NICHT sichtbar |
Re: dataset aktualisieren
also erstens mal: schrei hier nicht so rum
zweitens: Schau Dir bitte selbst mal an, was Du da für einen Code bereitgestellt hast: Startet man Dein Programm, da erhält ein MDI-Form auf dem zwei Buttons liegen. Für beide Buttons hast Du identische OnClick-Routinen hinterlegt. In beiden wird jeweilig die Create-Methode des TDatamodule3 aufgerufen. Ein 'OpenDataBase', auf das ich klicken könnte, kann ich in Deinem Projekt nicht finden. Zitat:
Delphi-Quellcode:
Poste doch mal den Code, auf den sich Dein letztes Posting bezieht :-)
NewDatabase := TDataModule3.Create(self, 'c:/Dokumente und Einstellungen/Sancho/Eigene Dateien/DEMODEEN.gdb');
Gruß Onlinekater |
Re: dataset aktualisieren
Liste der Anhänge anzeigen (Anzahl: 1)
ne sorry
das war net als rumschreien gemeint war wirklich die falsche datei hier noch einmal |
Re: dataset aktualisieren
Hallo Sancho!
Dein Problem liegt in der RefreshSQL Deiner Datasets begründet. Die sieht z. Zt. so aus:
SQL-Code:
Dadurch greift der Refresh nur auf den gerade aktuellen Datensatz.
Select
ID, ASTERM, ASABK, ASPRGM, ASSEM, ZSTERM, ZSABK, ZSPRGM, ZSSEM, DATUM, PROJ, REV, UPDDATUM, ASVERW, ZSVERW, ASDEF, ZSDEF, ASAUDIO, ASVIDEO, ASABBILDUNG, ASQCODE, ZSQCODE, AUT, UPDAUT, ZSABBILDUNG, ZSAUDIO, ZSVIDEO from DICENTRIES where ID = :ID Wenn ich Dich nun richtig versetehe, möchtest Du, daß bei einem Refresh nicht nur der aktuelle Satz sonder die gesamte Datenmenge aktualisiert wird. Dies erreichst Du, indem Du die WHERE-Clause wegläßt. Ich kann Dir allerdings nicht sagen, wann diese RefreshSQL außerdem noch ausgeführt wird. Da könntest Du Dir dann durch das weglassen des WHERE Statements Performance-Probleme einfangen. Ich würde mir eine RefreshAll-Routine schreiben, die a) die where-clause klammert b) Refresh aufruft c) die Where-Clause wieder in Kraft setzt. BTW verwende doch beispielsweise ibobjects, die haben von Hause eine Property, in der Du angeben kannst, ob Du nur den aktuellen Datensatz oder alle Datensätze Refreshen möchtest. Gruß Thomas [EDIT] Schreibfehler korrigiert [/EDIT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:50 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 by Thomas Breitkreuz