AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi dataset aktualisieren

dataset aktualisieren

Ein Thema von sancho1980 · begonnen am 2. Apr 2006 · letzter Beitrag vom 4. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2   
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#1

dataset aktualisieren

  Alt 2. Apr 2006, 16:25
Datenbank: interbase 6.5 • Zugriff über: ibx, ibexpert
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 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? DataSet2.Refresh() hat jedenfalls nicht die gewünschte Wirkung erzielt...

*ratlosKuck
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.892 Beiträge
 
Delphi 12 Athens
 
#2

Re: dataset aktualisieren

  Alt 2. Apr 2006, 16:53
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
Thomas Breitkreuz
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#3

Re: dataset aktualisieren

  Alt 2. Apr 2006, 17:04
aber das sind sie längst, wirklich!
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: dataset aktualisieren

  Alt 2. Apr 2006, 17:10
Versuchs mal mit CommitRetaining() der Transaktion.
Markus Kinzler
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#5

Re: dataset aktualisieren

  Alt 2. Apr 2006, 17:39
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!!
Angehängte Dateien
Dateityp: rar mdidatabasetest_373.rar (345,5 KB, 7x aufgerufen)
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.892 Beiträge
 
Delphi 12 Athens
 
#6

Re: dataset aktualisieren

  Alt 2. Apr 2006, 17:55
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
Thomas Breitkreuz
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#7

Re: dataset aktualisieren

  Alt 2. Apr 2006, 18:08
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
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.892 Beiträge
 
Delphi 12 Athens
 
#8

Re: dataset aktualisieren

  Alt 2. Apr 2006, 18:24
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:

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
Thomas Breitkreuz
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#9

Re: dataset aktualisieren

  Alt 2. Apr 2006, 18:30
ne sorry
das war net als rumschreien gemeint
war wirklich die falsche datei
hier noch einmal
Angehängte Dateien
Dateityp: rar mdidatabasetest_779.rar (349,2 KB, 11x aufgerufen)
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.892 Beiträge
 
Delphi 12 Athens
 
#10

Re: dataset aktualisieren

  Alt 3. Apr 2006, 13:22
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]
Thomas Breitkreuz
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:50 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