Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten auf Clients aus Netzwerk-DB werden nicht aktualisiert (https://www.delphipraxis.net/78230-daten-auf-clients-aus-netzwerk-db-werden-nicht-aktualisiert.html)

BlueStarHH 1. Okt 2006 13:54

Datenbank: Firebird • Version: 1.5 • Zugriff über: TIBTable, TIBDatabase, IBX

Daten auf Clients aus Netzwerk-DB werden nicht aktualisiert
 
Hallo!

Ich nutze in meinem Programm eine Firbirddatenbank. Diese liegt auf einem Server. Mein Programm verbindet sich nun mit der Datenbank auf diesem Server. In meinem Programm nutze ich eine TIBDatabase- verbunden einer mit IBTransaction-Komponente. Für die Tabelle eine TIBTable- mit einer TDataSource-Komponente. Die Daten werden in DBEdit-Feldern einem TDBGrid angezeigt. Wenn ich nun in meinem Programm einen neuen Datensatz mit Tabelle.Insert anlege und diesen mit Tabelle.Post speichere, ist dieser auf anderen Clients nicht sichtbar. Wenn ich den anderen Client beende und neu starte, zeigt er immer noch nicht den neuen Datensatz an. Ich muss den Client, auf dem der Datensatz erzeugt wurde, neu starte, damit er auf anderen Clients sichtbar wird. Mit Neustarten ist gemeint, dass das Programm neu gestartet wird. Das gleiche Problem besteht bei Änderungen an den Datensätzen.

Wie kann ich erreichen, dass Neue Datensätze/Änderungen sofort in die DB geschrieben werden? Und wie kann ich erreichen, dass diese Änderungen auch auf den anderen Clients ohne Neustart sichtbar werden?

Vielen Dank im Voraus!

mkinzler 1. Okt 2006 14:01

Re: Daten auf Clients aus Netzwerk-DB werden nicht aktualisi
 
Wann commitest du die Transaktion?

BlueStarHH 1. Okt 2006 14:07

Re: Daten auf Clients aus Netzwerk-DB werden nicht aktualisi
 
Zitat:

Zitat von mkinzler
Wann commitest du die Transaktion?

Ich dachte das passiert automatisch? Ich habe leider noch nicht so viel Ahnung von Firebird, da ich gerade alles von Paradox nach Firebird umgestellt habe. Wann und wie muss ich denn committen? Nach jedem Aufruf von Post? Kann man das nicht irgendwo einstellen, dass er das automatisch macht? Sonst muss ich jetzt ja alle Aufrufe von Post suchen und danach ein Commit einfügen.

mkinzler 1. Okt 2006 14:15

Re: Daten auf Clients aus Netzwerk-DB werden nicht aktualisi
 
Du kannst die Transaktion so einstellen, daß er automatisch committed. Das ist aber nicht unbedingt gut, du stellst ja damit nur das Verhalten von Paradox her und verzichtest auf den Vorteil von Transaktionen.
Transaktion dienen dazu mehrere zusammenhängende Aktionen nach dem Alle-oder-Keine-Prinzip, d.h. entweder alle Vorgänge werden durchgeführt oder alle werden zurückgenommen.

BlueStarHH 2. Okt 2006 12:20

Re: Daten auf Clients aus Netzwerk-DB werden nicht aktualisi
 
Zitat:

Zitat von mkinzler
Du kannst die Transaktion so einstellen, daß er automatisch committed.

Ich hab die Transaktion nun wie folgt eingestellt:
DefaultAction=TACommitRetaining
IdleTimer=1

Params:
read_committed
rec_version
nowait

Nun werden die Änderungen in die DB eingetragen, ohne dass ich den Client auf dem die Änderungen erfolgten, neustarten muss. Das ist schonmal gut. Aber was jetzt noch fehlt: Die Änderungen werden auf den anderen Clients nicht angezeigt. Ich muss auf den anderen Clients die App erst neustarten. Wie können die Änderungen in den anderen Clients automatisch angezeigt werden? Ich habe in den Clients ein DBGrid, das immer die aktuellen Stand der Datenbank anzeigen soll.

mkinzler 2. Okt 2006 12:22

Re: Daten auf Clients aus Netzwerk-DB werden nicht aktualisi
 
Erzeuge beim Ändern einen Event und lasse die anderen Clients darauf reagieren ( Event-Alerter)

Phoenix 2. Okt 2006 12:39

Re: Daten auf Clients aus Netzwerk-DB werden nicht aktualisi
 
Das, oder die 'Quick&Dirty-Lösung': Du packst einen Timer dazu und lässt die DataSource an der die Grid hängt einfach alle N Sekunden refreshen. Das das ist tatsächlich etwas Dirty - wobei es schon okay ist wenn es sich hier wirklich um eine reine Datenanzeige handelt und Du Dir die Einarbeitung in die Events & Alerts auf Firebird für den Moment ersparen willst.

Dennoch lohnt es sich da einen Blick drauf zu werfen.


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