Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi dataset aktualisieren (https://www.delphipraxis.net/66677-dataset-aktualisieren.html)

sancho1980 2. Apr 2006 15:25

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:
var
  DataSet1, DataSet2: TIBDataSet;
Jetzt stelle man sich weiter vor, die sind beide geöffnet und DataSet1 hat beispielsweise gerade einen neuen Datensatz eingefügt, was mit
Delphi-Quellcode:
DataSet1.Post();
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?
Delphi-Quellcode:
DataSet2.Refresh()
hat jedenfalls nicht die gewünschte Wirkung erzielt...

*ratlosKuck

TBx 2. Apr 2006 15:53

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

sancho1980 2. Apr 2006 16:04

Re: dataset aktualisieren
 
aber das sind sie längst, wirklich!

mkinzler 2. Apr 2006 16:10

Re: dataset aktualisieren
 
Versuchs mal mit CommitRetaining() der Transaktion.

sancho1980 2. Apr 2006 16:39

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!!

TBx 2. Apr 2006 16:55

Re: dataset aktualisieren
 
Zitat:

Um dies zu realisieren mußt Du beide Du beide Datasets an die selbe Transaction binden.
Zitat:

aber das sind sie längst, wirklich!
Nein, tun sie nicht! Du generierst jeweilig ein neues Datenmodul mit einer eigenen Connection!

Bau Dir ein Datenmodul, dann schaun wir weiter.

BTW Wozu soll das ganze dienen, wenns fertig ist? *neugierigguck*

Gruß

Thomas

sancho1980 2. Apr 2006 17:08

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

TBx 2. Apr 2006 17:24

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:

ne leere testdatenbank ist auch dabei (die müsst ihr nach c:\leer.gdb kopieren)
ist übrigens auch voll daneben, wenn man im Code dann folgendes findet:

Delphi-Quellcode:
NewDatabase := TDataModule3.Create(self, 'c:/Dokumente und Einstellungen/Sancho/Eigene Dateien/DEMODEEN.gdb');
Poste doch mal den Code, auf den sich Dein letztes Posting bezieht :-)

Gruß

Onlinekater

sancho1980 2. Apr 2006 17:30

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

TBx 3. Apr 2006 12:22

Re: dataset aktualisieren
 
Hallo Sancho!

Dein Problem liegt in der RefreshSQL Deiner Datasets begründet.

Die sieht z. Zt. so aus:
SQL-Code:
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
Dadurch greift der Refresh nur auf den gerade aktuellen Datensatz.
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:14 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